From 7b0c75f3b453bb5d9633b4170e02ee266f946376 Mon Sep 17 00:00:00 2001 From: kavitha Muralitharan Date: Fri, 24 Jan 2025 14:09:15 +0530 Subject: [PATCH 1/3] 933482: Added Collaborative Editing java with Redis --- Server side with Redis/.gitignore | 33 + Server side with Redis/ReadMe.md | 38 ++ Server side with Redis/mvnw | 310 +++++++++ Server side with Redis/mvnw.cmd | 182 +++++ Server side with Redis/pom.xml | 202 ++++++ .../syncfusion/tomcat/BackgroundService.java | 132 ++++ .../CollaborativeEditingController.java | 323 +++++++++ .../tomcat/CollaborativeEditingHelper.java | 129 ++++ .../syncfusion/tomcat/CustomParameter.java | 22 + .../tomcat/CustomRestrictParameter.java | 31 + .../syncfusion/tomcat/DocumentContent.java | 49 ++ .../com/syncfusion/tomcat/FileNameInfo.java | 114 ++++ .../com/syncfusion/tomcat/FilesPathInfo.java | 22 + .../java/com/syncfusion/tomcat/SaveInfo.java | 45 ++ .../syncfusion/tomcat/TomcatApplication.java | 196 ++++++ .../tomcat/config/WebSocketConfig.java | 22 + .../tomcat/controller/DocumentEditorHub.java | 202 ++++++ .../tomcat/controller/RedisSubscriber.java | 93 +++ .../controller/WebSocketEventListener.java | 25 + .../tomcat/others/BackgroundQueueImpl.java | 163 +++++ .../tomcat/others/IBackgroundQueue.java | 88 +++ .../tomcat/others/IQueuedHostedService.java | 8 + .../tomcat/others/QueuedHostedService.java | 127 ++++ .../src/main/resources/application.properties | 14 + .../src/main/resources/static/css/main.css | 298 ++++++++ .../resources/static/document-editor.html | 640 ++++++++++++++++++ .../static/files/Character Formatting_3.docx | Bin 0 -> 7044 bytes .../static/files/Getting Started_3.docx | Bin 0 -> 70294 bytes .../static/files/Headers and Footers_3.docx | Bin 0 -> 12622 bytes .../static/files/Paragraph Formatting_3.docx | Bin 0 -> 12383 bytes .../main/resources/static/files/Styles_3.docx | Bin 0 -> 3761 bytes .../src/main/resources/static/index.html | 108 +++ .../static/js/ej2-documenteditor.min.js | 2 + .../static/js/ej2-documenteditor.min.js.map | 1 + .../src/main/resources/static/js/main.js | 121 ++++ .../src/main/webapp/META-INF/MANIFEST.MF | 3 + .../tomcat/TomcatApplicationTests.java | 13 + 37 files changed, 3756 insertions(+) create mode 100644 Server side with Redis/.gitignore create mode 100644 Server side with Redis/ReadMe.md create mode 100644 Server side with Redis/mvnw create mode 100644 Server side with Redis/mvnw.cmd create mode 100644 Server side with Redis/pom.xml create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java create mode 100644 Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java create mode 100644 Server side with Redis/src/main/resources/application.properties create mode 100644 Server side with Redis/src/main/resources/static/css/main.css create mode 100644 Server side with Redis/src/main/resources/static/document-editor.html create mode 100644 Server side with Redis/src/main/resources/static/files/Character Formatting_3.docx create mode 100644 Server side with Redis/src/main/resources/static/files/Getting Started_3.docx create mode 100644 Server side with Redis/src/main/resources/static/files/Headers and Footers_3.docx create mode 100644 Server side with Redis/src/main/resources/static/files/Paragraph Formatting_3.docx create mode 100644 Server side with Redis/src/main/resources/static/files/Styles_3.docx create mode 100644 Server side with Redis/src/main/resources/static/index.html create mode 100644 Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js create mode 100644 Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map create mode 100644 Server side with Redis/src/main/resources/static/js/main.js create mode 100644 Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java diff --git a/Server side with Redis/.gitignore b/Server side with Redis/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/Server side with Redis/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/Server side with Redis/ReadMe.md b/Server side with Redis/ReadMe.md new file mode 100644 index 0000000..2ae0e98 --- /dev/null +++ b/Server side with Redis/ReadMe.md @@ -0,0 +1,38 @@ +# How to host the DocumentEditor service. + +Opening and saving documents from S3 bucket using PostgreSQL. + +## Maven Project + +Please find the list of commands used for running and deploying the spring boot application in Azure. + +Clean the package using + +> mvn clean package + +Run the application locally using + +> mvn spring-boot:run + +Build the package using + +> mvn package + +Above package generation command creates the "tomcat-0.0.1-SNAPSHOT.war" in the below location. + +> target\tomcat-0.0.1-SNAPSHOT.war + +Please create a Azure app service with Java & Tomcat. + +After creating the app service + +>Development Tools -> Advanced Tools -> Go -> Debug console -> CMD + +Once the file manager is opened please navigate to + +>site -> wwwroot -> webapps + +Upload the generated war file "tomcat-0.0.1-SNAPSHOT.war" the application will be hosted under + +>{site-name}/tomcat-0.0.1-SNAPSHOT + diff --git a/Server side with Redis/mvnw b/Server side with Redis/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/Server side with Redis/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/Server side with Redis/mvnw.cmd b/Server side with Redis/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/Server side with Redis/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/Server side with Redis/pom.xml b/Server side with Redis/pom.xml new file mode 100644 index 0000000..6b42da2 --- /dev/null +++ b/Server side with Redis/pom.xml @@ -0,0 +1,202 @@ + + + 4.0.0 + com.syncfusion + tomcat + 0.0.1-SNAPSHOT + war + tomcat + Demo project for Spring Boot + + + Syncfusion-Java + Syncfusion Java repo + https://jars.syncfusion.com/repository/maven-public/ + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + com.syncfusion.tomcat.TomcatApplication + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + com.syncfusion + syncfusion-javahelper + 26.2.7 + + + com.syncfusion + syncfusion-docio + 26.2.7 + + + com.syncfusion + syncfusion-ej2-spellchecker + 26.2.7 + + + org.luaj + luaj-jse + 3.0.1 + + + + + software.amazon.awssdk + s3 + 2.24.9 + + + com.syncfusion + syncfusion-ej2-wordprocessor + 26.2.7 + + + redis.clients + jedis + 3.7.0 + + + org.springframework + spring-messaging + + + org.springframework + spring-websocket + + + org.springframework.boot + spring-boot-starter-web + + + com.google.code.gson + gson + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-data-redis + + + redis.clients + jedis + 3.3.0 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.2 + + 22.0.2 + 22.0.2 + + + + + copy-dependencies + compile + + copy-dependencies + + + ${project.build.directory}/${project.build.finalName}/WEB-INF/lib + + + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.apache.maven.plugins + + + maven-dependency-plugin + + + [2.8,) + + + + copy-dependencies + + + + + + + + + + + + + + + + + diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java new file mode 100644 index 0000000..2e2e8f5 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java @@ -0,0 +1,132 @@ +package com.syncfusion.tomcat; + +import java.io.ByteArrayOutputStream; +import java.io.Console; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Semaphore; + +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import com.syncfusion.docio.WordDocument; +import com.syncfusion.ej2.wordprocessor.ActionInfo; +import com.syncfusion.ej2.wordprocessor.CollaborativeEditingHandler; +import com.syncfusion.ej2.wordprocessor.WordProcessorHelper; +import com.syncfusion.tomcat.controller.RedisSubscriber; + +import ch.qos.logback.classic.Logger; +import redis.clients.jedis.Jedis; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.AwsCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; +import software.amazon.awssdk.regions.Region; + +@Service +public class BackgroundService { + + private static final Logger logger = (Logger) LoggerFactory.getLogger(BackgroundService.class); + private final List itemsToProcess = new ArrayList<>(); + private final Semaphore semaphore = new Semaphore(1); + + @Value("${spring.datasource.accesskey}") + private String datasourceAccessKey; + @Value("${spring.datasource.secretkey}") + private String datasourceSecretKey; + @Value("${spring.datasource.bucketname}") + private String datasourceBucketName; + @Value("${spring.datasource.regionname}") + private String datasourceRegionName; + + @Scheduled(fixedRate = 5000) // Runs every 10 seconds + public void runBackgroundTask() { + try { + semaphore.acquire(); + synchronized (itemsToProcess) { + while (!itemsToProcess.isEmpty()) { + SaveInfo item = itemsToProcess.remove(0); + logger.info("Processing item : ",item); + // Process the item here + applyOperationsToSourceDocument(item); + clearRecordsFromRedisCache(item); + } + } + } catch (InterruptedException e) { + // Handle the exception if needed + } finally { + semaphore.release(); + } + } + + public void addItemToProcess(SaveInfo item) { + synchronized (itemsToProcess) { + itemsToProcess.add(item); + } + } + + private void applyOperationsToSourceDocument(SaveInfo workItem) { + try { + ArrayList actions = (ArrayList) workItem.getActions(); + for (ActionInfo action : actions) { + if (!action.isTransformed()) { + CollaborativeEditingHandler.transformOperation(action, actions); + } + } + ClassLoader classLoader = getClass().getClassLoader(); + String fileName = CollaborativeEditingController.documentName; + WordProcessorHelper document = CollaborativeEditingController.getDocumentFromBucketS3(fileName,datasourceAccessKey, + datasourceSecretKey, datasourceBucketName); + CollaborativeEditingHandler handler = new CollaborativeEditingHandler(document); + + if (actions != null && actions.size() > 0) { + for (ActionInfo info : actions) { + handler.updateAction(info); + } + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + WordDocument doc = WordProcessorHelper.save(WordProcessorHelper.serialize(handler.getDocument())); + doc.save(outputStream, com.syncfusion.docio.FormatType.Docx); + + byte[] data = outputStream.toByteArray(); + + AwsCredentials credentials = AwsBasicCredentials.create(datasourceAccessKey, datasourceSecretKey); + StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials); + S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).credentialsProvider(credentialsProvider) + .build(); + PutObjectRequest objectRequest = PutObjectRequest.builder().bucket(datasourceBucketName).key(fileName).build(); + s3Client.putObject(objectRequest, software.amazon.awssdk.core.sync.RequestBody.fromBytes(data)); + s3Client.close(); + + // String currentDir = System.getProperty("user.dir") + "/src/main/resources/static/files"; + // try (FileOutputStream fos = new FileOutputStream(currentDir + workItem.getRoomName())) { + // // Write the byte array to the file + // fos.write(data); + // fos.close(); + // } catch (Exception ex) { + // ex.printStackTrace(); + // } + outputStream.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void clearRecordsFromRedisCache(SaveInfo workItem) { + Boolean partialSave = workItem.getPartialSave(); + String roomName = workItem.getRoomName(); + try (Jedis jedis = RedisSubscriber.getJedis()) { + if (!partialSave) { + jedis.del(roomName); + jedis.del(roomName + CollaborativeEditingHelper.revisionInfoSuffix); + jedis.del(roomName + CollaborativeEditingHelper.versionInfoSuffix); + } + jedis.del(roomName + CollaborativeEditingHelper.actionsToRemoveSuffix); + } + } +} \ No newline at end of file diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java new file mode 100644 index 0000000..a958eec --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java @@ -0,0 +1,323 @@ +package com.syncfusion.tomcat; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.messaging.MessageHeaders; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.syncfusion.ej2.wordprocessor.ActionInfo; +import com.syncfusion.ej2.wordprocessor.CollaborativeEditingHandler; +import com.syncfusion.ej2.wordprocessor.DocumentOperation; +import com.syncfusion.ej2.wordprocessor.WordProcessorHelper; +import com.syncfusion.tomcat.controller.DocumentEditorHub; +import com.syncfusion.tomcat.controller.RedisSubscriber; +import org.springframework.core.io.Resource; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.exceptions.JedisException; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.AwsCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.core.ResponseInputStream; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; +import software.amazon.awssdk.services.s3.model.GetObjectResponse; +import software.amazon.awssdk.regions.Region; + +@RestController +@Component +public class CollaborativeEditingController { + + @Value("classpath:static/files/*") + private Resource[] resources; + + // Redis Configuration + @Value("${spring.datasource.redishost}") + private static String REDIS_HOST; + @Value("${spring.datasource.redisport}") + private static int REDIS_PORT; + @Value("${spring.datasource.redispassword}") + private String REDIS_PASSWORD; + @Value("${spring.datasource.redisssl}") + private boolean REDISSSL; + + @Value("${spring.datasource.accesskey}") + private String datasourceAccessKey; + @Value("${spring.datasource.secretkey}") + private String datasourceSecretKey; + @Value("${spring.datasource.bucketname}") + private String datasourceBucketName; + @Value("${spring.datasource.regionname}") + private String datasourceRegionName; + + @Autowired + private BackgroundService backgroundService; + + private final Gson gson; + protected static String documentName; + + // Dependency injection through constructor + @Autowired + public CollaborativeEditingController(Gson gson) { + this.gson = gson; + } + + @CrossOrigin(origins = "*", allowedHeaders = "*") + @PostMapping("/api/collaborativeediting/ImportFile") + public String ImportFile(@RequestBody FilesPathInfo file) throws Exception { + try { + ClassLoader classLoader = getClass().getClassLoader(); + WordProcessorHelper document = getDocumentFromBucketS3(file.getFileName(), datasourceAccessKey, + datasourceSecretKey, datasourceBucketName); + documentName=file.getFileName(); + // Get the list of pending operations for the document + List actions = getPendingOperations(file.getFileName(), 0, -1); + if (actions != null && actions.size() > 0) { + // If there are any pending actions, update the document with these actions + document.updateActions(actions); + } + // Serialize the updated document to SFDT format + String json = WordProcessorHelper.serialize(document); + // Return the serialized content as a JSON string + return json; + } catch (Exception e) { + e.printStackTrace(); + return "{\"sections\":[{\"blocks\":[{\"inlines\":[{\"text\":" + e.getMessage() + "}]}]}]}"; + } + } + + // Method to retrieve pending operations from a Redis list between specified + // indexes + private List getPendingOperations(String listKey, int startIndex, int endIndex) { + try (Jedis jedis = RedisSubscriber.getJedis()) { + // Initialize the list to hold ActionInfo objects + // List actionInfoList = new ArrayList<>(); + Object response = jedis.eval(CollaborativeEditingHelper.pendingOperations, 2, listKey, + listKey + CollaborativeEditingHelper.actionsToRemoveSuffix, String.valueOf(startIndex), + String.valueOf(endIndex)); + List results = (List) response; + List actions = new ArrayList<>(); + for (Object result : results) { + List resultList = (List) result; + for (Object item : resultList) { + actions.add(gson.fromJson((String) item, ActionInfo.class)); + } + } + return actions; + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + } + + @CrossOrigin(origins = "*", allowedHeaders = "*") + @PostMapping("/api/collaborativeediting/UpdateAction") + public ActionInfo UpdateAction(@RequestBody ActionInfo param) throws Exception { + String roomName = param.getRoomName(); + ActionInfo transformedAction = addOperationsToCache(param); + HashMap action = new HashMap<>(); + action.put("action", "updateAction"); + DocumentEditorHub.publishToRedis(roomName, transformedAction); + DocumentEditorHub.broadcastToRoom(roomName, transformedAction, new MessageHeaders(action)); + return transformedAction; + } + + @CrossOrigin(origins = "*", allowedHeaders = "*") + @PostMapping("/api/collaborativeediting/GetActionsFromServer") + public String GetActionsFromServer(@RequestBody ActionInfo param) throws ClassNotFoundException { + try (Jedis jedis = RedisSubscriber.getJedis()) { + // Initialize necessary variables from the parameters and helper class + int saveThreshold = CollaborativeEditingHelper.saveThreshold; + String roomName = param.getRoomName(); + int lastSyncedVersion = param.getVersion(); + int clientVersion = param.getVersion(); + // Fetch actions that are effective and pending based on the last synced version + List actions = GetEffectivePendingVersion(roomName, lastSyncedVersion, jedis); + List currentAction = new ArrayList<>(); + + for (ActionInfo action : actions) { + // Increment the version for each action sequentially + action.setVersion(++clientVersion); + + // Filter actions to only include those that are newer than the client's last + // known version + if (action.getVersion() > lastSyncedVersion) { + // Transform actions that have not been transformed yet + if (!action.isTransformed()) { + CollaborativeEditingHandler.transformOperation(action, new ArrayList<>(actions)); + } + currentAction.add(action); + } + } + // Serialize the filtered and transformed actions to JSON and return + return gson.toJson(currentAction); + } catch (Exception ex) { + ex.printStackTrace(); + // In case of an exception, return an empty JSON object + return "{}"; + } + } + + private List GetEffectivePendingVersion(String roomName, int lastSyncedVersion, Jedis jedis) { + // Define Redis keys for accessing the room data and its revision information + String[] keys = { roomName, roomName + CollaborativeEditingHelper.revisionInfoSuffix }; + // Prepare Redis values for the script: start index and save threshold + String[] values = { Integer.toString(lastSyncedVersion), + String.valueOf(CollaborativeEditingHelper.saveThreshold) }; + Object response = jedis.eval(CollaborativeEditingHelper.effectivePendingOperations, keys.length, keys[0], + keys[1], values[0], values[1]); + // Deserialize the fetched actions from Redis and convert them into a list of + // ActionInfo objects + List results = (List) response; + List actions = new ArrayList<>(); + for (Object result : results) { + if (result instanceof String) { + actions.add(gson.fromJson((String) result, ActionInfo.class)); + } + } + return actions; + } + + private ActionInfo addOperationsToCache(ActionInfo action) throws Exception { + int clientVersion = action.getVersion(); + // Serialize the action + String serializedAction = gson.toJson(action); + String roomName = action.getRoomName(); + + // Define the keys for Redis operations based on the action's room name + String[] keys = { roomName + CollaborativeEditingHelper.versionInfoSuffix, roomName, + roomName + CollaborativeEditingHelper.revisionInfoSuffix, + roomName + CollaborativeEditingHelper.actionsToRemoveSuffix }; + // Prepare values for the Redis script + String[] values = { serializedAction, String.valueOf(clientVersion), + String.valueOf(CollaborativeEditingHelper.saveThreshold) }; + + try (Jedis jedis = RedisSubscriber.getJedis()) { + try { + // Execute the Lua script in Redis and store the results + Object response = jedis.eval(CollaborativeEditingHelper.insertScript, keys.length, keys[0], keys[1], + keys[2], keys[3], values[0], values[1], values[2]); + List results = (List) response; + // Parse the version number from the script results + int version = Integer.parseInt(results.get(0).toString()); + // Deserialize the list of previous operations from the script results + ArrayList previousOperations = new ArrayList(); + Object data = results.get(1); + if (data instanceof List) { + for (Object result : (List) data) { + if (result instanceof String) { + previousOperations.add(gson.fromJson((String) result, ActionInfo.class)); + } + } + } + // Increment the version for each previous operation + previousOperations.forEach(op -> op.setVersion(op.getVersion() + 1)); + // Check if there are multiple previous operations to determine if + // transformation is needed + if (previousOperations.size() > 1) { + // Set the current action to the last operation in the list + action = previousOperations.get(previousOperations.size() - 1); + for (ActionInfo op : previousOperations) { + // Transform operations that have not been transformed yet + List operation = op.getOperations(); + if (operation != null && !op.isTransformed()) { + CollaborativeEditingHandler.transformOperation(op, previousOperations); + } + } + } + // Update the action's version and mark it as transformed + action.setVersion(version); + action.setTransformed(true); + // Update the record in the cache with the new version + updateRecordToCache(version, action, jedis); + // Check if there are cleared operations to be saved + if (results.size() > 2 && results.get(2) != null) { + autoSaveChangesToSourceDocument((List) results.get(2), action); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } catch (JedisException e) { + e.printStackTrace(); + } + // Return the updated action + return action; + } + + private void autoSaveChangesToSourceDocument(List clearedOperations, ActionInfo action) { + List actions = new ArrayList<>(); + for (Object operation : clearedOperations) { + ActionInfo actionInfo = gson.fromJson((String) operation, ActionInfo.class); + actions.add(actionInfo); + } + // Prepare the message for saving the cleared operations + SaveInfo message = new SaveInfo(); + message.setActions(actions); + message.setPartialSave(true); + message.setRoomName(action.getRoomName()); + backgroundService.addItemToProcess(message); + } + + private void updateRecordToCache(int version, ActionInfo action, Jedis jedis) { + // Serialize the action + String serializedAction = gson.toJson(action); + + // Prepare Redis keys and values for the script execution + String roomName = action.getRoomName(); + String revisionInfoKey = roomName + CollaborativeEditingHelper.revisionInfoSuffix; + String previousVersion = String.valueOf(version - 1); + String saveThreshold = String.valueOf(CollaborativeEditingHelper.saveThreshold); + + // Execute the Lua script with the prepared keys and values + try { + jedis.eval(CollaborativeEditingHelper.updateRecord, 2, roomName, revisionInfoKey, serializedAction, + previousVersion, saveThreshold); + } catch (Exception ex) { + ex.printStackTrace(); + // Handle the exception as needed, e.g., logging or rethrowing + } + } + protected static WordProcessorHelper getDocumentFromBucketS3(String documentId, String accessKey, String secretKey, + String bucketName) { + try { + AwsCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey); + StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials); + S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).credentialsProvider(credentialsProvider) + .build(); + ResponseInputStream objectData = s3Client + .getObject(GetObjectRequest.builder().bucket(bucketName).key(documentId).build()); + // Read the object data into a byte array + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = objectData.read(buffer)) != -1) { + byteArrayOutputStream.write(buffer, 0, bytesRead); + } + s3Client.close(); + byte[] data = byteArrayOutputStream.toByteArray(); + // Create an input stream from the byte array + try (InputStream stream = new ByteArrayInputStream(data)) { + return WordProcessorHelper.load(stream, true); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java new file mode 100644 index 0000000..3623f69 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java @@ -0,0 +1,129 @@ +package com.syncfusion.tomcat; + +public class CollaborativeEditingHelper { + + // Maximum number of operation we can queue in single revision. + // If we reach this limit, we will save the operations to source document. + public static final int saveThreshold = 150; + + // Suffix key to store revision information in redis cache. + public static final String versionInfoSuffix = "_version_info"; + + // Suffix key to store version information in redis cache. + public static final String revisionInfoSuffix = "_revision_info"; + + // Suffix key to store user information in redis cache. + public static final String userInfoSuffix = "_user_info"; + + // Suffix key to store removed actions information in redis cache. + public static final String actionsToRemoveSuffix = "_actions_to_remove"; + + // Key to store room information with connection Id in redis cache. + public static final String connectionIdRoomMappingKey = "ej_de_connection_id_room_mapping"; + + public static final String insertScript = "-- Define keys for version, list, and revision \n"+ + "local versionKey = KEYS[1] \n"+ + "local listKey = KEYS[2] \n"+ + "local revisionKey = KEYS[3] \n"+ + "local updateKey = KEYS[4] \n"+ + "-- Define arguments: item to insert, client's version, and threshold for cache \n"+ + "local item = ARGV[1] \n"+ + "local clientVersion = tonumber(ARGV[2]) \n"+ + "local threshold = tonumber(ARGV[3]) \n"+ + "-- Increment the version for each operation \n"+ + "local version = redis.call('INCR', versionKey) \n"+ + "-- Retrieve the current revision, or initialize it if it doesn't exist \n"+ + "local revision = redis.call('GET', revisionKey) \n"+ + "if not revision then \n"+ + "redis.call('SET', revisionKey, '0') \n"+ + "revision = 0 \n"+ + "else \n"+ + "revision = tonumber(revision) \n"+ + "end \n"+ + "-- Calculate the effective version by multiplying revision by threshold \n"+ + "local effectiveVersion = revision * threshold \n"+ + "-- Adjust clientVersion based on effectiveVersion \n"+ + "clientVersion = clientVersion - effectiveVersion \n"+ + "-- Add the new item to the list and get the new length \n"+ + "local length = redis.call('RPUSH', listKey, item) \n"+ + "-- Retrieve operations since the client's version \n"+ + "local previousOps = redis.call('LRANGE', listKey, clientVersion, -1) \n"+ + "-- Define a limit for cache based on threshold \n"+ + "local cacheLimit = threshold * 2; \n"+ + "local elementToRemove = nil \n"+ + "-- If the length of the list reaches the cache limit, trim the list \n"+ + "if length % cacheLimit == 0 then \n"+ + "elementToRemove = redis.call('LRANGE', listKey, 0, threshold - 1) \n"+ + "redis.call('LTRIM', listKey, threshold, -1) \n"+ + "-- Increment the revision after trimming \n"+ + "redis.call('INCR', revisionKey) \n"+ + "-- Add elements to remove to updateKey \n"+ + "for _, v in ipairs(elementToRemove) do \n"+ + "redis.call('RPUSH', updateKey, v) \n"+ + "end \n"+ + "end \n"+ + "-- Return the current version, operations since client's version, and elements removed \n"+ + "local values = {version, previousOps, elementToRemove} \n"+ + "return values \n"; + + public static final String updateRecord = "-- Define keys for list and revision \n" + + "local listKey = KEYS[1] \n" + + "local revisionKey = KEYS[2] \n"+ + "-- Define arguments: item to insert, client's version, and threshold for cache \n"+ + "local item = ARGV[1] \n"+ + "local clientVersion = ARGV[2] \n"+ + "local threshold = tonumber(ARGV[3]) \n"+ + "-- Retrieve the current revision from Redis, or initialize it if it doesn't exist \n"+ + "local revision = redis.call('GET', revisionKey) \n"+ + "if not revision then \n"+ + "revision = 0 \n"+ + "else \n"+ + "revision = tonumber(revision) \n"+ + "end \n"+ + "-- Calculate the effective version by multiplying revision by threshold \n"+ + "local effectiveVersion = revision * threshold \n"+ + "-- Adjust clientVersion based on effectiveVersion \n"+ + "clientVersion = tonumber(clientVersion) - effectiveVersion \n"+ + "-- Update the list at the position calculated by the adjusted clientVersion \n"+ + "-- This effectively 'inserts' the item into the list at the position reflecting the client's view of the list \n"+ + "redis.call('LSET', listKey, clientVersion, item) \n"; + + public static final String effectivePendingOperations = "-- Define the keys for accessing the list and revision in Redis \n"+ + "local listKey = KEYS[1] \n"+ + "local revisionKey = KEYS[2] \n"+ + "-- Convert the first argument to a number to represent the client's version \n"+ + "local clientVersion = tonumber(ARGV[1]) \n"+ + "-- Convert the second argument to a number for the threshold value \n"+ + "local threshold = tonumber(ARGV[2]) \n"+ + "-- Retrieve the current revision number from Redis \n"+ + "local revision = redis.call('GET', revisionKey) \n"+ + "if not revision then \n"+ + "revision = 0 \n"+ + "else \n"+ + "revision = tonumber(revision) \n"+ + "end \n"+ + "-- Calculate the effective version by multiplying the revision number by the threshold \n"+ + "-- This helps in determining the actual version of the document considering the revisions \n"+ + "local effectiveVersion = revision * threshold \n"+ + "-- Adjust the client's version by subtracting the effective version \n"+ + "-- This calculation aligns the client's version with the server's version, accounting for any revisions \n"+ + "clientVersion = clientVersion - effectiveVersion \n"+ + "-- Return a range of list elements starting from the adjusted client version to the end of the list \n"+ + "-- This command retrieves all operations that have occurred since the client's last known state \n"+ + "if clientVersion >= 0 then \n"+ + "return redis.call('LRANGE', listKey, clientVersion, -1) \n"+ + "else \n"+ + "return {} \n"+ + "end \n"; + + public static final String pendingOperations = "local listKey = KEYS[1] \n"+ + "local processingKey = KEYS[2] \n"+ + "local startIndex = tonumber(ARGV[1]) \n"+ + "local endIndex = tonumber(ARGV[2]) \n"+ + "-- Fetch the list of operations from the listKey \n"+ + "local listValues = redis.call('LRANGE', listKey, startIndex, endIndex) \n"+ + "-- Fetch the list of operations from the processingKey \n"+ + "local processingValues = redis.call('LRANGE', processingKey, startIndex, endIndex) \n"+ + "-- Return both lists as a combined result \n"+ + "return {processingValues, listValues} \n"; +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java new file mode 100644 index 0000000..7811985 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java @@ -0,0 +1,22 @@ +package com.syncfusion.tomcat; + +public class CustomParameter { + public String content; + public String type; + + public String getContent() { + return content; + } + + public String getType() { + return type; + } + + public void setContent(String value) { + content = value; + } + + public void setType(String value) { + type = value; + } +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java new file mode 100644 index 0000000..e26517a --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java @@ -0,0 +1,31 @@ +package com.syncfusion.tomcat; + +public class CustomRestrictParameter { + public String passwordBase64; + public String saltBase64; + public int spinCount; + + public String getPasswordBase64() { + return passwordBase64; + } + + public String getSaltBase64() { + return saltBase64; + } + + public int getSpinCount() { + return spinCount; + } + + public void setPasswordBase64(String value) { + passwordBase64 = value; + } + + public void setSaltBase64(String value) { + saltBase64 = value; + } + + public void setSpinCount(int value) { + spinCount = value; + } +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java new file mode 100644 index 0000000..3e6458c --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java @@ -0,0 +1,49 @@ +package com.syncfusion.tomcat; + +import java.util.List; + +import com.syncfusion.ej2.wordprocessor.ActionInfo; + +public class DocumentContent { + private int version; + private String sfdt; + private List actions; + + // Default constructor + public DocumentContent() { + } + + // Parameterized constructor + + public DocumentContent(int version, String sfdt, List actions) { + this.version = version; + this.sfdt = sfdt; + this.actions = actions; + } + + // Getter and setter methods + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public String getSfdt() { + return sfdt; + } + + public void setSfdt(String sfdt) { + this.sfdt = sfdt; + } + + public List getActions() { + return actions; + } + + public void setActions(List actions) { + this.actions = actions; + } + +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java new file mode 100644 index 0000000..0f366c3 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java @@ -0,0 +1,114 @@ +package com.syncfusion.tomcat; + +import java.util.ArrayList; +import com.syncfusion.ej2.wordprocessor.ActionInfo; +import com.syncfusion.tomcat.controller.DocumentEditorHub; + +public class FileNameInfo { + + private int fileIndex; + private String fileName; + + public FileNameInfo(int index, String fileName) { + this.setFileIndex(index); + this.setFileName(fileName); +// if (DocumentEditorHub.roomList.containsKey(fileName)) { +// ArrayList users = DocumentEditorHub.roomList.get(fileName); +// for (ActionInfo user : users) { +// activeUsers.add(constructInitials(user.getCurrentUser())); +// } +// } + } + + public String constructInitials(String authorName) { + String[] splittedName = authorName.split(" "); + StringBuilder initials = new StringBuilder(); + for (String namePart : splittedName) { + if (namePart.length() > 0 && !namePart.isEmpty()) { + initials.append(namePart.charAt(0)); + } + } + return initials.toString(); + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public int getFileIndex() { + return fileIndex; + } + + public void setFileIndex(int fileIndex) { + this.fileIndex = fileIndex; + } + + private String documentName; + private String createdOn; + private String sharedWith; + private String documentID; + private String sharedBy; + private String owner; + private ArrayList activeUsers = new ArrayList<>(); + + public String getDocumentName() { + return documentName; + } + + public void setDocumentName(String documentName) { + this.documentName = documentName; + } + + public String getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(String createdOn) { + this.createdOn = createdOn; + } + + public String getSharedWith() { + return sharedWith; + } + + public void setSharedWith(String sharedWith) { + this.sharedWith = sharedWith; + } + + public String getDocumentID() { + return documentID; + } + + public void setDocumentID(String documentID) { + this.documentID = documentID; + } + + public String getSharedBy() { + return sharedBy; + } + + public void setSharedBy(String sharedBy) { + this.sharedBy = sharedBy; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public ArrayList getActiveUsers() { + return activeUsers; + } + + public void setActiveUsers(ArrayList activeUsers) { + this.activeUsers = activeUsers; + } + +} \ No newline at end of file diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java new file mode 100644 index 0000000..0001e5d --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java @@ -0,0 +1,22 @@ +package com.syncfusion.tomcat; + +public class FilesPathInfo { + private String fileName; + private String roomName; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getRoomName() { + return roomName; + } + + public void setRoomName(String roomName) { + this.roomName = roomName; + } +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java new file mode 100644 index 0000000..a501780 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java @@ -0,0 +1,45 @@ +package com.syncfusion.tomcat; + +import com.syncfusion.ej2.wordprocessor.ActionInfo; +import java.util.List; + +public class SaveInfo { + private String roomName; + private List actions; + private String userId; + private int version; + private boolean partialSave; + + public void setVersion(int version) { + this.version = version; + } + + public void setActions(List clearedOperations) { + this.actions = clearedOperations; + } + + public void setPartialSave(boolean partialSave) { + this.partialSave = partialSave; + } + + public void setUserID(String userID) { + this.userId = userID; + } + + public void setRoomName(String roomName2) { + this.roomName = roomName2; + } + + public List getActions() { + return actions; + } + + public String getRoomName() { + return roomName; + } + + public Boolean getPartialSave() { + return partialSave; + } + +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java new file mode 100644 index 0000000..3d7f2bf --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java @@ -0,0 +1,196 @@ +package com.syncfusion.tomcat; + +import java.util.ArrayList; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.core.io.Resource; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.syncfusion.ej2.wordprocessor.WordProcessorHelper; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.syncfusion.ej2.wordprocessor.FormatType; + +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; +import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; +import software.amazon.awssdk.services.s3.model.S3Object; + +@SpringBootApplication(exclude = { SecurityAutoConfiguration.class }) +@RestController +@EnableAsync +@EnableScheduling +public class TomcatApplication extends SpringBootServletInitializer { + @Value("${spring.datasource.accesskey}") + private String datasourceAccessKey; + @Value("${spring.datasource.secretkey}") + private String datasourceSecretKey; + @Value("${spring.datasource.bucketname}") + private String datasourceBucketName; + @Value("${spring.datasource.regionname}") + private String datasourceRegionName; + + @Value("classpath:static/files/*") + private Resource[] resources; + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(TomcatApplication.class); + } + + public static void main(String[] args) { + SpringApplication.run(TomcatApplication.class, args); + } + + @CrossOrigin + @RequestMapping(value = "/") + public String hello() { + return "Hello From Syncfusion Document Editor Java Service"; + } + + @CrossOrigin + @RequestMapping(value = "/test") + public String test() { + System.out.println("==== in test ===="); + return "{\"sections\":[{\"blocks\":[{\"inlines\":[{\"texdocNamet\":\"Hello World\"}]}]}]}"; + } + + @CrossOrigin + @RequestMapping(value = "/api/wordeditor/Import") + public String uploadFile(@RequestParam("files") MultipartFile file) throws Exception { + try { + return WordProcessorHelper.load(file.getInputStream(), FormatType.Docx); + } catch (Exception e) { + e.printStackTrace(); + return "{\"sections\":[{\"blocks\":[{\"inlines\":[{\"text\":" + e.getMessage() + "}]}]}]}"; + } + } + + @CrossOrigin + @RequestMapping(value = "/api/wordeditor/RestrictEditing") + public String[] restrictEditing(@RequestBody CustomRestrictParameter param) throws Exception { + if (param.passwordBase64 == "" && param.passwordBase64 == null) + return null; + return WordProcessorHelper.computeHash(param.passwordBase64, param.saltBase64, param.spinCount); + } + + @CrossOrigin + @RequestMapping(value = "/api/wordeditor/SystemClipboard") + public String systemClipboard(@RequestBody CustomParameter param) { + if (param.content != null && param.content != "") { + try { + return WordProcessorHelper.loadString(param.content, GetFormatType(param.type.toLowerCase())); + } catch (Exception e) { + return ""; + } + } + return ""; + } + + static FormatType GetFormatType(String format) { + switch (format) { + case ".dotx": + case ".docx": + case ".docm": + case ".dotm": + return FormatType.Docx; + case ".dot": + case ".doc": + return FormatType.Doc; + case ".rtf": + return FormatType.Rtf; + case ".txt": + return FormatType.Txt; + case ".xml": + return FormatType.WordML; + case ".html": + return FormatType.Html; + default: + return FormatType.Docx; + } + } + + + @CrossOrigin(origins = "*", allowedHeaders = "*") + @GetMapping("/api/wordeditor/GetDataSource") + public String GetDataSource() throws Exception { + ArrayList files = GetFilesInfo(); + ArrayList dataSource = new ArrayList(); + for (int i = 0; i < files.size(); i++) { + dataSource.add(new FileNameInfo(i + 1, files.get(i).getFileName())); + } + GsonBuilder gsonBu = new GsonBuilder(); + Gson gson = gsonBu.disableHtmlEscaping().create(); + return gson.toJson(dataSource); + } + + @CrossOrigin(origins = "*", allowedHeaders = "*") + @GetMapping("/api/wordeditor/GetDataSourceS3") + public String GetDataSourceS3() throws Exception { + int i=0; + ArrayList dataSource = new ArrayList(); + String bucketName = datasourceBucketName; + + // Create an S3 client + S3Client s3Client = S3Client.builder() + .region(Region.US_EAST_1) // Change to your bucket's region + .credentialsProvider(StaticCredentialsProvider.create( + AwsBasicCredentials.create(datasourceAccessKey,datasourceSecretKey) + )) + .build(); + ListObjectsV2Request listObjectsReq = ListObjectsV2Request.builder() + .bucket(bucketName) + .maxKeys(10) // Optional: limit the number of results + .build(); + ListObjectsV2Response listObjectsRes; + do { + listObjectsRes = s3Client.listObjectsV2(listObjectsReq); + + for (S3Object s3Object : listObjectsRes.contents()) { + System.out.println(" - " + s3Object.key() + " (size: " + s3Object.size() + " bytes)"); + dataSource.add(new FileNameInfo(i + 1, s3Object.key())); + } + + // Set continuation token for pagination + listObjectsReq = listObjectsReq.toBuilder() + .continuationToken(listObjectsRes.nextContinuationToken()) + .build(); + + } while (listObjectsRes.isTruncated()); + GsonBuilder gsonBu = new GsonBuilder(); + Gson gson = gsonBu.disableHtmlEscaping().create(); + return gson.toJson(dataSource); + } + + private ArrayList GetFilesInfo() throws Exception { + + ArrayList filesInfo = new ArrayList(); + try { + for (int i = 0; i < resources.length; i++) { + FilesPathInfo path = new FilesPathInfo(); + path.setFileName(resources[i].getFilename()); + filesInfo.add(path); + } + } catch (Exception e) { + throw new Exception("error", e); + } + return filesInfo; + } +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java new file mode 100644 index 0000000..73c2cdf --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java @@ -0,0 +1,22 @@ +package com.syncfusion.tomcat.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.*; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); + } + + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.setApplicationDestinationPrefixes("/app"); + registry.enableSimpleBroker("/topic"); + } + +} \ No newline at end of file diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java new file mode 100644 index 0000000..ce1535d --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java @@ -0,0 +1,202 @@ +package com.syncfusion.tomcat.controller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.event.EventListener; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.handler.annotation.DestinationVariable; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Controller; +import org.springframework.web.socket.messaging.SessionDisconnectEvent; + +import com.syncfusion.tomcat.CollaborativeEditingHelper; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisPubSub; +import redis.clients.jedis.exceptions.JedisConnectionException; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.syncfusion.ej2.wordprocessor.ActionInfo; + +@Controller +public class DocumentEditorHub { + + // Redis Configuration + @Value("${spring.datasource.redishost}") + private String REDIS_HOST; + @Value("${spring.datasource.redisport}") + private int REDIS_PORT; + @Value("${spring.datasource.redispassword") + private String REDIS_PASSWORD; + + public static SimpMessagingTemplate messagingTemplate; + private static final int MAX_RETRIES = 5; + private static final long RETRY_INTERVAL_MS = 1000; + static ObjectMapper mapper = new ObjectMapper(); + + @Autowired + public DocumentEditorHub(SimpMessagingTemplate messagingTemplate) { + DocumentEditorHub.messagingTemplate = messagingTemplate; + } + + @MessageMapping("/join/{documentName}") + public void joinGroup(ActionInfo info, SimpMessageHeaderAccessor headerAccessor, + @DestinationVariable String documentName) throws JsonProcessingException { + // To get the connection Id + String connectionId = headerAccessor.getSessionId(); + info.setConnectionId(connectionId); + String docName = info.getRoomName(); + HashMap additionalHeaders = new HashMap<>(); + additionalHeaders.put("action", "connectionId"); + MessageHeaders headers = new MessageHeaders(additionalHeaders); + // send the connection Id to the client + broadcastToRoom(docName, info, headers); + JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxTotal(50); + JedisPool jedisPool = new JedisPool(poolConfig, REDIS_HOST, REDIS_PORT); + try (Jedis jedis = RedisSubscriber.getJedis()) { + // to maintain the session id with its corresponding ActionInfo details. + jedis.hset("documentMap", connectionId, documentName); + // add the user details to the Redis cache + String openedDocName = docName + CollaborativeEditingHelper.userInfoSuffix; + jedis.rpush(openedDocName, mapper.writeValueAsString(info)); + // Subscribe to the room, so that all users can get the JOIN/LEAVE notification + joinLeaveUsersubscribe(openedDocName); + // publish the user list to the redis + jedis.publish(openedDocName, "JOIN|" + connectionId); + + } catch (JedisConnectionException e) { + System.out.println(e); + } + } + + @EventListener + public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) throws Exception { + String sessionId = event.getSessionId(); + try (Jedis jedis = RedisSubscriber.getJedis()) { + // to get the user details of the provided sessionId + String docName = jedis.hget("documentMap", sessionId); + // Publish a message indicating the user's departure from the group + jedis.publish(docName, "LEAVE|" + sessionId); + } catch (JedisConnectionException e) { + System.out.println(e); + } + } + + private void joinLeaveUsersubscribe(String openedDocName) { + new Thread(() -> { + try (Jedis jedis = RedisSubscriber.getJedis()) { + jedis.subscribe(new JedisPubSub() { + @Override + public void onMessage(String channel, String message) { + String[] parts = message.split("\\|"); + if (parts.length == 2) { + String eventType = parts[0]; + String sessionId = parts[1]; + notifyUsers(channel, eventType, sessionId); + } + } + }, openedDocName); + } catch (JedisConnectionException e) { + System.out.println(e); + } + }).start(); + } + + public void notifyUsers(String docName, String eventType, String sessionId) { + try (Jedis jedis = RedisSubscriber.getJedis()) { + if ("JOIN".equals(eventType)) { + HashMap addUser = new HashMap<>(); + addUser.put("action", "addUser"); + MessageHeaders addUserheaders = new MessageHeaders(addUser); + // get the list of users from Redis + String type = jedis.type(docName); + List userJsonStrings = jedis.lrange(docName, 0, -1); + System.out.println("userJsonStrings to join" + userJsonStrings); + ArrayList actionsList = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + for (String userJson : userJsonStrings) { + try { + ActionInfo actionInfo = mapper.readValue(userJson, ActionInfo.class); + actionsList.add(actionInfo); + } catch (Exception e) { + System.err.println("Error parsing user information JSON: " + e.getMessage()); + } + } + // Broadcast the user list to all the users connected in that room + broadcastToRoom(docName, actionsList, addUserheaders); + } else if ("LEAVE".equals(eventType)) { + // get the user list from the redis + List userJsonStrings = jedis.lrange(docName, 0, -1); + System.out.println("userJsonStrings to leave" + userJsonStrings); + if (!userJsonStrings.isEmpty()) { + ObjectMapper mapper = new ObjectMapper(); + for (String userJson : userJsonStrings) { + ActionInfo action = null; + try { + action = mapper.readValue(userJson, ActionInfo.class); + } catch (JsonMappingException e) { + e.printStackTrace(); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + if (action.getConnectionId().equals(sessionId)) { + // Remove the user from the user list + jedis.srem(docName, userJson); + HashMap removeUser = new HashMap<>(); + removeUser.put("action", "removeUser"); + MessageHeaders removeUserheaders = new MessageHeaders(removeUser); + // Broadcast the removal notification to all users in the document + broadcastToRoom(docName, action, removeUserheaders); + // Remove the session ID from the session-document mapping + jedis.hdel("documentMap", sessionId); + break; + } + } + } else { + System.out.println("No users found in the document."); + } + if (userJsonStrings.isEmpty()) { + jedis.del(docName); + } + } + + } catch (JedisConnectionException e) { + System.out.println(e); + } + + } + + public static void broadcastToRoom(String roomName, Object payload, MessageHeaders headers) { + messagingTemplate.convertAndSend("/topic/public/" + roomName, MessageBuilder.createMessage(payload, headers)); + } + + public static void publishToRedis(String roomName, Object payload) throws JsonProcessingException { + int retries = 0; + while (retries < MAX_RETRIES) { + try (Jedis jedis = RedisSubscriber.getJedis()) { + + jedis.publish("collaborativedtiting", mapper.writeValueAsString(payload)); + System.out.println("Message published to Redis" + mapper.writeValueAsString(payload)); + break; + } catch (JedisConnectionException e) { + retries++; + System.out.println("Connection failed. Retrying in " + RETRY_INTERVAL_MS + " milliseconds..."); + try { + Thread.sleep(RETRY_INTERVAL_MS); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + } + } +} \ No newline at end of file diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java new file mode 100644 index 0000000..2020744 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java @@ -0,0 +1,93 @@ +package com.syncfusion.tomcat.controller; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.messaging.MessageHeaders; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.syncfusion.ej2.wordprocessor.ActionInfo; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisPubSub; +import redis.clients.jedis.exceptions.JedisConnectionException; + +@Component +public class RedisSubscriber { + public static JedisPool jedisPool; + + + // Redis Configuration + @Value("${spring.datasource.redishost}") + private String REDIS_HOST; + @Value("${spring.datasource.redisport}") + private int REDIS_PORT; + @Value("${spring.datasource.redispassword}") + private String REDIS_PASSWORD; + @Value("${spring.datasource.redisssl}") + private boolean REDISSSL; + + @Autowired + @PostConstruct + @Bean + public void subscribeToInstanceChannel() { + String channel = "collaborativedtiting"; + new Thread(() -> { + JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxTotal(100); + poolConfig.setMaxIdle(20); + poolConfig.setMinIdle(10); + poolConfig.setTestWhileIdle(true); + jedisPool = new JedisPool(poolConfig, REDIS_HOST, REDIS_PORT,50000,REDIS_PASSWORD,REDISSSL); + try (Jedis jedis = RedisSubscriber.getJedis()) { + jedis.subscribe(new JedisPubSub() { + @Override + public void onMessage(String channel, String message) { + System.out.println("Received message from channel " + channel + ": " + message); + ObjectMapper objectMapper = new ObjectMapper(); + try { + ActionInfo action = objectMapper.readValue(message, ActionInfo.class); + HashMap updateAction = new HashMap<>(); + updateAction.put("action", "updateAction"); + MessageHeaders updateActionheaders = new MessageHeaders(updateAction); + DocumentEditorHub.broadcastToRoom(action.getRoomName(), action, updateActionheaders); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + } + @Override + public void onSubscribe(String channel, int subscribedChannels) { + System.out.println("Subscribed to channel: " + channel); + } + + }, channel); + + } catch (JedisConnectionException e) { + // Handle the connection exception + System.out.println("Connection failed. Retrying ....."); + e.printStackTrace(); + } + finally { + if (jedisPool != null) { + jedisPool.close(); // Ensure pool is closed when done + } + } + }).start(); + } + + public static Jedis getJedis() { + // TODO Auto-generated method stub + return jedisPool.getResource(); + } +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java new file mode 100644 index 0000000..3bfbd8c --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java @@ -0,0 +1,25 @@ +package com.syncfusion.tomcat.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.event.EventListener; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.messaging.SessionConnectedEvent; + + +@Component +public class WebSocketEventListener { + + private static final Logger logger = LoggerFactory.getLogger(WebSocketEventListener.class); + + @EventListener + public void handleWebSocketConnectListener(SessionConnectedEvent event) { + logger.info("Received a new web socket connection"); + StompHeaderAccessor headers = StompHeaderAccessor.wrap(event.getMessage()); + String sessionId = headers.getSessionId(); + // messagingTemplate.convertAndSend("/topic/session-id", sessionId); + } + + +} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java new file mode 100644 index 0000000..3bfa6d3 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java @@ -0,0 +1,163 @@ +//package com.syncfusion.tomcat; +// +//import java.io.ByteArrayOutputStream; +//import java.io.FileOutputStream; +//import java.util.ArrayList; +//import java.util.concurrent.BlockingQueue; +//import java.util.concurrent.CompletableFuture; +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; +//import java.util.concurrent.LinkedBlockingQueue; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Lazy; +//import org.springframework.scheduling.annotation.Async; +//import org.springframework.stereotype.Component; +// +//import com.syncfusion.docio.WordDocument; +//import com.syncfusion.ej2.wordprocessor.ActionInfo; +//import com.syncfusion.ej2.wordprocessor.CollaborativeEditingHandler; +//import com.syncfusion.ej2.wordprocessor.WordProcessorHelper; +//import com.syncfusion.tomcat.SaveInfo; +//import com.syncfusion.tomcat.controller.RedisSubscriber; +// +//import redis.clients.jedis.Jedis; +// +//@Component +//class BackgroundQueueImpl implements IBackgroundQueue { +// +// public final BlockingQueue queue; +// private final ExecutorService executorService; +// private static boolean isRunning = false; +//// private int capacity=1; +// +// public BackgroundQueueImpl() { +// // Initialize the queue with a specified capacity +// this.queue = new LinkedBlockingQueue<>(); +// this.executorService = Executors.newFixedThreadPool(4); +// } +// +// @Override +// public CompletableFuture queueBackgroundWorkItemAsync(SaveInfo workItem) { +// if (workItem == null) { +// throw new IllegalArgumentException("workItem cannot be null"); +// } +// +// return CompletableFuture.runAsync(() -> { +// try { +// queue.put(workItem); // Blocking operation if the queue is full +// if (!queue.isEmpty()) { +// start(); // Start processing if queue contains element +// } +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); // Restore interrupted status +// throw new RuntimeException("Failed to enqueue work item", e); +// } +// }, executorService); +// } +// +// @Override +// public CompletableFuture dequeueAsync() { +// +// return CompletableFuture.supplyAsync(() -> { +// try { +// Thread.sleep(5000); +// return queue.take(); // Blocking operation if the queue is empty +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// return null; +// }); +// } +// +// public void start() { +// if (isRunning) { +// throw new IllegalStateException("Service is already running"); +// } +// try { +// executorService.submit(() -> backgroundProcessing()); +// isRunning = true; +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// } +// +// @Async +// public void backgroundProcessing() { +// while (true) { +// try { +// SaveInfo workItem = dequeueAsync().get(); +// applyOperationsToSourceDocument(workItem); +// clearRecordsFromRedisCache(workItem); +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// } +// +// } +// +// private void applyOperationsToSourceDocument(SaveInfo workItem) { +// +// try { +// ArrayList actions = (ArrayList) workItem.getActions(); +// for (ActionInfo action : actions) { +// if (!action.isTransformed()) { +// CollaborativeEditingHandler.transformOperation(action, actions); +// } +// } +// +// ClassLoader classLoader = getClass().getClassLoader(); +// WordProcessorHelper document = WordProcessorHelper +// .load(classLoader.getResourceAsStream("static/files/" + workItem.getRoomName()), true); +// CollaborativeEditingHandler handler = new CollaborativeEditingHandler(document); +// +// if (actions != null && actions.size() > 0) { +// for (ActionInfo info : actions) { +// handler.updateAction(info); +// } +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// WordDocument doc = WordProcessorHelper.save(WordProcessorHelper.serialize(handler.getDocument())); +// doc.save(outputStream, com.syncfusion.docio.FormatType.Docx); +// +// byte[] data = outputStream.toByteArray(); +// +// String currentDir = System.getProperty("user.dir") + "/src/main/resources/static/files"; +// try (FileOutputStream fos = new FileOutputStream(currentDir + workItem.getRoomName())) { +// // Write the byte array to the file +// fos.write(data); +// fos.close(); +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// outputStream.close(); +// } +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// +// private void clearRecordsFromRedisCache(SaveInfo workItem) { +// Boolean partialSave = workItem.getPartialSave(); +// String roomName = workItem.getRoomName(); +// try (Jedis jedis = RedisSubscriber.getJedis()) { +// if (!partialSave) { +// jedis.del(roomName); +// jedis.del(roomName + CollaborativeEditingHelper.revisionInfoSuffix); +// jedis.del(roomName + CollaborativeEditingHelper.versionInfoSuffix); +// } +// jedis.del(roomName + CollaborativeEditingHelper.actionsToRemoveSuffix); +// } +// } +// +// public void stop() { +// if (isRunning) { +// executorService.shutdown(); +// isRunning = false; +// } +// } +// +// public void shutDown() { +// executorService.shutdown(); +// } +//} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java new file mode 100644 index 0000000..50b708c --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java @@ -0,0 +1,88 @@ +//package com.syncfusion.tomcat; +// +//import java.util.concurrent.CompletableFuture; +//import com.syncfusion.tomcat.SaveInfo; +// +//public interface IBackgroundQueue { +// CompletableFuture queueBackgroundWorkItemAsync(SaveInfo workItem); +// +// CompletableFuture dequeueAsync(); +//} +// +////@Component +////abstract class BackgroundQueue implements IBackgroundQueue{ +//// @Override +//// public void queueBackgroundWorkItemAsync(SaveInfo message){ +//// try { +//// BlockingQueue queue = new LinkedBlockingQueue<>(); +//// queue .put(message); // Add workItem to the queue (blocks if queue is full) +//// } catch (InterruptedException e) { +//// System.out.println(e); +//// } +//// } +////} +// +////@Component +////class BackgroundQueueImpl implements IBackgroundQueue { +//// +//// public final BlockingQueue queue; +//// private final ExecutorService executorService; +//// +//// @Autowired +//// QueuedHostedService queuedHostedService; +//// +//// private int capacity=1; +//// +//// public BackgroundQueueImpl() { +//// // Initialize the queue with a specified capacity +//// this.queue = new LinkedBlockingQueue<>(capacity); +//// this.executorService=Executors.newFixedThreadPool(4); +//// } +//// +//// @Override +//// public CompletableFuture queueBackgroundWorkItemAsync(SaveInfo workItem) { +//// if (workItem == null) { +//// throw new IllegalArgumentException("workItem cannot be null"); +//// } +//// +//// return CompletableFuture.runAsync(() -> { +//// try { +//// queue.put(workItem); // Blocking operation if the queue is full +//// if (!queue.isEmpty() ) { +//// if (queuedHostedService != null) { +//// queuedHostedService.start(); // Start processing if queue is full +//// } +//// synchronized (queue) { +//// System.out.println("Queue contents:"); +//// for (SaveInfo item : queue) { +//// System.out.println(item); +//// } +//// } +//// } +//// } catch (InterruptedException e) { +//// Thread.currentThread().interrupt(); // Restore interrupted status +//// throw new RuntimeException("Failed to enqueue work item", e); +//// } +//// },executorService); +//// } +//// +//// @Override +//// public CompletableFuture dequeueAsync() { +//// +//// return CompletableFuture.supplyAsync(() -> { +//// try { +//// Thread.sleep(5000); +//// return queue.take(); // Blocking operation if the queue is empty +//// } catch (InterruptedException e) { +//// e.printStackTrace(); +////// Thread.currentThread().interrupt(); // Restore interrupted status +////// throw new RuntimeException("Failed to dequeue work item", e); +//// } +//// return null; +//// }); +//// } +//// +//// public void shutDown() { +//// executorService.shutdown(); +//// } +////} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java new file mode 100644 index 0000000..2024be3 --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java @@ -0,0 +1,8 @@ +//package com.syncfusion.tomcat; +// +//public interface IQueuedHostedService { +// +// void backgroundProcessing(); +// void start(); +// +//} diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java new file mode 100644 index 0000000..badfbfe --- /dev/null +++ b/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java @@ -0,0 +1,127 @@ +//package com.syncfusion.tomcat; +// +//import java.io.ByteArrayOutputStream; +//import java.io.FileOutputStream; +//import java.util.ArrayList; +//import java.util.List; +//import java.util.concurrent.CompletableFuture; +//import java.util.concurrent.ExecutorService; +//import java.util.concurrent.Executors; +//import java.util.concurrent.atomic.AtomicBoolean; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.scheduling.annotation.Async; +//import org.springframework.stereotype.Service; +// +//import com.syncfusion.docio.WordDocument; +//import com.syncfusion.ej2.wordprocessor.ActionInfo; +//import com.syncfusion.ej2.wordprocessor.CollaborativeEditingHandler; +//import com.syncfusion.ej2.wordprocessor.WordProcessorHelper; +//import com.syncfusion.tomcat.CollaborativeEditingHelper.SaveInfo; +//import com.syncfusion.tomcat.controller.RedisSubscriber; +// +//import redis.clients.jedis.Jedis; +// +//@Service +//public class QueuedHostedService implements IQueuedHostedService { +// +// +// private IBackgroundQueue queue; +// private static boolean isRunning=false; +// private final ExecutorService executorService=Executors.newSingleThreadExecutor(); +// +// @Autowired +// public QueuedHostedService(IBackgroundQueue iqueue) { +// queue=iqueue; +// +// } +// +// public void start() { +// if(isRunning) { +// throw new IllegalStateException("Service is already running"); +// } +// try { +// executorService.submit(()->backgroundProcessing()); +// isRunning=true; +// } +// catch(Exception ex) { +// ex.printStackTrace(); +// } +// } +// +// public void stop() { +// if(isRunning) { +// executorService.shutdown(); +// isRunning=false; +// } +// } +// +// @Async +// public void backgroundProcessing() { +// while(true) { +// try { +// SaveInfo workItem=queue.dequeueAsync().get(); +// applyOperationsToSourceDocument(workItem); +// clearRecordsFromRedisCache(workItem); +// } +// catch (Exception ex){ +// ex.printStackTrace(); +// } +// } +// +// } +// +// private void applyOperationsToSourceDocument(SaveInfo workItem) { +// ClassLoader classLoader = getClass().getClassLoader(); +// try { +// WordProcessorHelper document = WordProcessorHelper +// .load(classLoader.getResourceAsStream("static/files/" + workItem.getRoomName()), true); +// CollaborativeEditingHandler handler= new CollaborativeEditingHandler(document); +// +// ArrayList actions = (ArrayList) workItem.getAction(); +// if(actions != null && actions.size()>0) { +// for(ActionInfo action : actions){ +// if(!action.isTransformed()) { +// CollaborativeEditingHandler.transformOperation(action, actions); +// } +// } +// +// for(int i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git a/Server side with Redis/src/main/resources/static/files/Character Formatting_3.docx b/Server side with Redis/src/main/resources/static/files/Character Formatting_3.docx new file mode 100644 index 0000000000000000000000000000000000000000..ca90fa192b30c7e09915a3bfdcb41ec129849cea GIT binary patch literal 7044 zcmZ{p1yoeuzQ>25yFt3UyL%WKh8Bi~p-Vah>5`Bbkd#o6P)ZP_ksP`N1OcT*lum(% z{_lNWx$n(6YtEXp&Ueq+dw+g;AR5RhSO5S315gAfHWAj(bS^^$08#}20K(h5{vKX- ze0CnTzHTsgAKm~r*H2KW*Mca?C#;wo(ehZB39*!|n$b?SczXQgwa*1oYGGUg;2t1@ z`^FD@SN2`C_9nM8=&b^IcgN+MmSqI0-KTxX~$+mjk`i4Rvd&h<< z8@rFD-btkDOusWbDGIWJthx!g$3Z<0wnZwgn1JQUmnS@QCK_*M(TtoHZmAFQ~uWc5nDx0WgC zO7`~kl?dgb6RKGEKljs}mCa2K*9MqUS%MSQi^dCUY7cseOEh_rQP4Eq^1U5jvZ6${ zlHbdG8+2-rLCKn7Az1oK+d_nZ3T{8jwiLS>&%O;zM)~4xw;0l?2;2b17qF;iCMMb= zA_A%t0CvE1%{P+g70Q$A~k3 zQ?pvuoEV(CYOo3Y4e6upa6$9&iI-Eg+%gc$XHI1$Qdh`Nmln4K*9|r4wj(lohPB5f z$x_|rjfE~4g`CW`t4i`e`KyaJ7FB~E9V*%sO6ZNs;Yr>3!E86$+9?SQ*MWRr>)DM*-ugnfVI{VSRgHDR%vP`bS&z(KLxVGoO zE8S(E3^jSFmpCa4MZ5+{^RzK8X)APls6319oF!Ng;{WWbV7Mj|DW^z;(K$_v_1yX7 z^AM4^D^@6!iWR4zk809g6b7uG^%z>Dv%p1vzq`V_V49ncwOHG?r%An^an;QESq4nqLe>8< znRb4{=ws_{{>k3E^SzqgeD`escccMjiCfv?+sluxFMf=5%zo0Fevv%DIh@9JZv5)| z$?N4hgcn{VaQk!-C$G!k64IU2|I$G$wgfFG8+`h;>S&e)QK=U_=@l=Z6xuTNk?bY+ zVg%5=3@{AK6lC(?AAdy);zmwP|AkMs^crnOJ0 z4dQojNTj2*H!f7BYpmcuiqrFdcY`*0rmsDwBe!dTIaY^U@01VrGh0R;keRQQZ`4Fj zpq(k>W)I4IwnFj(C30KbrY#QS(P+ySFyW&8sS$n}5HazP1=~PLYWsbOKUKn)D78UV z-ILUo$*&AsAon)yyl;Z6#tBo9zFwQw6o&IOe!uv{o>*en%~v6Pq&cbyagqi_FKYWi z`#y`Ih1$+aN`j2%8q~5-`s?h}Bg5pTb0H$4gD*1pr1Vc?xJi_=_MKyYwxz-MM-(3j z1xL?wU$=ev{s{7ySC1I;A?!s40Av^d0Q`S@b#I?QSD5!NpT29d>s8E85<(ht10^Bo zE#LLo6(xTIWgv@C$j<)!QO2&-uq_UiU{_&C>a>@ zWnl~iUIUq6jJY7YZ3QKj{NFOzr%weyrzGx*Aduj)75fuHj?Y}w z`@$bjG900Z);Qfb@hpm%E?x@^{=x2}UByBIC9uSCFI*G6%Z|xXb{afrc<&oB&M3B( zJ(8k$=zStYC!;*E`FBuy*U`Pulx30f3R$B;LvoNSe^%g_~6NxR*V zX|qK_VD(}gvg?`yOnOeNVV zCGIuBNexiVucvi4qeN34Z=DTuG)>2+*OR|+A4O~2A?b04$D32+dclmmU=~j+Ls^Vz zN)bK?yY)AUa6>h?uXV++w*JgB6QzFVXkbek@UolazIh4Y$3ltevG5B!h}z&vcgEZe z0_j5ruq+L@*-e7eKH7z1oQBLE{Fw>MV60r`1&Y&tJN83^pRRA&nrl9Gn`k)5L6q)m;-}^iyJ{c%nsiU1Q+#IJrKeb;Ks*Kw8FN#humGsf!G0vEVXX=k579^n7eL ze?19W&cK`L*!34a{1rX6(~Wpwhp$#=hQ6LX4e*Bv=E@zUT8Upp1ip4^6>-QPUwCrW zK3Mn=8(b<2zWG5+$3pzpg4NyMohC~ko3kIiR>;>&xcmS%*IbQ1RDd=kN5wJb11@JD zG{_zsI&z#ux6iTI&+Yiz;;%o+?$6!kadGqj0O`Li-p3K<2IKqvE%1-skGNBb5ro2f zmvU#8)iViMYOcR9``PrUCs3=jO!G2*_fqiM{c6NqW`RYb`k0oo@GWgZF%o5=0$<2I zWXz983<&e9R3foPA_^@ejj%T6&D?WwA?oDWS&vXc!W|TWWT(Ztp;`6DXq%J^aXeE$ zPVlqcIWZ5jSaZT+3=;v+OV~19QcY}?f+!5Cr!eea1dCNuQVYU83(ioc zUweX@Jho!MnH;Cj0spFvBHl=j2nJopp^mXicPF=rJZ`R%<8|mbi}J^)*A9E*T0T`) zhI|xV!vi!Mh|V-e$ThAnHht%YfJnkft>kWo!-b;cUa!fM;gAoQj=Y*V%_QU0$KHu( z16MCq@`-E^tps|#g++bXu?n>6G@aL3tqeO+*Ao@hj)^skESr$MXz$e9ooMeF7T4+y1;s`#=F<Q%Sy(YC!`WCQ<@cUg?*Pz?G&@ji5bHkWdSA0D z4jfKit?NuZ?dAodhB8F;iz(Yt)i(8eGMb*yVAhc0dRTPG248&rw*A9ltRP?J%2zvt zrV0N+A#nNXXhe>${mu3DZomIn2M@rLbnhgqdg*$9GZ+^mY2Kf2xjpE7L?z3A#PXR$vW6#{alS!PyJ&?wwRxoSlJn4QY7$_+Yprwkausy-w3#*K^z!V zqwB;5qMTu3EWt-gNUf<8kpvG!1t->SEGvBzKy0htPpO?jbM+er;73z5q%ctwVv^~kSEXIDn6(I2yiNc4mWsIQ9I!8M68(cG;meiAll=wcKCix@=N~1!i(&| zK0$f{a+PaBu+4ko8weS@cby#A`p$9iqarVZRF{C9O`X!6U^B9NgHKx*|*E4+YyUNQat{v+Cx``+8Uxl z9-#pb;y=y6jtrwwof~pFNz8VOBs0#>ZYC6c8In>Uep=?f5M!EYL-gYU{m>aP^J6XJ zkf}%WVmwe5m5>m4Wjts?YMPLB?Y<_4^qJUom{9J4c8F%# z4(|H#TDPJsRuiIY(T~S7hJOfN!A0>?37rY5aipc^inDMf%{njy`zy#|L}9 z;bykOg)yM0K7Y#L2V09Ry^tTIQ)IafyS-+sMH>a9N?Hhr1+U8?G&!i=gy1M4Tg`UU ztN42rIS$bd(~dzwcLi4$Ei+Fr^Nn+QiY_DRK~*Rc=9kRf`0Nh3my67ak9qezIkWgi z9uioGKUMZ*7P5Sd7N2#5fP=TwH)gp*(yqOYN|L}#Yw;1;>yXzYZ|-Hu8A(!&8yv{u zUFo~1>YV_dzg+}N92TcE-*1}k*Hk-t!DZ|`_s!1v#=*4UKD`=7{SKJxQ2+dAV3*3g zsX|*Hd!On)mts4h6o{pFC%f0Dv`=|0wCbVLm=i z?he1xzkGv*3Ot#yS$UCF3o^Kh=&%+Qz>Ds>60@T$CCvh6|q2rZi_UutP7SzPuVsnyY0+ z$to)+PZD0N?o!hj#Tws}hgRvo-*5BfLh9Qu#8a;vFI(Wg8~{@mQac`|+Q2g8_aM<2 zgGCh?PgWfiSJGOM*SO+7s8VTD=x5{zhaD$*h1v++41q`O8Mm*EKn_PF{)=|l2pM1| zdC&X&P9aCFLR~1O0<&v+zR_U@-F1>xu+qwL8XoRzy02l>m*onGx}Lb7!EQ+B3PUs{ zUPO96WN)J+5f3mFgLG!cwkU#IGuHz+t1%Q30@?=!$md!dw+%S!F_=rC&sdO{FrFoZ59_i z1%!qdi7AImhjR|qLNrL&=e3tY6CcLSqAE{XwM@i+DSP((c}wi8@^qu3Su101Xeqa@ zkz&!VeQyqgx4l00vW1rqDI&V?VVy|Bap2}!f+0gwo;M#CEXtCShfq4hnxo5;U4w`8 z2LL-1Ztp}bfl}VecA;Yp{X8F*zA)v8nvk4#+DXOB6|Uf>5;K0X>x$rEtB$vN{kR@; z`HY<1AjCY8{7cg<-PM8Wd}I%_YTCjlRfKWecEJbRH^OUbaSqVT5Fe##f&&fB7s5~7UP zslSE~6ZWnCY5RqvQx219c6=s}{~5MVX2rLiz_7|wz}sf-nGOO<|HADdN1fQySrcC} z7xsB+;YZm|eOaj6*q9E>l2A#iML3GnSTcM?Z_v|u@ugJ2)p_!S016(b3t2Lg#Vwn| zh}uhCtL{}t8o%SEX42yXnI9f_@hPl7qL@*yKnulmD;h^@#Mlm%Yr+MxuHB(7t}5j! zFpV081y!RX z2XnXki-A>of?Ec@1QCC0TrfA$;@UN;2+}u15JM7e4c-?bEetOBN8qdBS9pzo$Hj>~ zKXX89YKG=YI*|t9`gPR>B8XrtBp+XsRbj4w6KiQ{+xCKCV=J87xjF9~jt-($Dtbz6 zS{NZPs0y|0>NJxI!~igUACOHpH2ZkX&9ayig)&^ zghBJOzM@Cy|w4CoFxlroIpwDV|$7w6nGM?RCJ@=hzQ>x(?D_ zV+9?EOfX33I%ng68LGPp+!y>}x2M7y2DKBEB+K#U)+x5>q#WH?Xd=z1&kt66W9#p1*nPkS1(WsL0tc4^rQF^sv#U zS`^)3o>ot^E9;>Nw>WZjglH)AfU@!&dAZ7%t{)?tChxd;O{(XN9b_csDM-!`QKm+k zmabau#8qry>4p8py|#&*GXN#U+g0!^=oklH#Z#As9P-_ncy4%JpUw51IQF-8?)U7;Ku~ZRLr@;$>V#sujAB->f*gICEmnm7 zfp{d=>-eW(MLM(&@{$qbGFisnZv?WcTV%{Ak9>B1Q1xZ2ZXj##tDFq3;uvCx6ZR0u zK;llo7B{z16$wZJ`2Sy*+^+b4eE#d@$zA!~zT6+}hui)8E&tP{yDPq1;{Op3VE#*d zx8T1!#NE{J&k$3$ZNh*4|34DNyYjnP#UJ_XZG8DH|0~D1tG^qN{^%EP+5N5m&+v3t ze%G1(kuTr2JbugnAJ=wwq`MB_&q&8)f4PIZ!n@}7N7zaJe;OY|0~PJpLzuUR0uTV; Jq4@Rde*k0JcX8%!oN| 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%0D9yB0L=d`E;c5{ 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

fm%|Vfsj)g@eM%Uz4u~%yY0L4(3giYo%BFb&K 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 X!*RFJ^0_aqgsxcV{NPGJI|}>@G4pUp literal 0 HcmV?d00001 diff --git a/Server side with Redis/src/main/resources/static/files/Headers and Footers_3.docx b/Server side with Redis/src/main/resources/static/files/Headers and Footers_3.docx new file mode 100644 index 0000000000000000000000000000000000000000..a3c48ef180fe70c0956dc87c9350bb916ada0593 GIT binary patch literal 12622 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 Cp0!^9 literal 0 HcmV?d00001 diff --git a/Server side with Redis/src/main/resources/static/files/Paragraph Formatting_3.docx b/Server side with Redis/src/main/resources/static/files/Paragraph Formatting_3.docx new file mode 100644 index 0000000000000000000000000000000000000000..336d037f4d4e9f589780fc41333f4107741eecd4 GIT binary patch literal 12383 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 literal 0 HcmV?d00001 diff --git a/Server side with Redis/src/main/resources/static/files/Styles_3.docx b/Server side with Redis/src/main/resources/static/files/Styles_3.docx new file mode 100644 index 0000000000000000000000000000000000000000..0c3322d029f99b750ae581806168de1f986e0935 GIT binary patch literal 3761 zcmZ`+cT`hLzYT;ggx(RPDpe$c^hhy+^xmb1651s+A@nAQi1bjDUL+7eIs{ZYND-u0 zX_po$3JOv_yx+UeEAQQN{y6K*nmx1j%zDgAOipZB!F&1S`!*O%gH-H0HB!` z0HD5T^>z2OyJ_cc>+Ndq<|X3i>auFQpfw{(b!LQaQJU73(AS}gd+Wz!lUz@#;kLx{ z(DkK*jPNREq4UT!k;cmqA$I`$7sJNB(ehsy{4o>!(Qcq#|I+D z1`RDZ0jXazyoKn97fX~Zt}Hm_pcHNKp}NsZNl}RzCKbL^7JA*q<{tIR+w;*ZL4Y?A6xY!x zny|(2)IHj#6h@J1!)k57g>f5jyAMm$d3s$Nn%}P zg7z(wI4-IXhlAN*e41lYs+&*B4lO6TEH!QQOb06&Z71)dQi`8E*Fw(IH#)Zqfe{RBNB3Mlt+rtJsmBY&dy7A#(z9i`YKv&AUR{cq*ExBhstcbxLY5n4pVKz4w=4ndR(*5vQklwvEt*PerUSLZ2+femyTQ znIqU-`smW|OsNQRE${@W zc#*BgN65I^W zqFp=Mo2DpcAWQKsXvaHcrVOi8*x`lxdX zCg53mQ#M)#1>;M?1+|0-*_p8>FsXL*$_GZqxwsJ2QrIoKE_2j6C?cCa~ zEyS(+ZbEWZdU`F{k+m-`S?9528Z+OX#6x`1sYvGUDR)Vu;yjz^?uemm?g=Dk$$N|y z^UM>I3|?8p;q!R-w{azh-iw3PnaA*kPf49nM_LZk*i|haB?Q`bRx*{=%RC^cm(Y8| z*#!;&*|biaGpNIf1!k}-XL8OvJ}D75+ZL|rdH`Ez!>$Zr?BK1sjXf3Y zDMOX($LkRz_rG$*gL`n4Vt$0g88Ih$ltWdA>Rx>OA&E&NEq4>ERR*4Snv?NFijj=n zcqvFr!RNp0kg8W0@qy^R7dTDb%F8zyAS?x%Ls-h(Y#xouV6i25t=+K=b`VM zi#J=uS0F`E*vJ&H5>aZh|{%x4`a>l;cW+ zc(zHC%^Ny^U#y~Yv?(|2&(i{p`kd-6a=2jJF=pdlj!ne!js73- zH98d(tbT-vr=NDCdbdWQ=w}fvYhd}u*`-P0s@NCzEcTyK`zDhq6-6Gks8jM`t&5In&%a*% z-LgQSC4p)@06_b~w*EI5And)ooZKA#GOcX=Ik!wvx*+5u&OeO1qvGTOp8!NIrp$YZ)VhVR9Q4QC~b%|LrK49)UyK-e(4&RWmYrxR$35V@P4f!(nr24*}{H#nPg_QuN4M)>}yG{c?rG(mq2!aqCwM*)f$T@b(JKarm;<2HICKbCe`u~j#i$RJs9vz7f}W947LSv|a!H`wMkf@H z`#A)`KK2;e_5M*!?}mkFVj?;4o9^6dNXz>#+>~%47Ze&t5K$)>GRN?&t( zD;MAYlKhL<(;*qqJ5h3?#WLmjQZu3m?NJdS^y4eaF-g$dl)U`UW|Bffxrm@Y>LLB7 z-#x(1I(-s;Ad69a?wjG&^B%^r^V`;J$KZjy$;B^rwlMEb2aq2BUP$_?vgQh(^1k>7 zPAMH{6giX=^Nz}G#wU7XG^DmyGge8u6g0WYyul&k=*oLF+??%bf4O5qIpv<1zT~Wu zZpl2ZsQQh^`X2|&yZFCTS&Ku>%U;lEBLo005<9?5$=%KCBB@*IKk~3gSo{nVwaIFl z?V?ms7@J3C;%+9_A~JmNTtW#MMGp&VchwFHYU&*lZ=2*O3e-+1KUfP!*4bbrh#jWb zbtT@WAx(rNftWCfAhUgzvLoOE+K8i@1a&p*pm9Z}NH^BXJ^{U_fvY;U78+<*w#Q*3mPW_PRs0r zoNx3@Iqwg4$a3R3EV6kFvK(*hJA*Ai{X!u0kf!^tXQ z(nE5!*d6XlhYic686j$JrD2-o%vrvAZSAmjp;Xp@ntS&TdzZ-#NF=E{sN}RCA3`6V z1GLrf@aX{mUL9Sm_&=WiQ!8DDUygmhu&|4g>o54P5O^7U*?@n6nMwWz|HF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+
+
+ + + + \ No newline at end of file diff --git a/Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js b/Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js new file mode 100644 index 0000000..e5a30a4 --- /dev/null +++ b/Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js @@ -0,0 +1,2 @@ +this.ej=this.ej||{},this.ej.documenteditor=function(e,t,i,n,r,o,s,a,l,d,h,c,p,g){"use strict";!function(e){e[e.LeftToRight=0]="LeftToRight",e[e.RightToLeft=1]="RightToLeft",e[e.WordSplit=2]="WordSplit",e[e.Number=4]="Number",e[e.Tab=6]="Tab"}(e.CharacterRangeType||(e.CharacterRangeType={}));var u=function(){function e(){this.keysInternal=[],this.valuesInternal=[]}return Object.defineProperty(e.prototype,"length",{get:function(){return this.keysInternal.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"keys",{get:function(){return this.keysInternal},enumerable:!0,configurable:!0}),e.prototype.add=function(e,i){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key or value is not valid.");return this.keysInternal.indexOf(e)<0&&(this.keysInternal.push(e),this.valuesInternal.push(i)),1},e.prototype.get=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);return i<0||i>this.keysInternal.length-1?void 0:this.valuesInternal[i]},e.prototype.set=function(e,i){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var n=this.keysInternal.indexOf(e);if(n<0||n>this.keysInternal.length-1)throw new RangeError("No item with the specified key has been added.");this.valuesInternal[n]=i},e.prototype.remove=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);if(i<0||i>this.keysInternal.length-1)throw new RangeError("No item with the specified key has been added.");return this.keysInternal.splice(i,1),this.valuesInternal.splice(i,1),!0},e.prototype.containsKey=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);return!(i<0||i>this.keysInternal.length-1)},e.prototype.clear=function(){this.keysInternal=[],this.valuesInternal=[]},e.prototype.destroy=function(){this.clear(),this.keysInternal=void 0,this.valuesInternal=void 0},e}(),m=function(){function e(e){this.referenceCount=0,this.uniqueFormatType=e,this.propertiesHash=new u}return e.prototype.isEqual=function(e,t,i){var n=!1;switch(this.uniqueFormatType){case 1:n=this.isBorderEqual(e,t,i);break;case 2:n=this.isCharacterFormatEqual(e,t,i);break;case 3:n=this.isParagraphFormatEqual(e,t,i);break;case 4:n=this.isCellFormatEqual(e,t,i);break;case 5:n=this.isShadingEqual(e,t,i);break;case 6:n=this.isRowFormatEqual(e,t,i);break;case 7:n=this.isListFormatEqual(e,t,i);break;case 8:n=this.isTableFormatEqual(e,t,i);break;case 9:n=this.isListLevelEqual(e,t,i);break;case 10:n=this.isSectionFormatEqual(e,t,i)}return n},e.prototype.isNotEqual=function(i,n,r,o,s){var a=void 0,l=e.getPropertyType(s,i);this.propertiesHash.containsKey(l)&&(a=this.propertiesHash.get(l));var d=void 0;return i===r?d=o:n.containsKey(l)&&(d=n.get(l)),!(a===d||!t.isNullOrUndefined(a)&&!t.isNullOrUndefined(d)&&a===d)},e.getPropertyType=function(e,t){var i=0;switch(e){case 1:i=this.getBorderPropertyType(t);break;case 2:i=this.getCharacterFormatPropertyType(t);break;case 3:i=this.getParaFormatPropertyType(t);break;case 4:i=this.getCellFormatPropertyType(t);break;case 5:i=this.getShadingPropertyType(t);break;case 6:i=this.getRowFormatType(t);break;case 7:i=this.getListFormatType(t);break;case 8:i=this.getTableFormatType(t);break;case 9:i=this.getListLevelType(t);break;case 10:i=this.getSectionFormatType(t)}return i},e.getRowFormatType=function(e){return"allowBreakAcrossPages"===e?1:"isHeader"===e?2:"height"===e?3:"heightType"===e?4:"gridBefore"===e?5:"gridBeforeWidth"===e?6:"gridBeforeWidthType"===e?7:"gridAfter"===e?8:"gridAfterWidth"===e?9:"gridAfterWidthType"===e?10:"leftMargin"===e?11:"topMargin"===e?12:"bottomMargin"===e?13:"rightMargin"===e?14:"leftIndent"===e?15:0},e.getListFormatType=function(e){return"listId"===e?1:"listLevelNumber"===e?2:0},e.getTableFormatType=function(e){return"leftMargin"===e?1:"rightMargin"===e?2:"topMargin"===e?3:"bottomMargin"===e?4:"cellSpacing"===e?5:"leftIndent"===e?6:"tableAlignment"===e?7:"preferredWidth"===e?8:"preferredWidthType"===e?9:"bidi"===e?10:"allowAutoFit"===e?11:"horizontalPositionAbs"===e?12:"horizontalPosition"===e?13:0},e.getListLevelType=function(e){return"listLevelPattern"===e?1:"startAt"===e?2:"followCharacter"===e?3:"numberFormat"===e?4:"restartLevel"===e?5:0},e.getShadingPropertyType=function(e){return"backgroundColor"===e?1:"foregroundColor"===e?2:"textureStyle"===e?3:0},e.getCellFormatPropertyType=function(e){return"leftMargin"===e?1:"rightMargin"===e?2:"topMargin"===e?3:"bottomMargin"===e?4:"columnSpan"===e?5:"rowSpan"===e?6:"verticalAlignment"===e?7:"preferredWidthType"===e?8:"preferredWidth"===e?9:"cellWidth"===e?10:0},e.getBorderPropertyType=function(e){return"color"===e?1:"lineStyle"===e?2:"lineWidth"===e?3:"shadow"===e?4:"space"===e?5:"hasNoneStyle"===e?6:0},e.getCharacterFormatPropertyType=function(e){return"fontColor"===e?1:"fontFamily"===e?2:"fontSize"===e?3:"bold"===e?4:"italic"===e?5:"underline"===e?6:"strikethrough"===e?7:"baselineAlignment"===e?8:"highlightColor"===e?9:"bidi"===e?10:"bdo"===e?11:"boldBidi"===e?12:"italicBidi"===e?13:"fontFamilyBidi"===e?14:"fontSizeBidi"===e?15:"allCaps"===e?16:"localeIdBidi"===e?17:0},e.getParaFormatPropertyType=function(e){return"leftIndent"===e?1:"rightIndent"===e?2:"firstLineIndent"===e?3:"textAlignment"===e?4:"beforeSpacing"===e?5:"afterSpacing"===e?6:"lineSpacing"===e?7:"lineSpacingType"===e?8:"outlineLevel"===e?9:"bidi"===e?10:"contextualSpacing"===e?11:"keepWithNext"===e?12:"keepLinesTogether"===e?13:"widowControl"===e?14:"spaceBeforeAuto"===e?15:"spaceAfterAuto"===e?16:0},e.getSectionFormatType=function(e){return"headerDistance"===e?1:"footerDistance"===e?2:"differentFirstPage"===e?3:"differentOddAndEvenPages"===e?4:"pageWidth"===e?5:"pageHeight"===e?6:"leftMargin"===e?7:"topMargin"===e?8:"rightMargin"===e?9:"bottomMargin"===e?10:"bidi"===e?11:"restartPageNumbering"===e?12:"pageStartingNumber"===e?13:"endnoteNumberFormat"===e?14:"endnotePosition"===e?15:"footNoteNumberFormat"===e?16:"footnotePosition"===e?17:"restartIndexForEndnotes"===e?18:"restartIndexForFootnotes"===e?19:"initialFootNoteNumber"===e?20:"initialEndNoteNumber"===e?21:"pageNumberStyle"===e?22:0},e.prototype.isBorderEqual=function(e,t,i){return!this.isNotEqual("color",e,t,i,1)&&(!this.isNotEqual("lineStyle",e,t,i,1)&&(!this.isNotEqual("lineWidth",e,t,i,1)&&(!this.isNotEqual("shadow",e,t,i,1)&&(!this.isNotEqual("space",e,t,i,1)&&!this.isNotEqual("hasNoneStyle",e,t,i,1)))))},e.prototype.isCharacterFormatEqual=function(e,t,i){return!this.isNotEqual("fontColor",e,t,i,2)&&(!this.isNotEqual("fontFamily",e,t,i,2)&&(!this.isNotEqual("fontSize",e,t,i,2)&&(!this.isNotEqual("bold",e,t,i,2)&&(!this.isNotEqual("italic",e,t,i,2)&&(!this.isNotEqual("underline",e,t,i,2)&&(!this.isNotEqual("strikethrough",e,t,i,2)&&(!this.isNotEqual("baselineAlignment",e,t,i,2)&&(!this.isNotEqual("highlightColor",e,t,i,2)&&(!this.isNotEqual("bidi",e,t,i,2)&&(!this.isNotEqual("bdo",e,t,i,2)&&(!this.isNotEqual("fontColor",e,t,i,2)&&(!this.isNotEqual("fontFamilyBidi",e,t,i,2)&&(!this.isNotEqual("fontSizeBidi",e,t,i,2)&&(!this.isNotEqual("boldBidi",e,t,i,2)&&(!this.isNotEqual("italicBidi",e,t,i,2)&&(!this.isNotEqual("allCaps",e,t,i,2)&&!this.isNotEqual("localeIdBidi",e,t,i,2)))))))))))))))))},e.prototype.isParagraphFormatEqual=function(e,t,i){return!this.isNotEqual("leftIndent",e,t,i,3)&&(!this.isNotEqual("rightIndent",e,t,i,3)&&(!this.isNotEqual("firstLineIndent",e,t,i,3)&&(!this.isNotEqual("textAlignment",e,t,i,3)&&(!this.isNotEqual("beforeSpacing",e,t,i,3)&&(!this.isNotEqual("afterSpacing",e,t,i,3)&&(!this.isNotEqual("spaceBeforeAuto",e,t,i,3)&&(!this.isNotEqual("spaceAfterAuto",e,t,i,3)&&(!this.isNotEqual("lineSpacing",e,t,i,3)&&(!this.isNotEqual("lineSpacingType",e,t,i,3)&&(!this.isNotEqual("outlineLevel",e,t,i,3)&&(!this.isNotEqual("bidi",e,t,i,3)&&(!this.isNotEqual("contextualSpacing",e,t,i,3)&&(!this.isNotEqual("keepWithNext",e,t,i,3)&&(!this.isNotEqual("keepLinesTogether",e,t,i,3)&&!this.isNotEqual("widowControl",e,t,i,3)))))))))))))))},e.prototype.isCellFormatEqual=function(e,t,i){return!this.isNotEqual("leftMargin",e,t,i,4)&&(!this.isNotEqual("rightMargin",e,t,i,4)&&(!this.isNotEqual("topMargin",e,t,i,4)&&(!this.isNotEqual("bottomMargin",e,t,i,4)&&(!this.isNotEqual("columnSpan",e,t,i,4)&&(!this.isNotEqual("rowSpan",e,t,i,4)&&(!this.isNotEqual("verticalAlignment",e,t,i,4)&&(!this.isNotEqual("preferredWidthType",e,t,i,4)&&(!this.isNotEqual("preferredWidth",e,t,i,4)&&!this.isNotEqual("cellWidth",e,t,i,4)))))))))},e.prototype.isShadingEqual=function(e,t,i){return!this.isNotEqual("backgroundColor",e,t,i,5)&&(!this.isNotEqual("foregroundColor",e,t,i,5)&&!this.isNotEqual("textureStyle",e,t,i,5))},e.prototype.isRowFormatEqual=function(e,t,i){return!this.isNotEqual("allowBreakAcrossPages",e,t,i,6)&&(!this.isNotEqual("isHeader",e,t,i,6)&&(!this.isNotEqual("height",e,t,i,6)&&(!this.isNotEqual("heightType",e,t,i,6)&&(!this.isNotEqual("gridBefore",e,t,i,6)&&(!this.isNotEqual("gridBeforeWidth",e,t,i,6)&&(!this.isNotEqual("gridBeforeWidthType",e,t,i,6)&&(!this.isNotEqual("gridAfter",e,t,i,6)&&(!this.isNotEqual("gridAfterWidth",e,t,i,6)&&(!this.isNotEqual("gridAfterWidthType",e,t,i,6)&&(!this.isNotEqual("leftMargin",e,t,i,6)&&(!this.isNotEqual("topMargin",e,t,i,6)&&(!this.isNotEqual("bottomMargin",e,t,i,6)&&(!this.isNotEqual("rightMargin",e,t,i,6)&&!this.isNotEqual("leftIndent",e,t,i,6))))))))))))))},e.prototype.isListFormatEqual=function(e,t,i){return!this.isNotEqual("listId",e,t,i,7)&&!this.isNotEqual("listLevelNumber",e,t,i,7)},e.prototype.isTableFormatEqual=function(e,t,i){return!this.isNotEqual("leftMargin",e,t,i,8)&&(!this.isNotEqual("rightMargin",e,t,i,8)&&(!this.isNotEqual("topMargin",e,t,i,8)&&(!this.isNotEqual("bottomMargin",e,t,i,8)&&(!this.isNotEqual("cellSpacing",e,t,i,8)&&(!this.isNotEqual("leftIndent",e,t,i,8)&&(!this.isNotEqual("tableAlignment",e,t,i,8)&&(!this.isNotEqual("preferredWidth",e,t,i,8)&&(!this.isNotEqual("preferredWidthType",e,t,i,8)&&(!this.isNotEqual("bidi",e,t,i,8)&&(!this.isNotEqual("allowAutoFit",e,t,i,8)&&(!this.isNotEqual("horizontalPositionAbs",e,t,i,8)&&!this.isNotEqual("horizontalPosition",e,t,i,8))))))))))))},e.prototype.isListLevelEqual=function(e,t,i){return!this.isNotEqual("listLevelPattern",e,t,i,9)&&(!this.isNotEqual("startAt",e,t,i,9)&&(!this.isNotEqual("followCharacter",e,t,i,9)&&(!this.isNotEqual("numberFormat",e,t,i,9)&&!this.isNotEqual("restartLevel",e,t,i,9))))},e.prototype.isSectionFormatEqual=function(e,t,i){return!this.isNotEqual("headerDistance",e,t,i,10)&&(!this.isNotEqual("footerDistance",e,t,i,10)&&(!this.isNotEqual("differentFirstPage",e,t,i,10)&&(!this.isNotEqual("differentOddAndEvenPages",e,t,i,10)&&(!this.isNotEqual("pageWidth",e,t,i,10)&&(!this.isNotEqual("pageHeight",e,t,i,10)&&(!this.isNotEqual("leftMargin",e,t,i,10)&&(!this.isNotEqual("topMargin",e,t,i,10)&&(!this.isNotEqual("rightMargin",e,t,i,10)&&(!this.isNotEqual("bottomMargin",e,t,i,10)&&(!this.isNotEqual("bidi",e,t,i,10)&&(!this.isNotEqual("restartPageNumbering",e,t,i,10)&&(!this.isNotEqual("pageStartingNumber",e,t,i,10)&&(!this.isNotEqual("endnoteNumberFormat",e,t,i,10)&&(!this.isNotEqual("endnotePosition",e,t,i,10)&&(!this.isNotEqual("footNoteNumberFormat",e,t,i,10)&&(!this.isNotEqual("footnotePosition",e,t,i,10)&&(!this.isNotEqual("restartIndexForEndnotes",e,t,i,10)&&(!this.isNotEqual("restartIndexForFootnotes",e,t,i,10)&&(!this.isNotEqual("initialFootNoteNumber",e,t,i,10)&&(!this.isNotEqual("initialEndNoteNumber",e,t,i,10)&&!this.isNotEqual("pageNumberStyle",e,t,i,10)))))))))))))))))))))},e.prototype.cloneItems=function(t,i,n,r){for(var o=e.getPropertyType(r,i),s=t.propertiesHash.keys,a=0;a=0?i.timeout:0,this.customHeaders=i.headers),this.xmlHttpRequest.onreadystatechange=function(){n.stateChange(n)},this.xmlHttpRequest.onerror=function(){n.error(n)},this.mode?this.sendRequest(e,r):setTimeout(function(){n.sendRequest(e,r)})},e.prototype.sendRequest=function(e,t){this.xmlHttpRequest.open("POST",this.url,!0),this.xmlHttpRequest.timeout=t,this.contentType&&this.xmlHttpRequest.setRequestHeader("Content-Type",this.contentType),this.setCustomAjaxHeaders(),this.responseType&&(this.xmlHttpRequest.responseType=this.responseType);var i=e instanceof FormData?e:JSON.stringify(e);this.xmlHttpRequest.send(i)},e.prototype.stateChange=function(e){if(4===e.xmlHttpRequest.readyState&&200===e.xmlHttpRequest.status){var t=void 0,i={name:"onSuccess",data:t=this.responseType?e.xmlHttpRequest.response:e.xmlHttpRequest.responseText,readyState:e.xmlHttpRequest.readyState,status:e.xmlHttpRequest.status};e.successHandler(i)}else if(4===e.xmlHttpRequest.readyState&&200!==e.xmlHttpRequest.status){i={name:"onFailure",status:e.xmlHttpRequest.status,statusText:e.xmlHttpRequest.statusText,url:e.url};e.failureHandler(i)}},e.prototype.error=function(e){var t={name:"onError",status:this.xmlHttpRequest.status,statusText:this.xmlHttpRequest.statusText};e.errorHandler(t)},e.prototype.successHandler=function(e){return this.onSuccess&&this.onSuccess(e),e},e.prototype.failureHandler=function(e){return this.onFailure&&this.onFailure(e),e},e.prototype.errorHandler=function(e){return this.onError&&this.onError(e),e},e.prototype.setCustomAjaxHeaders=function(){for(var e=0;er&&(a="landscape"),-1!==i.indexOf("Chrome")||-1!==i.indexOf("Firefox")?(n.document.write(""),n.document.write("
")):n.document.write("
"),n.document.write(s.innerHTML+"
');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n // eslint-disable-next-line\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n };\n /**\n * Generate Document Image.\n *\n * @param documentHelper\n * @param pageNumber\n * @param imageType\n * @private\n */\n Print.prototype.exportAsImage = function (documentHelper, pageNumber, imageType) {\n var image;\n if (!isNullOrUndefined(pageNumber) && pageNumber <= documentHelper.pages.length && pageNumber >= 1) {\n var printPage = documentHelper.pages[(pageNumber - 1)];\n var pgHeight = printPage.boundingRectangle.height;\n var pgWidth = printPage.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(printPage, 0, 0, 0, 0);\n //get the image data from the canvas\n var imageData = documentHelper.render.pageCanvas.toDataURL(imageType, 1);\n documentHelper.render.isPrinting = false;\n image = new Image();\n image.src = imageData;\n // tslint:disable-next-line:max-line-length\n image.setAttribute('style', 'margin:0px;display:block;width:' + pgWidth.toString() + 'px;height:' + pgHeight.toString() + 'px;');\n }\n return image;\n };\n /**\n * Generates print content.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @param {HTMLDivElement} element - Specifies the element.\n * @returns {void}\n */\n Print.prototype.generatePrintContent = function (documentHelper, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < documentHelper.pages.length; i++) {\n var page = documentHelper.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(page, 0, 0, 0, 0);\n var canvasURL = documentHelper.render.pageCanvas.toDataURL();\n documentHelper.render.isPrinting = false;\n htmlString += '

';\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page width.\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page height.\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n * @returns {void}\n */\n Print.prototype.destroy = function () {\n return;\n };\n return Print;\n}());\nexport { Print };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/* eslint-disable */\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartPageNumbering\", {\n get: function () {\n return this.getPropertyValue('restartPageNumbering');\n },\n set: function (value) {\n this.setPropertyValue('restartPageNumbering', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageStartingNumber\", {\n get: function () {\n return this.getPropertyValue('pageStartingNumber');\n },\n set: function (value) {\n this.setPropertyValue('pageStartingNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"endnoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('endnoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('endnoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForEndnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForEndnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForEndnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForFootnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForFootnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForFootnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footNoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('footNoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('footNoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialFootNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialFootNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialFootNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialEndNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialEndNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialEndNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageNumberStyle\", {\n get: function () {\n return this.getPropertyValue('pageNumberStyle');\n },\n set: function (value) {\n this.setPropertyValue('pageNumberStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n };\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n case 'bidi':\n value = false;\n break;\n case 'restartPageNumbering':\n value = false;\n break;\n case 'pageStartingNumber':\n value = 1;\n break;\n case 'footnotePosition':\n value = 'PrintAtBottomOfPage';\n break;\n case 'endnoteNumberFormat':\n value = 'LowerCaseRoman';\n break;\n case 'endnotePosition':\n value = 'DisplayEndOfDocument';\n break;\n case 'restartIndexForEndnotes':\n value = 'DoNotRestart';\n break;\n case 'restartIndexForFootnotes':\n value = 'DoNotRestart';\n break;\n case 'footNoteNumberFormat':\n value = 'Arabic';\n break;\n case 'initialFootNoteNumber':\n value = 1;\n break;\n case 'initialEndNoteNumber':\n value = 1;\n break;\n case 'pageNumberStyle':\n value = 'Arabic';\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bidi', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartPageNumbering', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageStartingNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footNoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForEndnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForFootnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialFootNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialEndNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageNumberStyle', property, propValue, uniqueSectionFormatTemp);\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n }\n else {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"isBorderDefined\", {\n get: function () {\n return (this.lineStyle !== 'None' ||\n (this.hasNoneStyle && this.hasValue('hasNoneStyle')));\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propValue = this.uniqueBorderFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n /* eslint-enable */\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* eslint-disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return this.lineWidth;\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return this.lineWidth;\n }\n return this.lineWidth;\n /* eslint-enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[i] >= 0) {\n borderLineArray[i] = borderLineArray[i] * lineWidth;\n }\n else {\n borderLineArray[i] = Math.abs(borderLineArray[i]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = numberOfLines * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap': //dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy': //wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap': //dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy': //wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValues = function () {\n return this.hasValue('color') || this.hasValue('lineStyle') || this.hasValue('lineWidth') || this.hasValue('shadow') || this.hasValue('space') || this.hasValue('hasNoneStyle');\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n WBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n /**\n * @private\n */\n WBorder.prototype.isEqualFormat = function (border, includeSpace) {\n var value = false;\n if (this.color === border.color && this.lineStyle === border.lineStyle && this.lineWidth === border.lineWidth && this.shadow == border.shadow) {\n value = true;\n }\n if (includeSpace) {\n value = (this.space == border.space);\n }\n return value;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n if (border.hasValue('color')) {\n this.color = border.color;\n }\n if (border.hasValue('lineStyle')) {\n this.lineStyle = border.lineStyle;\n }\n if (border.hasValue('lineWidth')) {\n this.lineWidth = border.lineWidth;\n }\n if (border.hasValue('shadow')) {\n this.shadow = border.shadow;\n }\n if (border.hasValue('space')) {\n this.space = border.space;\n }\n if (border.hasValue('hasNoneStyle')) {\n this.hasNoneStyle = border.hasNoneStyle;\n }\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WParagraphFormat } from './paragraph-format';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.isParsing = false;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('left');\n }\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('right');\n }\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('top');\n }\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('bottom');\n }\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('horizontal');\n }\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('vertical');\n }\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.getPropertyValue = function (property) {\n var border = this.getBorder(property);\n if (this.isParsing) {\n return border;\n }\n if (!border.hasValues()) {\n var baseStyle = this.ownerBase.baseStyle;\n if (!isNullOrUndefined(baseStyle)) {\n var currentFormat = this;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.ownerBase.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.borders.getBorder(property).hasValues()) {\n currentFormat = baseStyle.paragraphFormat.borders;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) &&\n (listParaFormat.borders.getBorder(property).hasValues())) {\n currentFormat = listParaFormat.borders;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n return currentFormat.getBorder(property);\n }\n }\n }\n else {\n return border;\n }\n return this.getDefaultValue(property);\n };\n WBorders.prototype.getDefaultValue = function (property) {\n var docParagraphFormat = this.documentParagraphFormat();\n var border;\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.borders)) {\n border = docParagraphFormat.borders.getBorder(property);\n }\n return border;\n };\n WBorders.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (this.ownerBase instanceof WParagraphFormat) {\n docParagraphFormat = this.ownerBase.getDocumentParagraphFormat();\n }\n return docParagraphFormat;\n };\n WBorders.prototype.getBorder = function (property) {\n var value = undefined;\n switch (property) {\n case 'left':\n return this.leftIn;\n case 'right':\n return this.rightIn;\n case 'top':\n return this.topIn;\n case 'bottom':\n return this.bottomIn;\n case 'vertical':\n return this.verticalIn;\n case 'horizontal':\n return this.horizontalIn;\n }\n return value;\n };\n /* eslint-enable */\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n }\n if (!isNullOrUndefined(this.bottomIn)) {\n this.bottomIn.destroy();\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.topIn) ? undefined : this.topIn.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottomIn) ? undefined : this.bottomIn.cloneFormat();\n borders.left = isNullOrUndefined(this.leftIn) ? undefined : this.leftIn.cloneFormat();\n borders.right = isNullOrUndefined(this.rightIn) ? undefined : this.rightIn.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontalIn) ? undefined : this.horizontalIn.cloneFormat();\n borders.vertical = isNullOrUndefined(this.verticalIn) ? undefined : this.verticalIn.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.getBorder('left')) && borders.getBorder('left') instanceof WBorder) {\n var left = new WBorder(this);\n left.copyFormat(borders.getBorder('left'));\n this.left = left;\n }\n if (!isNullOrUndefined(borders.getBorder('right')) && borders.getBorder('right') instanceof WBorder) {\n var right = new WBorder(this);\n right.copyFormat(borders.getBorder('right'));\n this.right = right;\n }\n if (!isNullOrUndefined(borders.getBorder('top')) && borders.getBorder('top') instanceof WBorder) {\n var top_1 = new WBorder(this);\n top_1.copyFormat(borders.getBorder('top'));\n this.top = top_1;\n }\n if (!isNullOrUndefined(borders.getBorder('bottom')) && borders.getBorder('bottom') instanceof WBorder) {\n var bottom = new WBorder(this);\n bottom.copyFormat(borders.getBorder('bottom'));\n this.bottom = bottom;\n }\n if (!isNullOrUndefined(borders.getBorder('horizontal')) && borders.getBorder('horizontal') instanceof WBorder) {\n var horizontal = new WBorder(this);\n horizontal.copyFormat(borders.getBorder('horizontal'));\n this.horizontal = horizontal;\n }\n if (!isNullOrUndefined(borders.getBorder('vertical')) && borders.getBorder('vertical') instanceof WBorder) {\n var vertical = new WBorder(this);\n vertical.copyFormat(borders.getBorder('vertical'));\n this.vertical = vertical;\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n WLevelOverride.prototype.clone = function () {\n var levelOverride = new WLevelOverride();\n levelOverride.startAt = this.startAt;\n levelOverride.levelNumber = this.levelNumber;\n if (!isNullOrUndefined(this.overrideListLevel)) {\n levelOverride.overrideListLevel = this.overrideListLevel.clone(levelOverride);\n }\n return levelOverride;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[levelNumber];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[i] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[i];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n this.levelOverrides = [];\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n this.levelOverrides = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n WList.prototype.clone = function () {\n var list = new WList();\n for (var i = 0; i < this.levelOverrides.length; i++) {\n list.levelOverrides.push(this.levelOverrides[i].clone());\n }\n return list;\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/* eslint-disable */\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n if (listId >= 0) {\n if (!isNullOrUndefined(this.ownerBase)) {\n var helper = this.ownerBase.getDocumentHelperObject();\n if (!isNullOrUndefined(helper)) {\n this.list = helper.getListById(listId);\n }\n }\n }\n else if (!isNullOrUndefined(this.list) && listId < 0) {\n this.list = undefined;\n }\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle) && baseListStyle instanceof WParagraphStyle) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.prototype.cloneListFormat = function () {\n var format = new WListFormat(undefined);\n format.list = this.list;\n format.listId = this.listId;\n format.baseStyle = this.baseStyle;\n format.listLevelNumber = this.listLevelNumber;\n format.uniqueListFormat = this.uniqueListFormat;\n return format;\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WBorders } from './borders';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { ParagraphWidget, BodyWidget, TableCellWidget } from '../viewer/page';\nimport { WParagraphStyle } from './style';\n/* eslint-disable */\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.borders = new WBorders(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n var tabStops = new Dictionary();\n var tabsInListFormat = this.getTabStopsFromListFormat();\n for (var _i = 0, tabsInListFormat_1 = tabsInListFormat; _i < tabsInListFormat_1.length; _i++) {\n var tabStop = tabsInListFormat_1[_i];\n if (!tabStops.containsKey(tabStop.position)) {\n tabStops.add(tabStop.position, tabStop);\n }\n }\n if (!isNullOrUndefined(this.baseStyle) && this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n for (var _a = 0, _b = baseStyle.paragraphFormat.tabs; _a < _b.length; _a++) {\n var tab = _b[_a];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _c = 0, _d = tabStops.keys; _c < _d.length; _c++) {\n var key = _d[_c];\n if (!this.hasTabStop(parseFloat(key.toFixed(4)))) {\n inTabs.push(tabStops.get(key));\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n }\n return inTabs;\n };\n WParagraphFormat.prototype.getTabStopsFromListFormat = function () {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n if (level && level.paragraphFormat) {\n return level.paragraphFormat.tabs;\n }\n }\n return [];\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (parseFloat(this.tabs[i].position.toFixed(4)) === position ||\n parseFloat(this.tabs[i].deletePosition.toFixed(4)) === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceBeforeAuto\", {\n get: function () {\n return this.getPropertyValue('spaceBeforeAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceBeforeAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceAfterAuto\", {\n get: function () {\n return this.getPropertyValue('spaceAfterAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceAfterAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n var value = this.getPropertyValue('textAlignment');\n if (this.bidi) {\n if (value === 'Left') {\n value = 'Right';\n }\n else if (value === 'Right') {\n value = 'Left';\n }\n }\n return value;\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepWithNext\", {\n get: function () {\n return this.getPropertyValue('keepWithNext');\n },\n set: function (value) {\n this.setPropertyValue('keepWithNext', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepLinesTogether\", {\n get: function () {\n return this.getPropertyValue('keepLinesTogether');\n },\n set: function (value) {\n this.setPropertyValue('keepLinesTogether', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"widowControl\", {\n get: function () {\n return this.getPropertyValue('widowControl');\n },\n set: function (value) {\n this.setPropertyValue('widowControl', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"contextualSpacing\", {\n get: function () {\n return this.getPropertyValue('contextualSpacing');\n },\n set: function (value) {\n this.setPropertyValue('contextualSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n var paragraphFormat = this.getListPargaraphFormat(property);\n if (!isNullOrUndefined(paragraphFormat)) {\n return paragraphFormat.uniqueParagraphFormat.propertiesHash.get(WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property));\n }\n return undefined;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getListPargaraphFormat = function (property) {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) &&\n level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var formatInList = this.getListFormatParagraphFormat(property);\n if (this.baseStyle instanceof WParagraphStyle) {\n var currentFormat = this;\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.hasValue(property)) {\n currentFormat = baseStyle.paragraphFormat;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) && listParaFormat.hasValue(property)) {\n currentFormat = listParaFormat;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n if (!isNullOrUndefined(formatInList) && this.listFormat.listId !== -1\n && currentFormat.listFormat.listId === -1 && currentFormat.listFormat.listLevelNumber <= 1\n || !isNullOrUndefined(formatInList) && this.listFormat.listId !== currentFormat.listFormat.listId\n && currentFormat.listFormat.listLevelNumber <= 1) {\n return formatInList;\n }\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return currentFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n if (!isNullOrUndefined(formatInList)) {\n return formatInList;\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.getDocumentParagraphFormat();\n var isInsideBodyWidget = true;\n if (this.ownerBase && this.ownerBase instanceof ParagraphWidget) {\n isInsideBodyWidget = this.ownerBase.containerWidget instanceof BodyWidget ||\n this.ownerBase.containerWidget instanceof TableCellWidget;\n }\n var isPaste = !isNullOrUndefined(this.ownerBase) && !isNullOrUndefined(this.ownerBase.bodyWidget)\n && this.ownerBase.bodyWidget.page && !isNullOrUndefined(this.ownerBase.bodyWidget.page.documentHelper) && this.ownerBase.bodyWidget.page.documentHelper.owner.editor\n && this.ownerBase.bodyWidget.page.documentHelper.owner.editor.isPaste;\n if (isInsideBodyWidget && !isPaste\n && !isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat)) {\n var propValue = docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n return WParagraphFormat.getPropertyDefaultValue(property);\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n var documentHelper = this.getDocumentHelperObject();\n if (!isNullOrUndefined(documentHelper)) {\n docParagraphFormat = documentHelper.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentHelperObject = function () {\n var documentHelper;\n if (this.ownerBase instanceof ParagraphWidget) {\n var bodyWidget = this.ownerBase.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.documentHelper)) {\n documentHelper = bodyWidget.page.documentHelper;\n }\n }\n return documentHelper;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value, clearProperty) {\n if (isNullOrUndefined(value) || value === '' && !clearProperty) {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceBeforeAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceAfterAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('bidi', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('contextualSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepWithNext', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepLinesTogether', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('widowControl', property, propValue, uniqueParaFormatTemp);\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'spaceBeforeAuto':\n value = false;\n break;\n case 'spaceAfterAuto':\n value = false;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n case 'bidi':\n value = false;\n break;\n case 'contextualSpacing':\n value = false;\n break;\n case 'keepWithNext':\n value = false;\n break;\n case 'keepLinesTogether':\n value = false;\n break;\n case 'widowControl':\n value = true;\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearIndent = function () {\n this.clearPropertyValue('leftIndent');\n this.clearPropertyValue('firstLineIndent');\n };\n WParagraphFormat.prototype.clearPropertyValue = function (property) {\n this.setPropertyValue(property, undefined, true);\n if (!isNullOrUndefined(this.uniqueParagraphFormat)) {\n var key = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(key)) {\n this.uniqueParagraphFormat.propertiesHash.remove(key);\n }\n }\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n this.baseStyle = undefined;\n };\n WParagraphFormat.prototype.destroy = function () {\n this.clearFormat();\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs !== undefined) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = undefined;\n }\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n this.borders = undefined;\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.borders)) {\n //this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = this.listFormat.cloneListFormat();\n format.listFormat.ownerBase = format;\n }\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n return format;\n };\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.applyStyle(this.baseStyle);\n };\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WParagraphFormat.prototype.mergeFormat = function (format, isStyle) {\n isStyle = isNullOrUndefined(isStyle) ? false : isStyle;\n if (isNullOrUndefined(this.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('spaceBeforeAuto'))) {\n this.spaceBeforeAuto = format.getValue('spaceBeforeAuto');\n }\n if (isNullOrUndefined(this.getValue('spaceAfterAuto'))) {\n this.spaceAfterAuto = format.getValue('spaceAfterAuto');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (!isStyle && isNullOrUndefined(this.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('contextualSpacing'))) {\n this.contextualSpacing = format.getValue('contextualSpacing');\n }\n if (isNullOrUndefined(this.getValue('keepWithNext'))) {\n this.keepWithNext = format.getValue('keepWithNext');\n }\n if (isNullOrUndefined(this.getValue('keepLinesTogether'))) {\n this.keepLinesTogether = format.getValue('keepLinesTogether');\n }\n if (isNullOrUndefined(this.getValue('widowControl'))) {\n this.widowControl = format.getValue('widowControl');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.removedIds = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('rightMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('topMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('bottomMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftIndent', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'leftIndent':\n value = 0;\n break;\n }\n return value;\n };\n WRowFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.leftIndent = this.leftIndent;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WRowFormat } from '../format/row-format';\n/**\n * The revision class which holds the information related to changes made in the document\n */\nvar Revision = /** @class */ (function () {\n function Revision(documentHelper, author, date) {\n /**\n * Gets or sets the author name who made the change\n *\n * @private\n */\n this.author = null;\n /**\n * Indicates when the track changes made\n *\n * @private\n */\n this.date = null;\n /**\n * Holds the reference of the items which are under this revision.\n *\n * @private\n */\n this.range = [];\n /**\n * @private\n */\n this.revisionID = '';\n /**\n * Used to update cursor position by ensuring items were removed or not\n */\n this.isContentRemoved = false;\n this.isTableRevision = false;\n /**\n * Indicates whether to skip unlinking ranges for table elements.\n */\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n this.author = author;\n this.date = date;\n this.owner = documentHelper;\n }\n Revision.prototype.handleAcceptReject = function (isFromAccept) {\n this.owner.selection.selectRevision(this);\n var selection = this.owner.selection;\n var startPos = selection.start;\n var endPos = selection.end;\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n var blockInfo = selection.getParagraphInfo(startPos);\n this.owner.editor.initHistory(isFromAccept ? 'Accept Change' : 'Reject Change');\n if (this.revisionType === 'Deletion') {\n blockInfo = selection.getParagraphInfo(this.owner.selection.start);\n selection.editPosition = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n selection.editPosition = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.owner.editor.updateInsertPosition();\n this.isContentRemoved = false;\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n // Implement to accept/reject the revision\n if (this.revisionType === 'Insertion' || this.revisionType === 'Deletion' || this.revisionType === 'MoveFrom' || this.revisionType === 'MoveTo') {\n var rangeIndex = 0;\n while (this.range.length > 0) {\n if (this.range[rangeIndex] instanceof ElementBox || this.range[rangeIndex] instanceof WCharacterFormat || this.range[rangeIndex] instanceof WRowFormat) {\n var moveToNextItem = this.unlinkRangeItem(this.range[rangeIndex], this, isFromAccept);\n if (moveToNextItem) {\n rangeIndex++;\n }\n else {\n rangeIndex = 0;\n }\n }\n else {\n break;\n }\n }\n }\n this.isTableRevision = false;\n if (this.isContentRemoved) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selection.selectContent(textPosition, true);\n this.owner.editor.updateEndPosition();\n }\n else {\n selection.selectRange(startPos, endPos);\n this.owner.editor.updateHistoryPosition(endPos, false);\n }\n if (this.owner.editorHistory && this.owner.editorHistory.currentBaseHistoryInfo.action !== 'BackSpace') {\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.reverse();\n }\n if (this.owner.editorHistory) {\n if (this.owner.trackChangesPane.isTrackingPageBreak) {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'TrackingPageBreak';\n }\n var editorHistory = this.owner.editorHistory;\n if (editorHistory.currentHistoryInfo && (editorHistory.currentHistoryInfo.action === 'Accept All' || editorHistory.currentHistoryInfo.action === 'Reject All')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n editorHistory.updateHistory();\n }\n this.owner.editor.reLayout(this.owner.selection);\n if (blockInfo.paragraph.isInHeaderFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n Revision.prototype.handleGroupAcceptReject = function (isAccept) {\n if (this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.owner.editor.initComplexHistory(isAccept ? 'Accept All' : 'Reject All');\n var groupingAcceptReject = this.owner.trackChangesPane.tableRevisions.get(this);\n for (var i = 0; i < groupingAcceptReject.length; i++) {\n if (isAccept) {\n groupingAcceptReject[i].handleAcceptReject(true);\n }\n else {\n groupingAcceptReject[i].handleAcceptReject(false);\n }\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n /**\n * Method which accepts the selected revision, revision marks will be removed and changes will be included in the viewer.\n *\n * @returns {void}\n */\n Revision.prototype.accept = function () {\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(true);\n }\n else {\n this.handleAcceptReject(true);\n }\n }\n };\n /**\n * Method which rejects the selected revision, revision marks will be removed leaving the original content.\n */\n Revision.prototype.reject = function () {\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(false);\n }\n else {\n this.handleAcceptReject(false);\n }\n }\n };\n /**\n * Unlinks revision and its assosiated range\n * @private\n * @param item\n * @param revision\n * @param isFromAccept\n */\n /* eslint-disable */\n Revision.prototype.unlinkRangeItem = function (item, revision, isFromAccept) {\n if (this.isTableRevision) {\n this.removeRangeRevisionForItem(item);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n }\n var removeChanges = (!isNullOrUndefined(isFromAccept)) && ((revision.revisionType === 'MoveFrom' || revision.revisionType === 'Deletion') && isFromAccept) || ((revision.revisionType === 'Insertion' || revision.revisionType === 'MoveTo') && !isFromAccept);\n if (this.owner.selection.isTOC()) {\n if (removeChanges) {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n this.isContentRemoved = true;\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'BackSpace';\n }\n else {\n while (this.range.length > 0) {\n var currentElement = this.range[0];\n this.removeRangeRevisionForItem(currentElement);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n }\n this.owner.editor.addRemovedNodes(this.revisionID);\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'AcceptTOC';\n }\n return false;\n }\n if (item instanceof ElementBox && !this.canSkipTableItems) {\n if (removeChanges) {\n if (!this.skipeElementRemoval(item)) {\n this.owner.editor.addRemovedNodes(item.clone());\n }\n else {\n this.skipUnLinkElement = true;\n return true;\n }\n }\n else {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n }\n }\n else if (!this.canSkipTableItems && (item instanceof WCharacterFormat) && (!removeChanges)) {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n }\n else if (item instanceof WRowFormat && !removeChanges) {\n this.isTableRevision = true;\n var tableWidget = item.ownerBase.ownerTable;\n var currentRow = item.ownerBase;\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n this.owner.editor.cloneTableToHistoryInfo(tableWidget);\n }\n removeChanges = removeChanges && !this.canSkipTableItems;\n if (item instanceof ElementBox && removeChanges) {\n var currentPara = item.line.paragraph;\n this.removeRevisionItemsFromRange(item);\n this.removeItem(item);\n this.isContentRemoved = true;\n this.owner.documentHelper.layout.reLayoutParagraph(currentPara, 0, 0);\n }\n else if (item instanceof WCharacterFormat && removeChanges) {\n this.isContentRemoved = true;\n this.skipUnLinkElement = false;\n this.removeRevisionItemsFromRange(item);\n if (revision.range.length === 1) {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n }\n else {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n }\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'BackSpace';\n }\n else if (item instanceof WRowFormat && removeChanges) {\n var tableWidget = item.ownerBase.ownerTable;\n var currentRow = item.ownerBase;\n this.removeRevisionItemsFromRange(item);\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'DeleteCells';\n this.owner.editor.cloneTableToHistoryInfo(tableWidget);\n this.owner.editor.removeDeletedCellRevision(currentRow);\n this.isContentRemoved = true;\n tableWidget.removeChild(tableWidget.childWidgets.indexOf(currentRow));\n this.canSkipTableItems = true;\n // Before destroying the table row widget, delete the bookmark element from the row.\n this.owner.editor.removeFieldInBlock(currentRow, true);\n // Before destroying the table row widget, delete the content control element from the row.\n this.owner.editor.removeFieldInBlock(currentRow, undefined, true);\n currentRow.destroy();\n if (tableWidget.childWidgets.length === 0) {\n this.owner.selection.editPosition = this.owner.selection.getHierarchicalIndex(tableWidget, '0');\n this.owner.editor.removeBlock(tableWidget);\n tableWidget.destroy();\n }\n else {\n this.owner.editor.updateTable(tableWidget);\n }\n }\n // if the range is of row format, we will remove the row and for history preservation we use whole table to be cloned, hence skipping this part\n if (!(item instanceof WRowFormat) || !removeChanges) {\n if (!this.skipUnLinkElement) {\n this.removeRangeRevisionForItem(item);\n }\n }\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n };\n Revision.prototype.updateRevisionID = function () {\n this.owner.editor.addRemovedNodes(this.revisionID);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRevisionItemsFromRange = function (item) {\n if (item.revisions.length > 0) {\n for (var revisionIndex = 0; revisionIndex < item.revisions.length; revisionIndex++) {\n var currentRevision = item.revisions[revisionIndex];\n if (this.revisionID !== currentRevision.revisionID) {\n var rangeIndex = currentRevision.range.indexOf(item);\n item.revisions[revisionIndex].range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n };\n /**\n * Method to clear linked ranges in revision\n *\n * @private\n * @param {any} item - Specifies the item\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRangeRevisionForItem = function (item) {\n var revisionIndex = item.revisions.indexOf(this);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = this.range.indexOf(item);\n this.range.splice(rangeIndex, 1);\n }\n };\n /**\n * @private\n * @param {Element} element - Specifies the element.\n * @returns {boolean} Resturs skip element removal\n */\n Revision.prototype.skipeElementRemoval = function (element) {\n var elementPara = element.paragraph;\n if (elementPara.characterFormat.revisions.length > 0) {\n for (var i = 0; i < elementPara.characterFormat.revisions.length; i++) {\n var currentRevision = elementPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(element);\n if (rangeIndex >= 0) {\n return true;\n }\n }\n }\n return false;\n };\n Revision.prototype.removeRevisionFromRow = function (row) {\n this.owner.editor.unlinkRangeFromRevision(row.rowFormat);\n //this.owner.editor.addRemovedRevisionInfo(row.rowFormat, undefined);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n this.owner.editor.removeRevisionForCell(cellWidget, false);\n }\n };\n Revision.prototype.removeItem = function (element) {\n var paraWidget = element.line.paragraph;\n this.owner.editor.unLinkFieldCharacter(element);\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n this.owner.editor.removeEmptyLine(paraWidget);\n };\n Revision.prototype.canSkipCloning = function () {\n if (!isNullOrUndefined(this.owner) && this.owner.editorHistory && this.owner.editorHistory.currentBaseHistoryInfo) {\n var baseHistoryInfo = this.owner.editorHistory.currentBaseHistoryInfo;\n if (baseHistoryInfo.action === 'DeleteCells') {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {Revision} - Returns revision\n */\n Revision.prototype.clone = function () {\n if (this.canSkipCloning()) {\n return this;\n }\n var revision = new Revision(undefined, this.author, this.date);\n revision.revisionID = this.revisionID;\n revision.revisionType = this.revisionType;\n return revision;\n };\n /**\n * Method to clone the revisions for the element\n *\n * @param {Revision[]} revisions - revision array.\n * @returns {string[]} - returns clones revisions.\n */\n Revision.cloneRevisions = function (revisions) {\n var clonedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n clonedRevisions.push(revisions[i].revisionID);\n }\n return clonedRevisions;\n };\n return Revision;\n}());\nexport { Revision };\n/**\n * Represents the revision collections in the document.\n */\nvar RevisionCollection = /** @class */ (function () {\n function RevisionCollection(owner) {\n /**\n * @private\n */\n this.changes = [];\n /**\n * @private\n */\n this.skipGroupAcceptReject = false;\n this.owner = owner;\n }\n /**\n * @private\n */\n RevisionCollection.prototype.get = function (index) {\n if (index >= this.changes.length || index < 0) {\n throw new ReferenceError('Provided index is not within the range');\n }\n return this.changes[index];\n };\n Object.defineProperty(RevisionCollection.prototype, \"length\", {\n get: function () {\n return this.changes.length;\n },\n enumerable: true,\n configurable: true\n });\n RevisionCollection.prototype.remove = function (revision) {\n if (isNullOrUndefined(revision) || this.changes.indexOf(revision) < 0) {\n return;\n }\n this.changes.splice(this.changes.indexOf(revision), 1);\n };\n /**\n * Method which accepts all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.acceptAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(true);\n }\n };\n /**\n * Method which rejects all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.rejectAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(false);\n }\n };\n /**\n * @private\n * @param {boolean} isfromAcceptAll - Specifies the is accept all.\n * @param {Revision[]} changes - Specifies the revisions.\n * @returns {void}\n */\n RevisionCollection.prototype.handleRevisionCollection = function (isfromAcceptAll, changes) {\n this.skipGroupAcceptReject = true;\n var selection = this.owner.selection;\n var startPos = selection.start;\n var endPos = selection.end;\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n startPos = startPos.clone();\n endPos = endPos.clone();\n if (isfromAcceptAll) {\n this.owner.editor.initComplexHistory('Accept All');\n }\n else {\n this.owner.editor.initComplexHistory('Reject All');\n }\n var revisionCollec = changes ? changes : this.changes;\n while (revisionCollec.length > 0) {\n if (isfromAcceptAll) {\n revisionCollec[0].accept();\n }\n else {\n revisionCollec[0].reject();\n }\n if (changes) {\n revisionCollec.splice(0, 1);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n }\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selection.selectContent(textPosition, true);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n this.owner.editor.reLayout(this.owner.selection, false);\n this.skipGroupAcceptReject = false;\n };\n RevisionCollection.prototype.destroy = function () {\n this.changes = [];\n this.owner = undefined;\n };\n return RevisionCollection;\n}());\nexport { RevisionCollection };\n","import { TextElementBox, ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.revisions = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"localeIdBidi\", {\n get: function () {\n return this.getPropertyValue('localeIdBidi');\n },\n set: function (value) {\n this.setPropertyValue('localeIdBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bdo\", {\n get: function () {\n return this.getPropertyValue('bdo');\n },\n set: function (value) {\n this.setPropertyValue('bdo', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"boldBidi\", {\n get: function () {\n return this.getPropertyValue('boldBidi');\n },\n set: function (value) {\n this.setPropertyValue('boldBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italicBidi\", {\n get: function () {\n return this.getPropertyValue('italicBidi');\n },\n set: function (value) {\n this.setPropertyValue('italicBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSizeBidi\", {\n get: function () {\n return this.getPropertyValue('fontSizeBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontSizeBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyBidi\", {\n get: function () {\n return this.getPropertyValue('fontFamilyBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"allCaps\", {\n get: function () {\n return this.getPropertyValue('allCaps');\n },\n set: function (value) {\n this.setPropertyValue('allCaps', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n if (!isNullOrUndefined(this.baseCharStyle)) {\n var paragraph = this.ownerBase.paragraph;\n var line = this.ownerBase.line;\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(line)) {\n var length_1 = line.children.length;\n for (var i = 0; i < length_1; i++) {\n var element = this.ownerBase.line.children[i];\n if (element instanceof TextElementBox) {\n var text = element.text;\n if (text.startsWith('HYPERLINK')) {\n var index = text.indexOf('_Toc');\n if (index !== -1) {\n this.baseCharStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n }\n }\n }\n }\n }\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph) && !isNullOrUndefined(this.ownerBase.paragraph.bodyWidget)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.documentHelper.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.documentHelper.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bdo', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSizeBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('boldBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italicBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('allCaps', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('localeIdBidi', property, propValue, uniqueCharFormatTemp);\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#00000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n case 'bidi':\n value = false;\n break;\n case 'bdo':\n value = 'None';\n break;\n case 'boldBidi':\n value = false;\n break;\n case 'italicBidi':\n value = false;\n break;\n case 'fontSizeBidi':\n value = 11;\n break;\n case 'fontFamilyBidi':\n value = 'Calibri';\n break;\n case 'allCaps':\n value = false;\n break;\n case 'localeIdBidi':\n value = 0;\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor && this.bidi === format.bidi\n && this.bdo === format.bdo)\n && this.allCaps === format.allCaps\n && this.localeIdBidi === format.localeIdBidi;\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.applyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic'))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n if (isNullOrUndefined(this.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('bdo'))) {\n this.bdo = format.getValue('bdo');\n }\n if (isNullOrUndefined(this.getValue('allCaps'))) {\n this.allCaps = format.getValue('allCaps');\n }\n if (isNullOrUndefined(this.getValue('localeIdBidi'))) {\n this.localeIdBidi = format.getValue('localeIdBidi');\n }\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined, Internationalization } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n *\n * @private\n * @param {string} spanText - Specifies the span text.\n * @param {number} index - Specifies the index\n * @param {string} text - Specifies the text\n * @returns {string} - Returns modified string\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * Removes text from specified index in string.\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {number} index - Specifies the index\n * @returns {string} - Returns modified string\n */\n HelperMethods.remove = function (text, index) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[j]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[i] === wordSplitCharacter[j]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Convert ARGB to RGB\n * @private\n * @param {string} color\n * @returns {string}\n */\n HelperMethods.convertArgbToRgb = function (color) {\n if (color.length >= 8) {\n return color.substr(0, 6);\n }\n return color;\n };\n HelperMethods.convertRgbToHex = function (val) {\n var hex = Number(val).toString(16);\n if (hex.length < 2) {\n hex = '0' + hex;\n }\n return hex;\n };\n HelperMethods.convertHexToRgb = function (colorCode) {\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n var r = (colCodeNo >> 16) & 255;\n var g = (colCodeNo >> 8) & 255;\n var b = colCodeNo & 255;\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n HelperMethods.isVeryDark = function (backColor) {\n var backgroundColor = backColor.substring(1);\n var r = parseInt(backgroundColor.substr(0, 2), 16);\n var g = parseInt(backgroundColor.substr(2, 2), 16);\n var b = parseInt(backgroundColor.substr(4, 2), 16);\n var contrast = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n return contrast <= 60;\n };\n HelperMethods.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n HelperMethods.convertPointToPixel = function (point) {\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n *\n * @private\n * @param {string} text - Specifies the text.\n * @returns {boolean} - Returns true if text ends with specified text.\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n HelperMethods.addSpace = function (length) {\n var str = '';\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n str += ' ';\n }\n }\n return str;\n };\n /* eslint-disable */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format) {\n characterFormat.bold = isInline ? format.bold : format.getValue('bold');\n characterFormat.italic = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSize = isInline ? this.toWriteInline(format, 'fontSize') : format.getValue('fontSize');\n characterFormat.fontFamily = isInline ? this.toWriteInline(format, 'fontFamily') : format.getValue('fontFamily');\n characterFormat.underline = isInline ? format.underline : format.getValue('underline');\n characterFormat.strikethrough = isInline ? format.strikethrough : format.getValue('strikethrough');\n characterFormat.baselineAlignment = isInline ? format.baselineAlignment : format.getValue('baselineAlignment');\n characterFormat.highlightColor = isInline ? format.highlightColor : format.getValue('highlightColor');\n characterFormat.fontColor = isInline ? this.toWriteInline(format, 'fontColor') : format.getValue('fontColor');\n characterFormat.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n characterFormat.bidi = isInline ? format.bidi : format.getValue('bidi');\n characterFormat.bdo = isInline ? format.bdo : format.getValue('bdo');\n characterFormat.boldBidi = isInline ? format.boldBidi : format.getValue('boldBidi');\n characterFormat.italicBidi = isInline ? format.italicBidi : format.getValue('italicBidi');\n characterFormat.fontSizeBidi = isInline ? format.fontSizeBidi : format.getValue('fontSizeBidi');\n characterFormat.fontFamilyBidi = isInline ? format.fontFamilyBidi : format.getValue('fontFamilyBidi');\n characterFormat.allCaps = isInline ? format.allCaps : format.getValue('allCaps');\n characterFormat.localeIdBidi = isInline ? format.localeIdBidi : format.getValue('localeIdBidi');\n };\n HelperMethods.toWriteInline = function (format, propertyName) {\n if (!isNullOrUndefined(format.ownerBase) && (format.ownerBase instanceof ElementBox)) {\n return format.hasValue(propertyName) ? format[propertyName] : format.getValue(propertyName);\n }\n else {\n return format[propertyName];\n }\n };\n /* eslint-enable */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n HelperMethods.reverseString = function (text) {\n if (!isNullOrUndefined(text) && text !== '') {\n // return a new array\n var splitString = text.split('');\n // reverse the new created array\n var reverseString = splitString.reverse();\n // join all elements of the array into a string\n text = reverseString.join('');\n }\n return text;\n };\n HelperMethods.formatClippedString = function (base64ImageString) {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/svg+xml;base64,')) {\n extension = '.svg';\n formatClippedString = base64ImageString.replace('data:image/svg+xml;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n return { 'extension': extension, 'formatClippedString': formatClippedString };\n };\n HelperMethods.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n HelperMethods.formatText = function (format, value) {\n var text = value;\n switch (format.toLowerCase()) {\n case 'uppercase':\n text = value.toUpperCase();\n break;\n case 'lowercase':\n text = value.toLowerCase();\n break;\n case 'firstlower':\n text = this.lowerFirstChar(value);\n break;\n case 'firstcapital':\n text = this.capitaliseFirst(value, 'FirstCapital');\n break;\n case 'titlecase':\n text = this.capitaliseFirst(value, 'Titlecase');\n break;\n }\n return text;\n };\n HelperMethods.formatNumber = function (format, value) {\n var intl = new Internationalization();\n var dotData = value.split('.');\n value = dotData[0];\n var numberValue = intl.parseNumber(value);\n if (value.toString() === 'NaN') {\n return '';\n }\n if (format === '') {\n format = '0';\n }\n var numberFormat = { format: format };\n return intl.formatNumber(numberValue, numberFormat);\n };\n HelperMethods.formatDate = function (format, value) {\n var intl = new Internationalization();\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return '';\n }\n if (format === '') {\n return value;\n }\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n var dateFormat = { 'format': format };\n return intl.formatDate(date, dateFormat);\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n HelperMethods.capitaliseFirst = function (value, type, splitBy) {\n var text = '';\n if (type === 'Titlecase') {\n var valArry = splitBy ? value.split(splitBy) : value.split(' ');\n for (var i = 0; i < valArry.length; i++) {\n /* eslint-disable-next-line max-len */\n text += splitBy ? valArry[i].charAt(0).toUpperCase() + valArry[i].slice(1, valArry[i].length) : this.capitaliseFirstInternal(valArry[i]);\n if (valArry.length >= 0 && !splitBy) {\n text += ' ';\n }\n }\n if (!splitBy) {\n text = this.capitaliseFirst(text, 'Titlecase', '\\r');\n }\n }\n else if (type === 'FirstCapital') {\n text = this.capitaliseFirstInternal(value);\n }\n return text;\n };\n HelperMethods.lowerFirstChar = function (value) {\n return (value.charAt(0).toLowerCase() + value.slice(1, value.length));\n };\n HelperMethods.capitaliseFirstInternal = function (value) {\n return (value.charAt(0).toUpperCase() + value.slice(1, value.length).toLowerCase());\n };\n HelperMethods.getModifiedDate = function (date) {\n var modifiedDate = HelperMethods.getLocaleDate(date);\n var dateString = modifiedDate.toLocaleDateString([], { year: 'numeric', month: 'long', day: 'numeric' });\n var time = modifiedDate.toLocaleTimeString([], { hour: 'numeric', minute: 'numeric' });\n var dateTime = dateString + ' ' + time;\n return dateTime;\n };\n HelperMethods.getUtcDate = function () {\n var now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();\n };\n HelperMethods.getLocaleDate = function (date) {\n var dt = new Date(date);\n return new Date(dt.getTime() + dt.getTimezoneOffset() * 60000);\n };\n HelperMethods.getCompatibilityModeValue = function (compatibilityMode) {\n var compatValue;\n switch (compatibilityMode) {\n case 'Word2003':\n compatValue = '11';\n break;\n case 'Word2007':\n compatValue = '12';\n break;\n case 'Word2010':\n compatValue = '14';\n break;\n default:\n compatValue = '15';\n break;\n }\n return compatValue;\n };\n /**\n * @private\n * @returns {string} - Returns the unique id for document editor.\n */\n HelperMethods.getUniqueElementId = function () {\n return 'de_element' + Date.now().toString(36) + Math.random().toString(36).substring(2);\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”', ' ', '،', '؟', '؛', '’', '‘'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n *\n * @returns {void}\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n/**\n * @private\n */\nvar Base64 = /** @class */ (function () {\n function Base64() {\n this.keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n }\n // public method for encoding\n Base64.prototype.encodeString = function (input) {\n var output = '';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n input = this.unicodeEncode(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n }\n else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output +\n this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +\n this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4);\n }\n return output;\n };\n // private method for UTF-8 encoding\n Base64.prototype.unicodeEncode = function (input) {\n var tempInput = input.replace(/\\r\\n/g, '\\n');\n var utftext = '';\n for (var n = 0; n < tempInput.length; n++) {\n var c = tempInput.charCodeAt(n);\n if (c < 128) {\n utftext += String.fromCharCode(c);\n }\n else if ((c > 127) && (c < 2048)) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n return utftext;\n };\n Base64.prototype.decodeString = function (input) {\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9+/=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = this.keyStr.indexOf(input.charAt(i++));\n enc2 = this.keyStr.indexOf(input.charAt(i++));\n enc3 = this.keyStr.indexOf(input.charAt(i++));\n enc4 = this.keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n /**\n * @private\n * @returns {void}\n */\n Base64.prototype.destroy = function () {\n this.keyStr = undefined;\n };\n return Base64;\n}());\nexport { Base64 };\n/**\n * @private\n */\nvar WrapPosition = /** @class */ (function () {\n function WrapPosition(x, width) {\n this.x = 0;\n this.width = 0;\n this.x = x;\n this.width = width;\n }\n Object.defineProperty(WrapPosition.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n return WrapPosition;\n}());\nexport { WrapPosition };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WParagraphStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n this.paragraphFormat.destroy();\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WCharacterStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[index];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n while (this.collection.length > 0) {\n this.collection.pop();\n }\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type) && value.type === type) {\n returnStyle = value;\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a.name;\n });\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a;\n });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/* eslint-disable */\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = 'empty';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = undefined;\n this._styleName = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"allowAutoFit\", {\n get: function () {\n return this.getPropertyValue('allowAutoFit');\n },\n set: function (value) {\n this.setPropertyValue('allowAutoFit', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPositionAbs\", {\n get: function () {\n return this.getPropertyValue('horizontalPositionAbs');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPositionAbs', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPosition\", {\n get: function () {\n return this.getPropertyValue('horizontalPosition');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPosition', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"styleName\", {\n get: function () {\n return this._styleName;\n },\n set: function (value) {\n this._styleName = value;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('allowAutoFit', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bidi', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPositionAbs', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPosition', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowAutoFit':\n value = false;\n break;\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n case 'bidi':\n value = false;\n break;\n case 'horizontalPositionAbs':\n value = null;\n break;\n case 'horizontalPosition':\n value = 0;\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.horizontalPositionAbs = this.horizontalPositionAbs;\n tableFormat.horizontalPosition = this.horizontalPosition;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n tableFormat.bidi = this.bidi;\n tableFormat.allowAutoFit = this.allowAutoFit;\n tableFormat.styleName = this.styleName;\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n this.allowAutoFit = format.allowAutoFit;\n this.horizontalPosition = format.horizontalPosition;\n this.horizontalPositionAbs = format.horizontalPositionAbs;\n this.styleName = format.styleName;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[i];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n WAbstractList.prototype.clone = function () {\n var absList = new WAbstractList();\n for (var i = 0; i < this.levels.length; i++) {\n absList.levels.push(this.levels[i].clone(absList));\n }\n return absList;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n /* eslint-disable */\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n }\n return value;\n /* eslint-enable */\n };\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n }\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.prototype.clone = function (node) {\n var listLevel = new WListLevel(node);\n listLevel.paragraphFormat = this.paragraphFormat.cloneFormat();\n listLevel.characterFormat = this.characterFormat.cloneFormat();\n if (this.uniqueListLevel) {\n listLevel.uniqueListLevel = this.uniqueListLevel;\n listLevel.uniqueListLevel.referenceCount++;\n }\n return listLevel;\n };\n WListLevel.dotBullet = String.fromCharCode(61623);\n WListLevel.squareBullet = String.fromCharCode(61607); //Symbol font \\u25aa.\n WListLevel.arrowBullet = String.fromCharCode(10148);\n WListLevel.circleBullet = String.fromCharCode(61551) + String.fromCharCode(32);\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { CharacterRangeType } from '../../base/types';\nimport { HelperMethods, Point, WrapPosition } from '../editor/editor-helper';\nimport { WBorder, WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WListLevel } from '../list/list-level';\nimport { BlockContainer, BlockWidget, BodyWidget, BookmarkElementBox, EditRangeEndElementBox, EditRangeStartElementBox, ElementBox, FieldElementBox, FieldTextElementBox, HeaderFooterWidget, ImageElementBox, LineWidget, ListTextElementBox, Margin, ParagraphWidget, Rect, TabElementBox, TableCellWidget, TableRowWidget, TableWidget, TextElementBox, Widget, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase, CommentCharacterElementBox } from './page';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\n// Check box character is rendered smaller when compared to MS Word\n// So, mutiplied the font side by below factor to render check box character large.\nvar CHECK_BOX_FACTOR = 1.4;\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n function Layout(documentHelper) {\n /**\n * @private\n */\n this.islayoutFootnote = false;\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isfootMove = false;\n /**\n * @private\n */\n this.footnoteHeight = 0;\n /**\n * @private\n */\n this.isRelayout = false;\n /**\n * @private\n */\n this.isRelayoutneed = false;\n /**\n * @private\n */\n this.isOverlapFloatTable = false;\n this.isInitialLoad = true;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.isRTLLayout = false;\n this.currentCell = undefined;\n this.isFootnoteContentChanged = false;\n this.isEndnoteContentChanged = false;\n this.keepWithNext = false;\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n this.isLayoutWhole = false;\n /**\n * @private\n */\n this.isBidiReLayout = false;\n /**\n * @private\n */\n this.defaultTabWidthPixel = 48;\n /**\n * @private\n */\n this.isRelayoutFootnote = false;\n this.isRelayoutOverlap = false;\n this.isWrapText = false;\n this.isYPositionUpdated = false;\n this.isXPositionUpdated = false;\n this.hasFloatingElement = false;\n this.isFootNoteLayoutStart = false;\n this.wrapPosition = [];\n this.shiftedFloatingItemsFromTable = [];\n this.isDocumentContainsRtl = false;\n this.documentHelper = documentHelper;\n }\n Layout.prototype.isSameStyle = function (currentParagraph, isAfterSpacing) {\n var nextOrPrevSibling = undefined;\n if (isAfterSpacing) {\n if (currentParagraph.nextWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.nextWidget;\n }\n }\n else {\n if (currentParagraph.previousWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.previousWidget;\n }\n }\n if (isNullOrUndefined(nextOrPrevSibling)) {\n return false;\n }\n if (currentParagraph.paragraphFormat.baseStyle === nextOrPrevSibling.paragraphFormat.baseStyle) {\n if (currentParagraph.paragraphFormat.listFormat.listId >= 0 && nextOrPrevSibling.paragraphFormat.listFormat.listId >= 0) {\n if (!currentParagraph.paragraphFormat.contextualSpacing) {\n if (isAfterSpacing && currentParagraph.paragraphFormat.spaceAfterAuto) {\n return true;\n }\n else if (!isAfterSpacing && currentParagraph.paragraphFormat.spaceBeforeAuto) {\n return true;\n }\n }\n }\n return currentParagraph.paragraphFormat.contextualSpacing;\n }\n return false;\n };\n Object.defineProperty(Layout.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n //const page: Page = this.documentHelper.pages[0];\n //const body: BodyWidget = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n *\n * @returns {void}\n */\n Layout.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isFieldCode = undefined;\n this.footnoteHeight = undefined;\n };\n Layout.prototype.layoutItems = function (sections, isReLayout) {\n var _this = this;\n var page;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var lastpage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n /* eslint-disable-next-line max-len */\n if (i > 0 && sections[i - 1].lastChild.isEndsWithPageBreak && lastpage.bodyWidgets[0].childWidgets.length === 0) {\n this.documentHelper.pages.splice(this.documentHelper.pages.length - 1, 1);\n }\n page = this.viewer.createNewPage(section);\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.documentHelper.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.documentHelper.pages.length; i_1++) {\n var prevPage = this.documentHelper.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.documentHelper.pages.length - 1) {\n this.documentHelper.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0);\n }\n if (!isReLayout) {\n this.layoutComments(this.documentHelper.comments);\n }\n this.updateFieldElements();\n if (this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutEndNoteElement();\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (_this.documentHelper) {\n _this.documentHelper.isScrollHandler = true;\n if (_this.documentHelper.owner.isSpellCheck && _this.documentHelper.owner.spellChecker.enableOptimizedSpellCheck) {\n _this.documentHelper.triggerElementsOnLoading = true;\n }\n _this.documentHelper.clearContent();\n _this.viewer.updateScrollBars();\n _this.documentHelper.isScrollHandler = false;\n _this.isInitialLoad = false;\n }\n }, 50);\n };\n /**\n * @private\n */\n Layout.prototype.layoutComments = function (comments) {\n if (!isNullOrUndefined(comments)) {\n this.viewer.owner.commentReviewPane.layoutComments();\n }\n };\n Layout.prototype.layoutSection = function (section, index) {\n var block = section.firstChild;\n var nextBlock;\n do {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit) {\n block.calculateGrid();\n }\n this.viewer.updateClientAreaForBlock(block, true);\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n } while (block);\n block = section.firstChild;\n var page;\n if (block && block.bodyWidget && block.bodyWidget.page) {\n page = block.bodyWidget.page;\n }\n while (page) {\n if (page.footnoteWidget) {\n // if (page.bodyWidgets[0].lastChild instanceof TableWidget && (page.footnoteWidget.y < (page.bodyWidgets[0].lastChild as TableWidget).y + (page.bodyWidgets[0].lastChild as TableWidget).height)) {\n // this.reLayoutTable(page.bodyWidgets[0].lastChild as TableWidget, true);\n // }\n this.layoutfootNote(page.footnoteWidget);\n page = page.nextPage;\n }\n else {\n page = page.nextPage;\n }\n }\n page = undefined;\n block = undefined;\n };\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n if (headerFooterWidget.page) {\n var parentHeader = headerFooterWidget;\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n }\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var header = headerFooterWidget;\n header.page = page;\n header.height = 0;\n this.updateRevisionsToHeaderFooter(header, page);\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n //this.updateHeaderFooterToParent(header);\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n if (headerFooterWidget.page) {\n var parentHeader = headerFooterWidget;\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n }\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var footer = headerFooterWidget;\n footer.page = page;\n footer.height = 0;\n viewer.updateHFClientArea(section.sectionFormat, false);\n this.updateRevisionsToHeaderFooter(footer, page);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n }\n };\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.documentHelper.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Layout.prototype.updateRevisionsToHeaderFooter = function (clone, page) {\n var childWidge = clone.childWidgets;\n if (clone instanceof HeaderFooterWidget && childWidge.length > 0) {\n for (var i = 0; i < childWidge.length; i++) {\n if (childWidge[i].childWidgets.length > 0) {\n var lineWidge = childWidge[i].childWidgets;\n for (var j = 0; j < lineWidge.length; j++) {\n var childrens = lineWidge[j].children;\n if (childrens) {\n for (var k = 0; k < childrens.length; k++) {\n if (childrens[k].removedIds.length > 0) {\n var removeId = childrens[k].removedIds;\n for (var l = 0; l < removeId.length; l++) {\n var revision = this.documentHelper.revisionsInternal.get(removeId[l]);\n childrens[k].revisions[l] = revision;\n this.updateRevisionRange(revision, page);\n }\n }\n }\n }\n }\n }\n }\n }\n };\n Layout.prototype.updateRevisionRange = function (revision, page) {\n for (var i = 0; i < revision.range.length; i++) {\n var inline = revision.range[i];\n if (!inline.line.paragraph.bodyWidget.page) {\n inline.line.paragraph.bodyWidget.page = page;\n }\n }\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n /* eslint-disable no-cond-assign */\n } while (firstChild = firstChild.nextWidget);\n };\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && (element.fieldType !== 0 || (element.fieldType === 0 &&\n this.documentHelper.fields.indexOf(element) === -1))) {\n element.linkFieldCharacter(this.documentHelper);\n }\n if (element instanceof FieldTextElementBox &&\n element.fieldBegin !== element.previousElement.fieldBegin) {\n element.fieldBegin = element.previousElement.fieldBegin;\n }\n if (element instanceof ShapeElementBox) {\n var firstBlock = element.textFrame.firstChild;\n do {\n if (firstBlock instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstBlock);\n }\n else {\n this.linkFieldInTable(firstBlock);\n }\n /* eslint-disable no-cond-assign */\n } while (firstBlock = firstBlock.nextWidget);\n }\n else if (element instanceof CommentCharacterElementBox) {\n var comment = this.getCommentById(element.commentId);\n if (!isNullOrUndefined(comment)) {\n if (element.commentType === 0) {\n comment.commentStart = element;\n }\n else {\n comment.commentEnd = element;\n }\n element.comment = comment;\n }\n }\n }\n }\n };\n Layout.prototype.getCommentById = function (commentId) {\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n var comment = this.documentHelper.comments[i];\n if (comment.commentId === commentId) {\n return comment;\n }\n }\n return undefined;\n };\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit && !block.isGridUpdated) {\n block.calculateGrid();\n }\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n var widgetTop = bodyWidget.y + shiftTop;\n var footerMaxHeight = bodyWidget.page.boundingRectangle.height - (bodyWidget.page.boundingRectangle.height / 100) * 40;\n widgetTop = Math.max(widgetTop, footerMaxHeight);\n shiftTop = widgetTop - bodyWidget.y;\n var childTop = bodyWidget.y = widgetTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n var widget = childWidget.childWidgets[0];\n childWidget.x = childWidget.x;\n childWidget.y = i === 0 ? childWidget.y + shiftTop : childTop;\n childTop += childWidget.height;\n for (var j = 0; j < widget.children.length; j++) {\n var element = widget.children[j];\n if (element instanceof ShapeElementBox) {\n element.y = childWidget.y + element.verticalPosition;\n }\n }\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n childTop += childWidget.height;\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n Layout.prototype.layoutBlock = function (block, index) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n block.splitLtrAndRtlText(0);\n block.combineconsecutiveRTL(0);\n nextBlock = this.layoutParagraph(block, index);\n var nextBlockToLayout = this.checkAndRelayoutPreviousOverlappingBlock(block);\n if (nextBlockToLayout) {\n nextBlock = nextBlockToLayout;\n }\n }\n else {\n nextBlock = this.layoutTable(block, index);\n this.checkAndRelayoutPreviousOverlappingBlock(block);\n this.updateTableYPositionBasedonTextWrap(nextBlock);\n }\n return nextBlock.nextRenderedWidget;\n };\n Layout.prototype.updateTableYPositionBasedonTextWrap = function (table) {\n var _this = this;\n if (!isNullOrUndefined(table.bodyWidget)) {\n var tableY_1 = table.y;\n var tableRect_1 = new Rect(table.x, table.y, table.width, table.height);\n table.bodyWidget.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeElementBox && !shape.paragraph.isInsideTable) {\n var shapeRect = new Rect(shape.x, shape.y, shape.width, shape.height);\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom' || shape.textWrappingStyle === 'Square');\n if (considerShape && tableRect_1.isIntersecting(shapeRect)) {\n table.y = shape.y + shape.height + shape.distanceBottom;\n _this.updateChildLocationForTable(table.y, table);\n var height = table.y - tableY_1;\n _this.viewer.cutFromTop(_this.viewer.clientActiveArea.y + height);\n }\n }\n });\n }\n };\n Layout.prototype.checkAndRelayoutPreviousOverlappingBlock = function (block) {\n if (!(block.containerWidget instanceof TextFrame) && !this.isRelayoutOverlap) {\n var preivousBlock = block.previousWidget;\n if (block instanceof ParagraphWidget) {\n if (block.floatingElements.length > 0) {\n for (var i = 0; i < block.floatingElements.length; i++) {\n var element = block.floatingElements[i];\n if (element.textWrappingStyle === 'InFrontOfText' || element.textWrappingStyle === 'Behind') {\n continue;\n }\n var shapeRect = new Rect(element.x, element.y, element.width, element.height);\n while (preivousBlock) {\n if (preivousBlock instanceof ParagraphWidget) {\n /* eslint-disable-next-line max-len */\n var paraRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (shapeRect.isIntersecting(paraRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n }\n else {\n var widget = block.getSplitWidgets();\n if (widget) {\n return widget[widget.length - 1];\n }\n }\n }\n else {\n var table = block;\n if (!table.wrapTextAround) {\n return table;\n }\n var tableRect = new Rect(table.x, table.y, table.getTableCellWidth(), table.height);\n while (preivousBlock) {\n if (preivousBlock instanceof ParagraphWidget) {\n var blockRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (tableRect.isIntersecting(blockRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n if (this.startOverlapWidget) {\n this.isRelayoutOverlap = true;\n this.layoutStartEndBlocks(this.startOverlapWidget, block);\n this.isRelayoutOverlap = false;\n }\n this.startOverlapWidget = undefined;\n this.endOverlapWidget = undefined;\n }\n return block;\n };\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n // const ownerParaWidget: ParagraphWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right') &&\n paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n // const top: number = 0;\n // const bottom: number = 0;\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(paragraphWidget.characterFormat);\n var left = area.x;\n if (paragraphWidget.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraphWidget.width = width;\n paragraphWidget.x = left;\n paragraphWidget.y = area.y;\n }\n else {\n if (this.viewer.clientActiveArea.width <= 0 && this.viewer instanceof WebLayoutViewer) {\n paragraphWidget.x = this.previousPara;\n }\n else {\n paragraphWidget.x = area.x;\n this.previousPara = paragraphWidget.x;\n }\n paragraphWidget.width = area.width;\n paragraphWidget.y = area.y;\n }\n return paragraphWidget;\n };\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n Layout.prototype.isFirstElementWithPageBreak = function (paragraphWidget) {\n var isPageBreak = false;\n if (this.viewer instanceof PageLayoutViewer) {\n var lineWidget = paragraphWidget.childWidgets[0];\n if (lineWidget) {\n var element = lineWidget.children[0];\n while (element) {\n if (element instanceof BookmarkElementBox && element.name.indexOf('_') >= 0) {\n element = element.nextElement;\n continue;\n }\n if (element instanceof TextElementBox && element.text === '\\f') {\n isPageBreak = true;\n }\n break;\n }\n }\n }\n return isPageBreak;\n };\n /**\n * Layouts specified paragraph.\n *\n * @private\n * @param footnote\n */\n Layout.prototype.layoutfootNote = function (footnote) {\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var clientArea = this.viewer.clientArea.clone();\n if (footnote.footNoteType === 'Footnote') {\n this.viewer.updateFootnoteClientArea(footnote.sectionFormat, footnote);\n }\n footnote.height = 0;\n var block = void 0;\n var height = 0;\n this.isRelayoutFootnote = false;\n var index = 0;\n // this.isfoot = true;\n /* eslint-disable-next-line max-len */\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n if (i === 0) {\n var newPara = new ParagraphWidget();\n newPara.characterFormat = new WCharacterFormat();\n newPara.paragraphFormat = new WParagraphFormat();\n newPara.index = 0;\n var lineWidget = new LineWidget(newPara);\n newPara.childWidgets.push(lineWidget);\n // let body: BlockContainer= new BodyWidget();\n // body.childWidgets.push(newParagraph);\n // footnote.bodyWidgets.push(body);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newPara.characterFormat).Height;\n footnote.height += height;\n footnote.y = this.viewer.clientActiveArea.y;\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + height);\n footnote.margin = new Margin(0, height, 0, 0);\n }\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n block = footnote.bodyWidgets[i].childWidgets[j];\n block.index = index;\n index++;\n block.containerWidget = footnote.bodyWidgets[i];\n block.containerWidget.page = footnote.page;\n block.containerWidget.containerWidget = footnote;\n // paragraph.index = i > 1 ? i - 1 : 0;\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true, true);\n this.isRelayoutFootnote = true;\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.layoutBlock(block, 0);\n if (footnote.footNoteType === 'Footnote') {\n footnote.height += block.height;\n }\n this.viewer.updateClientAreaForBlock(block, false);\n }\n }\n if (footnote.footNoteType === 'Footnote') {\n this.shiftChildWidgetInFootnote(footnote);\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n if (!this.islayoutFootnote) {\n if (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height > footnote.y) {\n this.viewer.clientActiveArea.height -= footnote.height;\n var sub = (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - footnote.y);\n this.viewer.clientActiveArea.height -= sub;\n }\n }\n }\n return footnote;\n };\n Layout.prototype.shiftChildWidgetInFootnote = function (footnote) {\n var page = footnote.page;\n var yPosition = footnote.y - footnote.height;\n if (page.bodyWidgets[0].childWidgets.length === 1 && page.bodyWidgets[0].firstChild) {\n var startY = page.bodyWidgets[0].firstChild.y;\n var bodyWidgetHeight = this.getBodyWidgetHeight(page.bodyWidgets[0]);\n if (yPosition < startY + bodyWidgetHeight) {\n yPosition = startY + bodyWidgetHeight;\n }\n }\n footnote.y = yPosition;\n yPosition += footnote.margin.top;\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnote.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.y = yPosition;\n yPosition += childWidget.height;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, yPosition - childWidget.y);\n yPosition += childWidget.height;\n }\n }\n }\n };\n Layout.prototype.getBodyWidgetHeight = function (bodyWidget) {\n var height = 0;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n height += bodyWidget.childWidgets[i].height;\n }\n return height;\n };\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n var isListLayout = true;\n var isFirstElmIsparagraph = this.isFirstElementWithPageBreak(paragraph);\n if (!isFirstElmIsparagraph) {\n this.layoutListItems(paragraph);\n isListLayout = false;\n }\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n if (!this.isRelayoutOverlap && !(paragraph.containerWidget instanceof TextFrame)) {\n this.layoutFloatElements(paragraph);\n }\n while (line instanceof LineWidget) {\n if (paragraph !== line.paragraph && line.indexInOwner === 0 && isListLayout) {\n this.layoutListItems(line.paragraph);\n }\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line.marginTop = 0;\n // if (!this.isInitialLoad && !this.isBidiReLayout && this.isContainsRtl(line)) {\n // this.reArrangeElementsForRtl(line, paragraph.paragraphFormat.bidi);\n // }\n line = this.layoutLine(line, 0);\n paragraph = line.paragraph;\n line = line.nextLine;\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n paragraph.isLayouted = true;\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.layoutFloatElements = function (paragraph) {\n var _this = this;\n paragraph.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeBase) {\n if (!_this.isRelayoutOverlap) {\n _this.layoutShape(shape);\n }\n }\n });\n };\n Layout.prototype.layoutShape = function (element) {\n if (element.textWrappingStyle !== 'Inline') {\n var position = this.getFloatingItemPoints(element);\n element.x = position.x;\n element.y = position.y;\n var bodyWidget = element.paragraph.bodyWidget;\n if (bodyWidget.floatingElements.indexOf(element) === -1) {\n bodyWidget.floatingElements.push(element);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n if (element.paragraph.floatingElements.indexOf(element) === -1) {\n element.paragraph.floatingElements.push(element);\n }\n }\n else {\n if (element.width === 0 && element.widthScale !== 0) {\n var containerWidth = HelperMethods.convertPointToPixel(element.line.paragraph.getContainerWidth());\n element.width = (containerWidth / 100) * element.widthScale;\n }\n }\n var clientArea = this.viewer.clientArea;\n var clientActiveArea = this.viewer.clientActiveArea;\n if (element instanceof ShapeElementBox) {\n var blocks = element.textFrame.childWidgets;\n this.viewer.updateClientAreaForTextBoxShape(element, true);\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n this.viewer.updateClientAreaForBlock(block, false);\n }\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.paragraph.childWidgets.splice(nextLine.paragraph.childWidgets.indexOf(nextLine), 1);\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n var isNotEmptyField = true;\n if (element instanceof FieldElementBox && line.children[line.children.length - 1] instanceof FieldElementBox) {\n isNotEmptyField = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i].fieldType == 2 && line.children[i].nextElement != undefined && !(line.children[i].nextElement instanceof FieldElementBox)) {\n isNotEmptyField = true;\n break;\n }\n }\n }\n this.clearLineMeasures();\n line.marginTop = 0;\n while (element instanceof ElementBox) {\n element.padding.left = 0;\n if (!isNotEmptyField) {\n this.layoutElement(element, paragraph, true);\n isNotEmptyField = true;\n }\n else {\n this.layoutElement(element, paragraph);\n }\n line = element.line;\n if (element instanceof TextElementBox) {\n var textElement = element;\n if (!isNullOrUndefined(textElement.errorCollection) && textElement.errorCollection.length > 0) {\n textElement.ischangeDetected = true;\n }\n }\n if (!this.isRTLLayout) {\n if (this.hasFloatingElement) {\n this.hasFloatingElement = false;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n if (lineIndex > 0 && paragraph.bodyWidget.floatingElements.length > 0 && element instanceof TextElementBox && !(paragraph.containerWidget instanceof TableCellWidget)) {\n element = paragraph.childWidgets[lineIndex].children[0];\n }\n }\n else {\n if (this.is2013Justification && !isNullOrUndefined(this.nextElementToLayout)) {\n element = this.nextElementToLayout;\n }\n else {\n element = element.nextElement;\n if (element instanceof TextElementBox && element.text.indexOf(\" \") == 0 && element.text.length > 2) {\n if (isNullOrUndefined(element.nextElement) && element.text.trim().length > 0) {\n element.text = element.text.substring(1, element.text.length);\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n var textElement = new TextElementBox();\n textElement.text = \" \";\n textElement.line = element.line;\n element.line.children.splice(elementIndex, 0, textElement);\n element.line.children.splice(elementIndex + 1, 0, element);\n element = textElement;\n }\n }\n }\n this.nextElementToLayout = undefined;\n }\n }\n else {\n element = undefined;\n this.isRTLLayout = false;\n }\n }\n return line;\n };\n /* eslint-disable */\n Layout.prototype.layoutElement = function (element, paragraph, isEmptyField) {\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(element) === -1) {\n this.documentHelper.fields.push(element);\n }\n if (!isNullOrUndefined(element.formFieldData) &&\n this.documentHelper.formFields.indexOf(element) === -1) {\n this.documentHelper.formFields.push(element);\n }\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (element.fieldType !== 2 && isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (element.fieldType !== 2 && isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && !isNullOrUndefined(line.nextLine) &&\n this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n else if (isEmptyField) {\n var textHelper = this.documentHelper.textHelper.getHeight(paragraph.characterFormat);\n element.height = textHelper.Height;\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox ||\n element instanceof EditRangeEndElementBox || element instanceof EditRangeStartElementBox\n || element instanceof ContentControl ||\n (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (element instanceof BookmarkElementBox) {\n if (element.bookmarkType === 0 && !this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.add(element.name, element);\n }\n else if (element.bookmarkType === 1 && this.documentHelper.bookmarks.containsKey(element.name)) {\n var bookmrkElement = this.documentHelper.bookmarks.get(element.name);\n if (isNullOrUndefined(bookmrkElement.reference) || isNullOrUndefined(bookmrkElement.reference.paragraph.bodyWidget)) {\n bookmrkElement.reference = element;\n element.reference = bookmrkElement;\n }\n }\n else if (element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n if (isNullOrUndefined(element.reference)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n }\n }\n if (element instanceof ContentControl && this.documentHelper.contentControlCollection.indexOf(element) === -1) {\n if (element.type === 0) {\n this.documentHelper.contentControlCollection.push(element);\n }\n else if (element.type === 1) {\n var endPage = element.paragraph.bodyWidget.page;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var cCStart = this.documentHelper.contentControlCollection[i];\n var isInHeaderFooter = cCStart.line.paragraph.isInHeaderFooter;\n // Link content control present in same header.\n if (isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties\n && endPage === cCStart.line.paragraph.bodyWidget.page) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n else if (!isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n }\n }\n }\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n if (this.hasValidElement(line.paragraph) && !paragraph.isContainsShapeAlone()) {\n this.moveToNextLine(line);\n }\n else if (!this.isInitialLoad && !this.hasValidElement(line.paragraph) && line.paragraph.paragraphFormat.bidi && line.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.moveToNextLine(line);\n }\n else {\n this.layoutEmptyLineWidget(line.paragraph, false, line, false);\n }\n }\n return;\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox && !this.isTocField(element.fieldBegin)) {\n text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof FootnoteElementBox) {\n text = this.startAt(element, text);\n if (text !== '') {\n element.text = text;\n }\n }\n else if (element instanceof TextElementBox) {\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n //TODO: Need to update revision\n // if (element.text.length > 1 && element.line.paragraph.bidi) {\n // let splittedText: string[] = this.splitTextByConsecutiveLtrAndRtl(element);\n // this.updateSplittedText(element, splittedText);\n // }\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n // if (this.isRelayout) {\n width = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n /*} else {\n width = element.trimEndWidth;\n }*/\n if (element.text === '\\t') {\n width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n element.width = width;\n }\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(element instanceof ShapeElementBox) && !(paragraph.containerWidget instanceof TextFrame)) {\n this.adjustPosition(element, element.line.paragraph.bodyWidget);\n }\n if (this.viewer instanceof PageLayoutViewer &&\n ((element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') || !(element instanceof ShapeElementBox))\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n if ((element instanceof TextElementBox && element.text !== '\\f') || !(element instanceof TextElementBox)) {\n this.moveToNextPage(this.viewer, line);\n }\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') {\n this.layoutShape(element);\n }\n // tslint:disable-next-line:max-line-length\n if (element instanceof FootnoteElementBox && (!element.isLayout || this.isLayoutWhole) && this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutFootEndNoteElement(element);\n }\n if (element instanceof FootnoteElementBox) {\n if (this.isfootMove) {\n this.moveToNextPage(this.viewer, element.line);\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n this.isfootMove = false;\n }\n if (paragraph.paragraphFormat.keepWithNext && paragraph.paragraphFormat.keepLinesTogether && !(!element.isLayout || this.isLayoutWhole)) {\n if (paragraph.bodyWidget.page.footnoteWidget.y !== 0 && paragraph.bodyWidget.page.footnoteWidget.y < this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height) {\n var findDiff = this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - paragraph.bodyWidget.page.footnoteWidget.y;\n this.viewer.clientActiveArea.height -= findDiff;\n }\n }\n }\n if (parseFloat(width.toFixed(4)) <= parseFloat(this.viewer.clientActiveArea.width.toFixed(4)) || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n // Added the condition to check While the tab element width is greater then clientActiveArea width and while it was first element of line should not move to next line\n if (element.indexInOwner !== 0 && element instanceof TabElementBox) {\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element) - 1);\n }\n this.moveToNextLine(currentLine);\n this.nextElementToLayout = element;\n if (currentLine.paragraph.bodyWidget.floatingElements.length > 0) {\n this.hasFloatingElement = true;\n return;\n }\n else {\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, element.line, element);\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0\n && !element.line.isLastLine()) {\n this.moveElementFromNextLine(element.line);\n }\n }\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n //Added the condition to skip line split while layouting dropDownFormField \n if (!(element.previousElement instanceof FieldElementBox && element.previousElement.fieldType == 2\n && !isNullOrUndefined(element.previousElement.fieldBeginInternal)\n && element.previousElement.fieldBeginInternal.formFieldData instanceof DropDownFormField)) {\n this.splitTextForClientArea(line, element, element.text, element.width, element.characterFormat);\n }\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.line !== line && !isNullOrUndefined(this.nextElementToLayout) && this.is2013Justification) {\n return;\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n var contentControl;\n if (!isNullOrUndefined(element.nextNode) && element.nextNode instanceof ContentControl) {\n contentControl = element.nextNode;\n }\n if ((text === '\\v' || text === '\\f') && !contentControl) {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v' || text === '\\f') {\n if (this.isXPositionUpdated) {\n this.isXPositionUpdated = false;\n return;\n }\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n else if (text === '\\f' && this.viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(element.nextNode) || element.nextNode instanceof ContentControl) {\n this.moveToNextPage(this.viewer, element.line, true);\n }\n else if (!isNullOrUndefined(element.line.nextLine)) {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n }\n }\n }\n this.isXPositionUpdated = false;\n };\n /**\n * @private\n */\n Layout.prototype.adjustPosition = function (element, bodyWidget) {\n var clientArea = this.viewer.clientActiveArea;\n var previousLeft = this.viewer.clientActiveArea.x;\n var previousTop = this.viewer.clientActiveArea.y;\n var previousWidth = this.viewer.clientActiveArea.width;\n var adjustedRect = this.adjustClientAreaBasedOnTextWrap(element, new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height));\n this.viewer.clientActiveArea.width = adjustedRect.width;\n //Updated element padding for wrapping.\n // if (this.isWrapText) {\n var wrapDiff = this.viewer.clientActiveArea.x - previousLeft;\n // if (element.indexInOwner === 0 && element.line.isFirstLine()) {\n // wrapDiff -= HelperMethods.convertPointToPixel(element.line.paragraph.paragraphFormat.firstLineIndent);\n // }\n element.padding.left = wrapDiff;\n if (previousWidth !== this.viewer.clientActiveArea.width) {\n var wrapPos = new WrapPosition(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.width);\n this.updateWrapPosition(wrapPos);\n }\n //this.isWrapText = false;\n // }\n if (this.viewer.clientActiveArea.width === 0) {\n this.isWrapText = false;\n }\n if (this.isYPositionUpdated) {\n if (element.line.isFirstLine()) {\n element.line.paragraph.y = this.viewer.clientActiveArea.y;\n }\n else {\n element.line.marginTop += (this.viewer.clientActiveArea.y - previousTop);\n }\n if (element.line.paragraph.containerWidget instanceof HeaderFooterWidget) {\n element.line.paragraph.containerWidget.height += (this.viewer.clientActiveArea.y - previousTop);\n }\n this.isYPositionUpdated = false;\n }\n };\n Layout.prototype.updateWrapPosition = function (wrapPos) {\n for (var i = 0; i < this.wrapPosition.length; i++) {\n var previousWrapPos = this.wrapPosition[i];\n if (Math.abs(previousWrapPos.right - wrapPos.right) > 1) {\n continue;\n }\n else {\n return;\n }\n }\n this.wrapPosition.push(wrapPos);\n };\n Layout.prototype.isFirstitemInPage = function (element, yposition) {\n if (!element.line.paragraph.isInHeaderFooter && Math.round(yposition) === this.viewer.clientArea.y) {\n return true;\n }\n return false;\n };\n Layout.prototype.isTextFitBelow = function (rect, top, element) {\n //TODO: After shape implementation.\n return false;\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThrough = function (bodyWidget, elementBox, wrapOwnerIndex, wrapItemIndex, textWrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingEntity, isTextRangeInTextBox, rect, width, height) {\n return (bodyWidget.floatingElements.length > 0\n && wrapOwnerIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex\n && textWrappingStyle !== 'Inline'\n && textWrappingStyle !== 'Behind'\n && textWrappingStyle !== 'TopAndBottom'\n && textWrappingStyle !== 'InFrontOfText'\n && (Math.round((rect.y + height)) > Math.round(textWrappingBounds.y) ||\n this.isTextFitBelow(textWrappingBounds, rect.y + height, floatingEntity))\n && Math.round(rect.y) < Math.round((textWrappingBounds.y + textWrappingBounds.height))\n && !(allowOverlap && (isTextRangeInTextBox || ((elementBox instanceof ImageElementBox)\n && elementBox.textWrappingStyle !== 'Inline' && elementBox.allowOverlap))));\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThroughForTable = function (container, table, wrapIndex, wrapItemIndex, wrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingElemnt, isInTextBox, rect, width, height) {\n return (container.floatingElements.length > 0 && wrapIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex && wrappingStyle !== 'Inline'\n && wrappingStyle !== 'Behind' && wrappingStyle !== 'TopAndBottom'\n && wrappingStyle !== 'InFrontOfText'\n && ((Math.round(rect.y + height) >= Math.round(textWrappingBounds.y)\n && Math.round(rect.y) < Math.round(textWrappingBounds.bottom))\n //Checks whether the bottom of the table intersects with floating item.\n || Math.round(rect.y + height) <= Math.round(textWrappingBounds.bottom)\n && Math.round(rect.y + height) >= Math.round(textWrappingBounds.y))\n && !(allowOverlap && (isInTextBox)));\n };\n Layout.prototype.isNeedToWrapLeafWidget = function (pargaraph, elementBox) {\n var IsNeedToWrap = true;\n return (pargaraph.bodyWidget.floatingElements.length > 0\n && (IsNeedToWrap || pargaraph.associatedCell)\n && !(elementBox instanceof ImageElementBox));\n };\n Layout.prototype.getMinWidth = function (currTextRange, width, height, rect) {\n var text = currTextRange.text;\n var split = text.split(' ');\n // Gets the minimum width from the text when it contains only empty space.\n if (text !== '' && text.trim() === ''\n && currTextRange && currTextRange.line.paragraph\n && currTextRange.previousNode && currTextRange.nextNode\n && currTextRange.line.paragraph.isEmpty) {\n split = [''];\n }\n // Initialized the text with additional empty string.\n // It avoids the minimum width calculation from next sibling (GetNextTextRangeWidth).\n var minwidth = this.documentHelper.textHelper.measureText(split[0], currTextRange.characterFormat).Width;\n //Need to layout the unicode characters (chinese) character by character.\n // if (DrawingContext.IsUnicodeText(text)) {\n // minwidth = DrawingContext.MeasureTextRange(currTextRange, text[0].ToString()).Width;\n // }\n var nextSibling = this.getNextSibling(currTextRange);\n if (split.length === 1 && nextSibling) {\n var nextSiblingText = nextSibling.text;\n minwidth += this.getNextTextRangeWidth(nextSibling, nextSiblingText, width, height, rect);\n } // Add the minimum character width of that paragraph, if this text range is para mark\n return minwidth;\n };\n Layout.prototype.getNextTextRangeWidth = function (nextSiblingTextRange, nextSiblingText, width, height, rect) {\n var nextsibling = nextSiblingTextRange;\n // if (nextSiblingTextRange instanceof WFootnote)\n // nextsibling = ((nextSiblingTextRange as IWidget).LayoutInfo as LayoutFootnoteInfoImpl).TextRange;\n var sizeNext = new Rect(0, 0, 0, 0);\n var isNextSiblingSizeNeedToBeMeasure = this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextSiblingTextRange, rect, width, height);\n while (isNextSiblingSizeNeedToBeMeasure\n && this.isLeafWidgetNextSiblingIsTextRange(nextsibling)\n && width + sizeNext.width < rect.width) {\n nextsibling = this.getNextSibling(nextsibling);\n if (!this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextsibling, rect, width, height)) {\n break;\n }\n nextSiblingText += nextsibling.text;\n }\n return sizeNext.width;\n };\n Layout.prototype.isLeafWidgetNextSiblingIsTextRange = function (textRange) {\n var nextSiblingTextRange = this.getNextSibling(textRange);\n if (nextSiblingTextRange && nextSiblingTextRange instanceof TextElementBox) {\n return true;\n }\n return false;\n };\n Layout.prototype.isNextSibligSizeNeedToBeMeasure = function (sizeNext, nextSiblingwidget, rect, width, height) {\n var text = null;\n var nextSiblingTextRange = nextSiblingwidget;\n if (nextSiblingTextRange) {\n text = nextSiblingTextRange.text;\n if (text.indexOf(' ') !== -1 || (text.indexOf('-') !== -1 || (text.indexOf('_') !== -1)\n && ((width + sizeNext.width + (this.documentHelper.textHelper.measureText(text.split('-')[0], nextSiblingTextRange.characterFormat)).Width) < rect.width))\n || ((nextSiblingTextRange).text === '\\t')) {\n var elementWidth = nextSiblingTextRange.width;\n if (text !== text.split(' ')[0]) {\n elementWidth = this.documentHelper.textHelper.measureText(text.split(' ')[0], nextSiblingTextRange.characterFormat).Width;\n }\n if ((width + sizeNext.width + elementWidth) > rect.width && text.indexOf('-')) {\n if (text !== text.split('-')[0] + '-') {\n elementWidth = this.documentHelper.textHelper.measureText(text.split('-')[0] + '-', nextSiblingTextRange.characterFormat).Width;\n }\n }\n sizeNext.width += elementWidth;\n return false;\n }\n else {\n if (nextSiblingTextRange.text.length > 0) {\n var textInfo = this.documentHelper.textHelper.measureText(nextSiblingTextRange.text, nextSiblingTextRange.characterFormat);\n sizeNext.height += textInfo.Height;\n sizeNext.width += textInfo.Width;\n }\n }\n }\n return true;\n };\n Layout.prototype.isNeedDoIntermediateWrapping = function (remainingClientWidth, textWrappingStyle, rect, width, paragraph, textWrappingBounds, leafWidget, minwidth, minimumWidthRequired) {\n return (((remainingClientWidth > minimumWidthRequired)\n && (((Math.round(rect.width) <= Math.round(minwidth)\n || (rect.width < width && leafWidget.paragraph.isInsideTable))\n && textWrappingStyle !== 'Left' // Skip to update width when the wrap type as left\n && textWrappingStyle !== 'Largest')\n || textWrappingStyle === 'Right' //To layout right side when the wrap type as right\n || (rect.width < remainingClientWidth && textWrappingStyle === 'Largest'))) // Check whether the right side width is greater than the left side when the wrap type as largest\n || ((Math.round(textWrappingBounds.x - paragraph.x + paragraph.leftIndent) < minimumWidthRequired // Check whether the left side of text wrap object is have minimum width to layout or not\n || (leafWidget instanceof TextElementBox && this.isFloatingItemOnLeft(rect, minwidth, textWrappingBounds)))\n && (textWrappingStyle !== 'Left' || remainingClientWidth < minimumWidthRequired)));\n };\n Layout.prototype.isFloatingItemOnLeft = function (rect, minWidth, bounds) {\n return false;\n };\n Layout.prototype.getNextSibling = function (currentElementBox) {\n var nextSibling = currentElementBox.nextNode;\n var isFieldCode = false;\n while (nextSibling) {\n if ((nextSibling instanceof FieldElementBox) || (nextSibling instanceof BookmarkElementBox) || isFieldCode || nextSibling instanceof ListTextElementBox) {\n if (nextSibling instanceof FieldElementBox) {\n if (nextSibling.fieldType === 0) {\n isFieldCode = true;\n }\n else if (nextSibling.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (nextSibling instanceof TextElementBox) {\n break;\n }\n nextSibling = nextSibling.nextNode;\n }\n return nextSibling;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrap = function (elementBox, rect) {\n var ownerPara = elementBox.line.paragraph;\n var bodyWidget = ownerPara.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = this.isFirstitemInPage(elementBox, yposition);\n if (isFirstItem) {\n yValue = yposition;\n }\n isFirstItem = isNullOrUndefined(ownerPara.previousWidget);\n //Update Layout area based on text wrap\n if (this.isNeedToWrapLeafWidget(ownerPara, elementBox)) {\n var clientLayoutArea = layouter.clientArea;\n //Need to handle sorting floating items.\n // Sort based on Y position\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n // Sort based on X position\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingItem = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingItem instanceof ShapeBase) {\n allowOverlap = floatingItem.allowOverlap;\n }\n else {\n allowOverlap = floatingItem.positioning.allowOverlap;\n }\n if (ownerPara.isInsideTable) {\n if (floatingItem instanceof TableWidget && !floatingItem.isInsideTable) {\n continue;\n }\n }\n if (this.isRelayout && !this.isRelayoutOverlap &&\n this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, elementBox.line.paragraph)\n || this.isRelayout && this.isRelayoutOverlap && this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, this.endOverlapWidget)) {\n continue;\n }\n // if (ownerPara.isInsideTable && allowOverlap\n // && (ownerPara.associatedCell.ownerTable.positioning.allowOverlap))\n // {\n // WParagraph ownerParagraph = (m_lcOperator as Layouter).FloatingItems[i].OwnerParagraph;\n // if (!(ownerParagraph !== null\n // && ownerParagraph.IsInCell\n // && ownerPara.GetOwnerEntity() === ownerParagraph.GetOwnerEntity()))\n // {\n // continue;\n // }\n // }\n var xPosition = floatingItem.x;\n var distanceLeft = 0;\n var distanceTop = 0;\n var distanceRight = 0;\n var distanceBottom = 0;\n var width = 0;\n if (floatingItem instanceof ShapeBase) {\n distanceLeft = floatingItem.distanceLeft;\n distanceTop = floatingItem.distanceTop;\n distanceRight = floatingItem.distanceRight;\n distanceBottom = floatingItem.distanceBottom;\n width = floatingItem.width;\n }\n else {\n width = floatingItem.getTableCellWidth();\n distanceLeft = floatingItem.positioning.distanceLeft;\n distanceTop = floatingItem.positioning.distanceTop;\n distanceRight = floatingItem.positioning.distanceRight;\n distanceBottom = floatingItem.positioning.distanceBottom;\n }\n var textWrappingBounds = new Rect(floatingItem.x - distanceLeft, floatingItem.y - distanceTop, width + distanceLeft + distanceRight, floatingItem.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var textWrappingType = floatingItem instanceof TableWidget ? 'Both' : floatingItem.textWrappingType;\n // //Need to skip the wrapping for line break when it is first item of corresponding paragraph and that paragraph contains First line indent as per Word 2010 and its lower version behavior.\n // if (IsLineBreakIntersectOnFloatingItem(leafWidget, textWrappingStyle, textWrappingBounds, rect, size, ownerPara))\n // continue;\n var minimumWidthRequired = 24;\n var bottom = layouter.clientArea.y + floatingItem.height;\n // if (this.isNeedToWrapParaMarkToRightSide(elementBox, ownerPara, textWrappingBounds, bottom, layouter, this.viewer.clientArea, textWrappingType, minimumWidthRequired)) {\n // if (lineBreakPosition !== 0) {\n // this.viewer.clientArea.y = lineBreakPosition;\n // //m_layoutArea.UpdateBoundsBasedOnTextWrap(lineBreakPosition);\n // }\n // this.viewer.clientArea.x += textWrappingBounds.width;\n // //(LeafWidget as IWidget).LayoutInfo.IsLineBreak = false;\n // elementBox.height = 0;\n // elementBox.width = textWrappingBounds.width;\n // return;\n // }\n if (!(clientLayoutArea.x > (textWrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < textWrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThrough(bodyWidget, elementBox, -1, -1, textWrappingStyle, textWrappingBounds, allowOverlap, 1, floatingItem, false, rect, elementBox.width, elementBox.height)) {\n var rightIndent = 0;\n var leftIndent = 0;\n var listLeftIndent = 0;\n var firstLineIndent = HelperMethods.convertPointToPixel(elementBox.paragraph.paragraphFormat.firstLineIndent);\n var paragraphLeftIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.leftIndent);\n var paragarphRightIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.rightIndent);\n firstLineIndent = ((elementBox.indexInOwner === 0 && elementBox.line.isFirstLine()) && firstLineIndent > 0) ? firstLineIndent : 0;\n var currTextRange = elementBox;\n var containerWidget = floatingItem instanceof TableWidget ? floatingItem.containerWidget : floatingItem.line.paragraph.containerWidget;\n var isnewline = false;\n if (elementBox.line.paragraph) {\n //Right indent is considered only if the rect.X greater than the floating item's X position and\n //Text wrapping style should not be left\n if (rect.x >= textWrappingBounds.x && textWrappingType !== 'Left') {\n rightIndent = paragarphRightIndent;\n }\n //Left indent is considered only if the rect.X less than the floating item's X position and\n //Text wrapping style should not be right\n if (rect.x < textWrappingBounds.x && textWrappingType !== 'Right') {\n leftIndent = paragraphLeftIndent;\n }\n var listFormat = ownerPara.paragraphFormat.listFormat;\n var listLevel = this.getListLevel(listFormat.list, listFormat.listLevelNumber);\n if (rect.x === (clientLayoutArea.x + paragraphLeftIndent)\n && listFormat && listFormat.baseStyle\n && listLevel && listLevel.paragraphFormat.leftIndent !== 0) {\n listLeftIndent = paragraphLeftIndent;\n isnewline = true; // to denote the current line is new line of the paragraph\n }\n }\n // if (this.isXPositionUpdated && textWrappingType === 'Both' && this.layoutState === 'Splitted') {\n // rect.width = bodyWidget.width - this.viewer.clientActiveArea.x;\n // rect.x = textWrappingBounds.right;\n // this.viewer.updateClientAreaForTextWrap(rect);\n // return rect;\n // }\n if (textWrappingStyle === 'Square') {\n //If the floating item intersects the Horizontal line shape, then we fit the shape in the remaining area\n if (elementBox instanceof ShapeBase &&\n elementBox.textWrappingStyle === 'Inline') {\n if (textWrappingBounds.x - rect.x > 24) {\n floatingItem.width = textWrappingBounds.x - rect.x;\n }\n else {\n floatingItem.width = floatingItem.width - (textWrappingBounds.right - rect.x) - rightIndent;\n }\n }\n }\n /* Since the Microsoft Word has different behavior to calculate minimum width required to fit a word to a side of Table,\n the minimum width required changes based upon table border value and table alignment.\n And this value even differ for different word version, such that 2013, will have different minimum required value, where all other version shares the same logic to calculate minimum width required */\n var border = 0;\n var isBorderValueZero = false;\n var table = void 0;\n var borderThickness = 0;\n var tableHorizontalPosition = void 0;\n if (floatingItem instanceof TableWidget) {\n table = floatingItem;\n tableHorizontalPosition = floatingItem.positioning.horizontalAlignment;\n border = this.getMaximumRightCellBorderWidth(floatingItem);\n isBorderValueZero = this.getDefaultBorderSpacingValue(border, isBorderValueZero, tableHorizontalPosition);\n borderThickness = floatingItem.tableFormat.borders.left.lineWidth / 2;\n }\n // Skip to update when the wrap type as left\n if (rect.x + borderThickness >= textWrappingBounds.x && rect.x < textWrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (textWrappingBounds.right - rect.x) - rightIndent;\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (table !== null) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n //checks minimum width\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < elementBox.width && elementBox.text === '\\t')\n || (textWrappingBounds.x < ownerPara.x + paragraphLeftIndent)) // check whether the TextWrap X position is less than the paragraph X position\n {\n //TODO\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0);\n //checks minimum width of the single word\n var minwidth = 0;\n if (currTextRange) {\n minwidth = this.getMinWidth(elementBox, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (textWrappingBounds.x - (ownerPara.x + ownerPara.leftIndent)) > minimumWidthRequired\n && (this.viewer.clientArea.right - textWrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n //layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var isPositionsUpdated = false;\n //Check whether left side of current floating item has enoush place to fit current widget.\n //If it has, need to fit left side of the floating item, instead of moving to bottom.\n // if (layouter.clientArea.x + elementBox.width < floatingItem.x) {\n // //Current item should preserve below to the floating item,which preserved left side of the floating item.\n // //If left side has multiple items or none of items this may fail, need to handle this cases.\n // let tempBounds: Rect = GetIntersectingItemBounds(floatingItem, yposition);\n // if (tempBounds.bottom !== 0 && tempBounds.bottom <= textWrappingBounds.bottom) {\n // rect.x = clientLayoutArea.x;\n // rect.width = clientLayoutArea.width;\n // rect.y = tempBounds.bottom + topMarginValue;\n // rect.height = clientLayoutArea.bottom - tempBounds.bottom;\n // this.isYPositionUpdated = true;\n // isPositionsUpdated = true;\n // }\n // }\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width -= firstLineIndent;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n else {\n // this.isXPositionUpdated = true;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // if (leafWidget != null)\n // tabsInfo = (leafWidget as ILeafWidget).LayoutInfo as TabsLayoutInfo;\n //if (tabsInfo == null) {\n //this.isWrapText = true;\n //this.viewer.updateClientAreaForTextWrap(rect);//\n // if (layouter.FloatingItems[i].FloatingEntity is WTable)\n // layouter.FloatingTableBottom = textWrappingBounds.Bottom;\n //}\n }\n }\n else {\n //Check whether the RightPositionOfTabStopInterSectingFloattingItems have the value or not.\n //if contains value means continue the layouting even x position exceeds the page right position.\n var xposition = rect.x;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0) - firstLineIndent;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n //else\n // this.isXPositionUpdated = true;\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // //Microsoft Word 2013 doesn't split text character by character, when current line has floating item.\n // if (ownerPara != null && ownerPara.Document.Settings.CompatibilityMode == CompatibilityMode.Word2013)\n // layouter.m_canSplitbyCharacter = false;\n this.isWrapText = true;\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else if (textWrappingBounds.x >= rect.x && rect.right > textWrappingBounds.x) {\n rect.width = textWrappingBounds.x - rect.x - rightIndent;\n //Remaining right side width\n var remainingClientWidth = this.viewer.clientArea.right - textWrappingBounds.right;\n remainingClientWidth = remainingClientWidth > 0 ? remainingClientWidth : 0;\n this.isWrapText = true;\n //checks minimum width\n var minwidth = 0;\n if (currTextRange) {\n minwidth = this.getMinWidth(currTextRange, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (table !== null) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n if (this.isNeedDoIntermediateWrapping(remainingClientWidth, textWrappingType, rect, elementBox.width, elementBox.paragraph, textWrappingBounds, elementBox, minwidth, minimumWidthRequired)) {\n var leftMinimumWidthRequired = 24;\n rect.width = remainingClientWidth;\n this.isWrapText = true;\n if (rect.x + minwidth > textWrappingBounds.x || textWrappingType === 'Right' || clientLayoutArea.x > textWrappingBounds.x - leftMinimumWidthRequired) //Update X position when the wrap type as largest or right or the minimum width + rect.X > wrap x position\n {\n rect.x = textWrappingBounds.right;\n // let listFormat: WListFormat = null;\n // let listLevel: WListLevel = null;\n // if (elementBox.line.isFirstLine\n // && (listFormat = ownerPara.GetListFormatValue()) != null\n // && listFormat.CurrentListStyle != null\n // && (listLevel = ownerPara.GetListLevel(listFormat)) != null\n // && listLevel.ParagraphFormat.LeftIndent != 0)\n // {\n // float x = 0;\n // float width = rect.Width;\n // //Updates the paragraph firstline horizontal positions, such as first line indent and listtab value\n // UpdateParaFirstLineHorizontalPositions(paragraphLayoutInfo, ownerPara, ref x, ref width);\n // rect.X += (x + (float)paragraphLayoutInfo.Margins.Left);\n // rect.Width -= (x + (float)paragraphLayoutInfo.Margins.Left);\n // }\n // this.isXPositionUpdated = true;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && layouter.FloatingItems[i].IsDoesNotDenotesRectangle) {\n // UpdateXposition(textWrappingBounds, i, ref rect, size, minwidth);\n // }\n if (rect.width > minwidth || textWrappingType === 'Right') {\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n if ((rect.width < minimumWidthRequired && !(minwidth < remainingClientWidth && ('Tight' === textWrappingStyle)))\n || (rect.width < minwidth && Math.round(rect.right) === Math.round(this.viewer.clientArea.right)\n && textWrappingType === 'Both')) {\n var rect1 = textWrappingBounds;\n if (Math.round(rect.x) === Math.round(bodyWidget.sectionFormat.leftMargin + ownerPara.paragraphFormat.leftIndent)) {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n // Reset the rectangle position when the rectangle right position is equialent to layout area right position\n else if (Math.round(rect.right) >= Math.round(this.viewer.clientArea.right) && textWrappingType === 'Both') {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n // topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n rect.x = this.viewer.clientArea.x + leftIndent;\n this.viewer.updateClientAreaForTextWrap(rect);\n // this.isXPositionUpdated = true;\n this.isYPositionUpdated = true;\n this.isWrapText = false;\n }\n else {\n rect.width = 0;\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n }\n else {\n //While text intersecting with SQUARE type floating item and there is no space\n //available to fit this text in current line then move the text to bottom\n //of the floating item and this behavior is applicable only for Word 2013.\n //Lower versions split the text character by character.\n if ((elementBox.line.isFirstLine() && elementBox.indexInOwner === 0) && textWrappingStyle === 'Square'\n && Math.round(rect.width) <= Math.round(minwidth)\n && ownerPara.containerWidget === containerWidget) {\n rect.x = clientLayoutArea.x;\n rect.y = textWrappingBounds.bottom;\n rect.width = clientLayoutArea.width;\n rect.height -= (textWrappingBounds.bottom - rect.y);\n this.isYPositionUpdated = true;\n }\n else if (Math.round(rect.width) <= Math.round(minwidth) && Math.round(rect.x - leftIndent) !== Math.round(this.viewer.clientArea.x)) {\n rect.width = 0;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n if (textWrappingType !== 'Both') {\n this.isWrapText = false;\n }\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrapForTable = function (table, rect) {\n //let ownerPara: ParagraphWidget = elementBox.line.paragraph;\n if (isNullOrUndefined(table.containerWidget) || isNullOrUndefined(table.bodyWidget)) {\n return rect;\n }\n var bodyWidget = table.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = isNullOrUndefined(table.previousWidget);\n if (isFirstItem) {\n yValue = yposition;\n }\n if (bodyWidget.floatingElements.length > 0) {\n var clientLayoutArea = layouter.clientActiveArea;\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingElement = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingElement instanceof ShapeBase) {\n allowOverlap = floatingElement.allowOverlap;\n }\n else {\n allowOverlap = floatingElement.positioning.allowOverlap;\n }\n if (table.isInsideTable) {\n if (floatingElement instanceof TableWidget && !floatingElement.isInsideTable) {\n continue;\n }\n }\n if (floatingElement instanceof TableWidget && floatingElement.wrapTextAround && floatingElement.positioning.allowOverlap) {\n if (table.wrapTextAround && table.positioning.allowOverlap) {\n continue;\n }\n }\n var tableWidth = table.getTableCellWidth();\n var isShape = floatingElement instanceof ShapeBase;\n var distanceLeft = isShape ? floatingElement.distanceLeft : floatingElement.positioning.distanceLeft;\n var distanceTop = isShape ? floatingElement.distanceTop : floatingElement.positioning.distanceTop;\n var distanceRight = isShape ? floatingElement.distanceRight : floatingElement.positioning.distanceRight;\n var distanceBottom = isShape ? floatingElement.distanceBottom : floatingElement.positioning.distanceBottom;\n var width = isShape ? floatingElement.width : floatingElement.getTableCellWidth();\n var wrappingBounds = new Rect(floatingElement.x - distanceLeft, floatingElement.y - distanceTop, width + distanceLeft + distanceRight, floatingElement.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingElement instanceof TableWidget ? 'Square' : floatingElement.textWrappingStyle;\n var textWrappingType = floatingElement instanceof TableWidget ? 'Both' : floatingElement.textWrappingType;\n var minimumWidthRequired = 24;\n var tableHeight = table.childWidgets.length > 0 ? table.childWidgets[0].rowFormat.height : 0;\n if (!(clientLayoutArea.x > (wrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < wrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThroughForTable(bodyWidget, table, -1, -1, textWrappingStyle, wrappingBounds, allowOverlap, 1, floatingElement, false, rect, tableWidth, tableHeight)) {\n // Skip to update when the wrap type as left\n if (rect.x >= wrappingBounds.x && rect.x < wrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (wrappingBounds.right - rect.x);\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < tableWidth)\n || (wrappingBounds.x < table.x)) // check whether the TextWrap X position is less than the paragraph X position\n {\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n var minwidth = tableWidth;\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (wrappingBounds.x - (table.x)) > minimumWidthRequired\n && (this.viewer.clientArea.right - wrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n var isPositionsUpdated = false;\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var marginTop = 0;\n this.isYPositionUpdated = true;\n rect.height -= (wrappingBounds.bottom + marginTop - rect.y);\n rect.width = this.viewer.clientArea.width;\n rect.y = wrappingBounds.bottom + marginTop;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else {\n var xposition = rect.x;\n rect.x = wrappingBounds.right + table.firstChild.firstChild.leftMargin;\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.startAt = function (element, text) {\n if (element.footnoteType === 'Footnote') {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialFootNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.footNoteNumberFormat, this.documentHelper.footnoteCollection.indexOf(element) + this.startat);\n }\n else {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialEndNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.endnoteNumberFormat, this.documentHelper.endnoteCollection.indexOf(element) + this.startat);\n }\n return text;\n };\n Layout.prototype.layoutFootEndNoteElement = function (element) {\n this.isFootnoteContentChanged = true;\n var footnote;\n var positionchanged = false;\n var footIndex = this.documentHelper.footnoteCollection.indexOf(element);\n var insertIndex = 1;\n this.islayoutFootnote = true;\n var isFitted;\n var clientArea = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientActiveArea = new Rect(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.y, this.viewer.clientActiveArea.width, this.viewer.clientActiveArea.height);\n var bodyWidget = element.paragraph.bodyWidget;\n var isCreated = false;\n var height = 0;\n if (bodyWidget.page.footnoteWidget) {\n for (var j = 0; j < bodyWidget.page.footnoteWidget.bodyWidgets.length; j++) {\n insertIndex = bodyWidget.page.footnoteWidget.bodyWidgets.length;\n var currentIndex = this.documentHelper.footnoteCollection.indexOf((bodyWidget.page.footnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n element.isLayout = true;\n if (element.footnoteType === 'Footnote') {\n if (bodyWidget.page.footnoteWidget && bodyWidget.page.footnoteWidget instanceof FootNoteWidget) {\n footnote = bodyWidget.page.footnoteWidget;\n }\n else {\n isCreated = true;\n footnote = new FootNoteWidget();\n footnote.footNoteType = 'Footnote';\n footnote.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnote.margin = new Margin(0, height, 0, 0);\n }\n this.isFootNoteLayoutStart = true;\n if (isCreated) {\n bodyWidget.page.footnoteWidget = footnote;\n }\n var body = element.bodyWidget;\n this.viewer.updateClientArea(footnote.sectionFormat, footnote.page);\n this.viewer.clientArea.y = clientArea.y;\n this.viewer.clientActiveArea.y = clientActiveArea.y;\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n var block = element.bodyWidget.childWidgets[i];\n //TODO: Ensure this case.\n if (this.isLayoutWhole) {\n block.containerWidget = undefined;\n }\n else {\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = footnote.sectionFormat;\n block.containerWidget.containerWidget = footnote;\n }\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n height += block.height;\n block.y = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n body.height += block.height;\n }\n this.isFootNoteLayoutStart = false;\n isFitted = false;\n if (!element.paragraph.isInsideTable) {\n if (height >= clientActiveArea.height) {\n this.isfootMove = true;\n }\n if (positionchanged) {\n footnote.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n footnote.bodyWidgets.push(body);\n }\n footnote.height += height;\n }\n else {\n this.footnoteHeight += height;\n }\n isFitted = true;\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientActiveArea.height -= height;\n this.viewer.clientArea = clientArea;\n }\n return isFitted;\n };\n Layout.prototype.layoutEndNoteElement = function () {\n var lastpage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var foot = void 0;\n var endNote = void 0;\n var isCreated = void 0;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n foot = this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endNote = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endNote = new FootNoteWidget();\n endNote.footNoteType = 'Endnote';\n endNote.page = bodyWidget.page;\n }\n var body = foot.bodyWidget;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n block.containerWidget = body;\n }\n if (endNote.bodyWidgets.indexOf(body) === -1) {\n endNote.bodyWidgets.push(body);\n body.sectionFormat = endNote.sectionFormat;\n }\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endNote;\n }\n }\n this.layoutfootNote(endNote);\n }\n };\n Layout.prototype.hasValidElement = function (paragraph) {\n var line = paragraph.firstChild;\n if (line && !isNullOrUndefined(this.documentHelper.selection)) {\n var elementBox = line.children[0];\n while (elementBox) {\n if (elementBox instanceof FieldElementBox) {\n elementBox = this.documentHelper.selection.getNextValidElementForField(elementBox);\n if (!isNullOrUndefined(elementBox) && !elementBox.line.paragraph.equals(paragraph)) {\n return false;\n }\n }\n if (elementBox instanceof TextElementBox || elementBox instanceof ImageElementBox) {\n return true;\n }\n if (!isNullOrUndefined(elementBox)) {\n elementBox = elementBox.nextNode;\n }\n }\n }\n return false;\n };\n Layout.prototype.updateFieldText = function (element) {\n var text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && this.isOverlapFloatTable) {\n var table = void 0;\n if (element.line.paragraph.previousRenderedWidget instanceof TableWidget && element.line.paragraph.previousRenderedWidget.wrapTextAround) {\n table = element.line.paragraph.previousRenderedWidget;\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.viewer.clientActiveArea.x += line.paragraph.leftIndent;\n this.isOverlapFloatTable = false;\n }\n if (line !== element.line) {\n this.isRTLLayout = false;\n }\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v', '\\f'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')\n || (character === '\\f' && text !== '\\f')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n Layout.prototype.moveFromNextPage = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n var splittedParagraph = nextLine.paragraph;\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n if (splittedParagraph.childWidgets.length === 0) {\n splittedParagraph.destroy();\n }\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement) {\n if (this.is2013Justification) {\n return false;\n }\n this.clearLineMeasures();\n var line = currentElement.line;\n line.marginTop = 0;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n var paragarph = currentElement.line.paragraph;\n var bodyWidget = paragarph.bodyWidget;\n if (bodyWidget && bodyWidget.floatingElements.length > 0) {\n this.hasFloatingElement = true;\n this.isXPositionUpdated = true;\n return false;\n }\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!isNullOrUndefined(element.formFieldData) && this.isInitialLoad) {\n this.checkAndUpdateFieldData(element);\n }\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n if (this.documentHelper.fieldStacks.indexOf(element) === -1) {\n this.documentHelper.fieldStacks.push(element);\n }\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.documentHelper.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.documentHelper.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n Layout.prototype.checkAndUpdateFieldData = function (fieldBegin) {\n if (fieldBegin.hasFieldEnd && !isNullOrUndefined(fieldBegin.fieldEnd)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var seperator = new FieldElementBox(2);\n seperator.fieldBegin = fieldBegin;\n seperator.fieldEnd = fieldBegin.fieldEnd;\n seperator.line = fieldBegin.line;\n fieldBegin.line.children.splice(fieldBegin.fieldEnd.indexInOwner, 0, seperator);\n fieldBegin.fieldSeparator = seperator;\n fieldBegin.fieldEnd.fieldSeparator = seperator;\n }\n var previousNode = fieldBegin.fieldEnd.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 2) {\n var formFieldData = fieldBegin.formFieldData;\n if (formFieldData instanceof CheckBoxFormField) {\n var checkBoxTextElement = new TextElementBox();\n checkBoxTextElement.line = fieldBegin.line;\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, checkBoxTextElement);\n checkBoxTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n if (formFieldData.sizeType !== 'Auto') {\n checkBoxTextElement.characterFormat.fontSize = formFieldData.size * CHECK_BOX_FACTOR;\n }\n else {\n checkBoxTextElement.characterFormat.fontSize = checkBoxTextElement.characterFormat.fontSize * CHECK_BOX_FACTOR;\n }\n }\n else if (formFieldData instanceof DropDownFormField) {\n var dropDownTextElement = new TextElementBox();\n dropDownTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n dropDownTextElement.line = fieldBegin.line;\n if (formFieldData.dropdownItems.length > 0) {\n dropDownTextElement.text = formFieldData.dropdownItems[formFieldData.selectedIndex];\n }\n else {\n dropDownTextElement.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, dropDownTextElement);\n }\n }\n }\n };\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n var paraFormat = paragraph.paragraphFormat;\n var subWidth = 0;\n var whiteSpaceCount = 0;\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n var borders = paraFormat.borders;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = this.getBeforeSpacing(paragraph);\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n if ((paraFormat.bidi || this.isContainsRtl(lineWidget))) {\n this.shiftElementsForRTLLayouting(lineWidget, paraFormat.bidi);\n }\n var isParagraphStart = lineWidget.isFirstLine();\n var isParagraphEnd = lineWidget.isLastLine();\n var firstLineIndent = 0;\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n var textAlignment = paraFormat.textAlignment;\n if (textAlignment !== 'Left' && this.viewer.textWrap\n && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi))) {\n var getWidthAndSpace = this.getSubWidth(lineWidget, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n }\n }\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(paragraph.containerWidget instanceof TextFrame)) {\n var elementBox = new TextElementBox();\n elementBox.line = lineWidget;\n lineWidget.children.push(elementBox);\n elementBox.text = '¶';\n elementBox.characterFormat = paragraph.characterFormat;\n elementBox.width = this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n this.adjustPosition(elementBox, paragraph.bodyWidget);\n paragraph.x += elementBox.padding.left;\n if (isEmptyLine) {\n this.checkInbetweenShapeOverlap(lineWidget);\n }\n lineWidget.children.splice(elementBox.indexInOwner, 1);\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) &&\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y\n && !(lineWidget.isFirstLine() && isNullOrUndefined(lineWidget.paragraph.previousWidget))) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n //let maxDescent: number = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n //maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n if (borders.top.lineStyle != 'None') {\n if (lineWidget.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (lineWidget.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (i === 0 && element instanceof ListTextElementBox) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') { //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') { //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n }\n }\n lineWidget.margin = new Margin(0, topMargin, 0, bottomMargin);\n lineWidget.height = topMargin + height + bottomMargin;\n if (isNullOrUndefined(paragraph.nextRenderedWidget) && paragraph.isInsideTable\n && paragraph.previousRenderedWidget instanceof TableWidget && paragraph.isEmpty()\n && (!(paragraph.childWidgets[0].children.length > 0\n && paragraph.childWidgets[0].children[0] instanceof ListTextElementBox)\n || paragraph.childWidgets[0].children.length === 0)) {\n //Special behavior for empty cell mark after nested table, preserved with zero height by default.\n //Empty line is displayed in cell for the last empty paragraph (Cell mark - last paragraph in cell) after a nested table.\n lineWidget.height = 0;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n this.wrapPosition = [];\n //Clears the previous line elements from collection.\n };\n Layout.prototype.layoutListItems = function (paragraph) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.documentHelper);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n Layout.prototype.layoutList = function (paragraph, documentHelper) {\n var list = documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n this.viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n var currentListLevel = this.getListLevel(list, paragraph.paragraphFormat.listFormat.listLevelNumber);\n // if (isNullOrUndefined(currentListLevel)) {\n // return;\n // }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n if (this.documentHelper.isIosDevice) {\n var text = element.text;\n text = text === String.fromCharCode(61623) ? String.fromCharCode(9679) : text === String.fromCharCode(61551) + String.fromCharCode(32) ? String.fromCharCode(9675) : text;\n if (text !== element.text) {\n element.text = text;\n }\n }\n documentHelper.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n var tabWidth = this.getTabWidth(paragraph, this.viewer, index, lineWidget, element);\n documentHelper.textHelper.updateTextSize(element, paragraph);\n element.width = tabWidth;\n }\n else {\n element.text = ' ';\n documentHelper.textHelper.updateTextSize(element, paragraph);\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget);\n this.cutClientWidth(element);\n this.hasFloatingElement = false;\n this.isXPositionUpdated = false;\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n this.viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * @private\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? String.fromCharCode(61623) : val === 1 ? String.fromCharCode(61551) + String.fromCharCode(32) : String.fromCharCode(61607);\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === String.fromCharCode(61607) ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n if (this.isWrapText) {\n if (!isNullOrUndefined(splittedElementBox)) {\n lineWidget.children.splice(elementIndex + 1, 0, splittedElementBox);\n splittedElementBox.line = lineWidget;\n }\n return;\n }\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n //Move Next element box to temp collection\n for (var i = elementIndex + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n lineWidget.children.splice(elementIndex + 1, lineWidget.children.length - 1);\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n Layout.prototype.addElementToLine = function (paragraph, element) {\n if (!(element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (this.isWrapText) {\n this.isWrapText = false;\n this.viewer.clientActiveArea.width = this.viewer.clientArea.right - this.viewer.clientActiveArea.x;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n }\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n };\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n //const line: LineWidget = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.documentHelper.textHelper.getWidth(splittedElementBox.text, characterFormat);\n splittedElementBox.trimEndWidth = splittedElementBox.width;\n splittedElementBox.characterRange = elementBox.characterRange;\n //splittedElementBox.revisions = splittedElementBox.revisions;\n elementBox.text = elementBox.text.substr(0, index);\n elementBox.width -= splittedElementBox.width;\n elementBox.trimEndWidth = elementBox.width;\n if (elementBox.revisions.length > 0) {\n this.updateRevisionForSplittedElement(elementBox, splittedElementBox, true);\n splittedElementBox.isMarkedForRevision = elementBox.isMarkedForRevision;\n }\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.splitErrorCollection(elementBox, splittedElementBox);\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n Layout.prototype.splitErrorCollection = function (elementBox, splittedBox) {\n if (elementBox.errorCollection.length > 0) {\n var errorCollection = [];\n var ignoreItems = elementBox.ignoreOnceItems;\n for (var i = 0; i < elementBox.errorCollection.length; i++) {\n errorCollection.push(elementBox.errorCollection[i]);\n }\n for (var j = 0; j < elementBox.errorCollection.length; j++) {\n var index = elementBox.text.indexOf(elementBox.errorCollection[j].text);\n var textElement = elementBox.errorCollection[j];\n if (index < 0) {\n errorCollection.splice(0, 1);\n splittedBox.errorCollection.push(textElement);\n }\n else if (splittedBox.text.indexOf(textElement.text) > 0) {\n splittedBox.errorCollection.push(textElement);\n }\n }\n splittedBox.ignoreOnceItems = ignoreItems;\n elementBox.ignoreOnceItems = [];\n elementBox.errorCollection = errorCollection;\n }\n };\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat);\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.indexInOwner > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.indexInOwner - 1);\n return;\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n splittedElement.errorCollection = textElement.errorCollection;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, characterFormat);\n splittedElement.trimEndWidth = splittedElement.width;\n splittedElement.characterRange = textElement.characterRange;\n textElement.width -= splittedElement.width;\n textElement.trimEndWidth = textElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n this.addElementToLine(paragraph, textElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n Layout.prototype.updateRevisionForSplittedElement = function (item, splittedElement, isSplitted, isJustify) {\n if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (isSplitted) {\n splittedElement.revisions.push(currentRevision);\n var rangeIndex = currentRevision.range.indexOf(item);\n if (rangeIndex < 0) {\n currentRevision.range.push(splittedElement);\n }\n else {\n if (isJustify) {\n currentRevision.range.splice(rangeIndex, 0, splittedElement);\n }\n else {\n currentRevision.range.splice(rangeIndex + 1, 0, splittedElement);\n }\n }\n }\n else {\n currentRevision.range.splice(currentRevision.range.length - 1, 1);\n currentRevision.range.push(splittedElement);\n splittedElement.revisions.push(currentRevision);\n }\n }\n }\n };\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var startIndex = indexOf;\n var paddingLeft = textElement.padding.left;\n textElement.padding.left = 0;\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n //const fontSize: number = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length.\n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, format);\n splittedElement.trimEndWidth = splittedElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n splittedElement.characterRange = textElement.characterRange;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0, true);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n textElement.text = text;\n textElement.width -= splittedElement.width;\n textElement.trimEndWidth = textElement.width;\n if (textElement.width === 0 && lineWidget.children.indexOf(textElement) !== -1) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n lineWidget.children[startIndex].padding.left = paddingLeft;\n };\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var isSplitByCharacter = false;\n var index = -1;\n if (!(text.substring(0, 1) === ' ') && !(text.substring(0, 1) === '-')) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n if (characterUptoWS == 0) {\n characterUptoWS = HelperMethods.trimEnd(text).indexOf('-') + 1;\n if (characterUptoWS > 0) {\n isSplitByCharacter = true;\n }\n }\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat);\n }\n if (this.viewer.clientActiveArea.width < textWidth) {\n //Check and split the previous text elements to next line.\n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element), characterFormat);\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && !isSplitByCharacter && (index > 0 || text.indexOf(' ') !== -1 || text.indexOf('-') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n this.updateRevisionForSplittedElement(span, newSpan, true);\n newSpan.characterFormat.copyFormat(span.characterFormat);\n newSpan.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n this.updateRevisionForSplittedElement(span, newText, true);\n newText.characterFormat.copyFormat(span.characterFormat);\n newText.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /* eslint-disable */\n Layout.prototype.moveToNextLine = function (line) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n var borders = paraFormat.borders;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n var pageIndex = 0;\n var skip2013Justification = false;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n if (paragraph.bodyWidget && !(paragraph.bodyWidget instanceof HeaderFooterWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(paragraph.bodyWidget.page);\n }\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph, pageIndex);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n }\n if ((paraFormat.bidi || this.isContainsRtl(line))) {\n this.shiftElementsForRTLLayouting(line, paraFormat.bidi);\n // this.reArrangeElementsForRtl(line, paraFormat.bidi);\n this.isRTLLayout = true;\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.documentHelper.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if (paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var getWidthAndSpace;\n var textAlignment = paraFormat.textAlignment;\n var totalSpaceCount = 0;\n // calculates the sub width, for text alignments - Center, Right, Justify.\n // if the element is paragraph end and para bidi is true and text alignment is justify\n // we need to calculate subwidth and add it to the left margin of the element.\n if (textAlignment !== 'Left' && this.viewer.textWrap && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi) || (this.is2013Justification && isParagraphEnd))) {\n getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n totalSpaceCount = getWidthAndSpace[0].totalSpaceCount;\n skip2013Justification = line.isEndsWithPageBreak || line.isEndsWithLineBreak || line.paragraph.bidi || this.isRTLLayout;\n }\n if (!skip2013Justification && (getWidthAndSpace && getWidthAndSpace.length === 1) && this.viewer.clientActiveArea.width > 0 &&\n !isParagraphEnd && !this.is2013Justification && textAlignment === 'Justify' && this.documentHelper.compatibilityMode === 'Word2013') {\n var availableWidth = this.viewer.clientActiveArea.width;\n var totalSpaceWidth = this.getTotalSpaceWidth(line);\n var averageWidthOfSpace = totalSpaceWidth / totalSpaceCount;\n var avgAvailableLineWidthForSpace = (availableWidth) / totalSpaceCount;\n var diffFactor = (avgAvailableLineWidthForSpace / averageWidthOfSpace) * 100;\n var widthForAdjustment = 0;\n if (diffFactor <= 33) {\n widthForAdjustment = totalSpaceWidth / 8;\n }\n else {\n widthForAdjustment = totalSpaceWidth / 4;\n }\n this.viewer.clientActiveArea.x -= widthForAdjustment;\n this.viewer.clientActiveArea.width += widthForAdjustment;\n this.is2013Justification = true;\n this.moveElementFromNextLine(line);\n this.nextElementToLayout = line.children[line.children.length - 1];\n return;\n }\n else {\n if (this.is2013Justification && isParagraphEnd) {\n if (subWidth > 0) {\n subWidth = 0;\n whiteSpaceCount = 0;\n }\n }\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n }\n var addSubWidth = false;\n var wrapIndex = 0;\n var lineSpacingType = paraFormat.lineSpacingType;\n var isStarted = false;\n var children = line.renderedElements;\n for (var i = 0; i < children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = children[i];\n if (!isNullOrUndefined(getWidthAndSpace) && isStarted && elementBox.padding.left > 0 &&\n (getWidthAndSpace.length > wrapIndex + 1)) {\n var previousWidth = subWidth;\n if (textAlignment === \"Justify\") {\n previousWidth = subWidth * getWidthAndSpace[wrapIndex].spaceCount;\n }\n else if (textAlignment === \"Center\") {\n previousWidth = subWidth / 2;\n }\n elementBox.padding.left = elementBox.padding.left - previousWidth;\n var subWidthInfo = getWidthAndSpace[++wrapIndex];\n subWidth = subWidthInfo.subWidth;\n whiteSpaceCount = subWidthInfo.spaceCount;\n }\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n isStarted = true;\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === children.length - 1);\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0] && this.documentHelper.pages[pageIndex].sectionIndex === this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n topMargin += 0;\n }\n else {\n topMargin += beforeSpacing;\n }\n if (borders.top.lineStyle != 'None') {\n if (line.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (line.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n bottomMargin += afterSpacing;\n if (i === 0 || (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') &&\n elementBox.previousElement instanceof ShapeBase && elementBox.previousElement.textWrappingStyle !== 'Inline')\n || elementBox.padding.left > 0) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right' || (textAlignment === 'Justify' && paraFormat.bidi && isParagraphEnd)) {\n //Aligns the text as right justified and consider subwidth for bidirectional paragrph with justify.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n }\n if (!isNullOrUndefined(line.paragraph.bodyWidget) && !isNullOrUndefined(line.paragraph.bodyWidget.page.headerWidget)\n && line.paragraph.bodyWidget.page.headerWidget.floatingElements.length > 0\n && line.paragraph === line.paragraph.bodyWidget.childWidgets[0]\n && line.indexInOwner === 0) {\n //To check whether first para in the page overlaps with shape in Header.\n this.checkInbetweenShapeOverlap(line, line.paragraph.bodyWidget.page.headerWidget.floatingElements);\n }\n this.checkInbetweenShapeOverlap(line);\n if (line.isLastLine() && line.indexInOwner === 0 && line.paragraph.paragraphFormat.widowControl) {\n var previousSplitWidget = line.paragraph.previousSplitWidget;\n if (!isNullOrUndefined(previousSplitWidget) && !previousSplitWidget.isEndsWithPageBreak) {\n var startLineIndex = previousSplitWidget.childWidgets.length - 1;\n if (previousSplitWidget.childWidgets.length === 2) {\n startLineIndex = 0;\n }\n this.splitParagraph(previousSplitWidget, startLineIndex, line.paragraph);\n this.updateClientAreaForNextBlock(line, line.paragraph);\n }\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n this.wrapPosition = [];\n };\n //Checks Inbetween Overlap & Updates Line marginTop\n Layout.prototype.checkInbetweenShapeOverlap = function (line, floatingElements) {\n var _this = this;\n if (!(line.paragraph.containerWidget instanceof TextFrame) && line.paragraph.bodyWidget) {\n var overlapShape_1;\n var lineY_1 = this.getLineY(line);\n var isInsideTable_1 = line.paragraph.isInsideTable;\n if (isNullOrUndefined(floatingElements)) {\n floatingElements = line.paragraph.bodyWidget.floatingElements;\n }\n /* eslint:disable */\n floatingElements.sort(function (a, b) { return a.y - b.y; });\n floatingElements.forEach(function (shape) {\n if (isInsideTable_1 && shape.line && !shape.line.paragraph.isInsideTable || isNullOrUndefined(shape.line)) {\n return;\n }\n var lineRect;\n if (shape.textWrappingStyle === 'TopAndBottom' && shape instanceof ImageElementBox) {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.children[0].height);\n }\n else {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.height);\n }\n var shapeRect = new Rect(shape.x, shape.y - shape.distanceTop, shape.width, shape.height);\n if (shape.line && _this.isRelayout && !_this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, line.paragraph)\n || _this.isRelayout && _this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, _this.endOverlapWidget)) {\n return;\n }\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom');\n if (overlapShape_1 && considerShape &&\n overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom + line.height > shape.y - shape.distanceTop &&\n overlapShape_1.y - overlapShape_1.distanceTop < shape.y - shape.distanceTop &&\n shape.y + shape.height + shape.distanceBottom > overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom) {\n overlapShape_1 = shape;\n line.marginTop = ((shape.y + shape.height + shape.distanceBottom) - lineY_1);\n }\n else if (considerShape && !overlapShape_1 && lineRect.isIntersecting(shapeRect)) {\n overlapShape_1 = shape;\n line.marginTop = ((shape.y + shape.height + shape.distanceBottom) - lineY_1);\n }\n });\n if (overlapShape_1) {\n this.viewer.cutFromTop(overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom);\n }\n else if (this.isRelayoutOverlap) {\n line.marginTop = 0;\n }\n }\n };\n Layout.prototype.getLineY = function (line) {\n var para = line.paragraph;\n var lineY = para.y;\n if (!para.isEmpty()) {\n var lineWidget = para.firstChild;\n while (lineWidget !== line) {\n lineY = lineY + lineWidget.height + lineWidget.marginTop;\n lineWidget = lineWidget.nextLine;\n }\n }\n return lineY;\n };\n Layout.prototype.updateLineWidget = function (line) {\n var spaceHeight = 0;\n var spaceBaseline = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element instanceof TextElementBox && element.text.replace(/\\s+/g, '').length === 0) {\n if (spaceHeight < element.height) {\n spaceHeight = element.height;\n spaceBaseline = element.baselineOffset;\n }\n continue;\n }\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var elementHeight = element.height;\n var baselineOffset = element.baselineOffset;\n //We have increased the checkbox form field font size using a constant factor `CHECK_BOX_FACTOR`\n //To match the MS Word check box rendering size.\n //Due to it line height also get increased. So, handled adjusting height while updating line height.\n if (element instanceof TextElementBox && element.isCheckBoxElement) {\n elementHeight = elementHeight / CHECK_BOX_FACTOR;\n baselineOffset = baselineOffset / CHECK_BOX_FACTOR;\n }\n if (this.maxTextHeight < elementHeight) {\n this.maxTextHeight = elementHeight;\n this.maxTextBaseline = baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n }\n }\n if (this.maxTextHeight === 0 && spaceHeight !== 0) {\n if (line.isLastLine() && this.documentHelper.selection) {\n var paragraphMarkSize = this.documentHelper.selection.getParagraphMarkSize(line.paragraph, 0, 0);\n this.maxTextHeight = paragraphMarkSize.height;\n this.maxTextBaseline = spaceBaseline;\n }\n else {\n this.maxTextHeight = spaceHeight;\n this.maxTextBaseline = spaceBaseline;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n };\n Layout.prototype.moveToNextPage = function (viewer, line, isPageBreak) {\n if (this.isFootNoteLayoutStart) {\n return;\n }\n var paragraphWidget = line.paragraph;\n var startBlock;\n var startIndex = 0;\n var keepLinesTogether = false;\n var keepWithNext = false;\n if (paragraphWidget && !(!isNullOrUndefined(paragraphWidget.containerWidget) && !isNullOrUndefined(paragraphWidget.containerWidget.containerWidget) && paragraphWidget.containerWidget.containerWidget instanceof FootNoteWidget)) {\n var index = 0;\n if (paragraphWidget instanceof FootNoteWidget) {\n return;\n }\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index !== 0) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && !isNullOrUndefined(paragraphWidget.previousWidget)) {\n index = 0;\n keepLinesTogether = true;\n }\n else if (index == 1 && !line.previousLine.isEndsWithPageBreak && paragraphWidget.paragraphFormat.widowControl &&\n !isNullOrUndefined(paragraphWidget.previousWidget)) {\n index = 0;\n keepLinesTogether = true;\n }\n }\n if (index > 0 || isPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n if (index === 0 && !paragraphWidget.isEndsWithPageBreak) {\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : blockInfo.node;\n startIndex = startBlock instanceof TableWidget ? 0 : parseInt(blockInfo.position.index, 10);\n paragraphWidget = startBlock;\n index = startIndex;\n keepLinesTogether = false;\n keepWithNext = true;\n }\n }\n }\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(paragraphWidget.bodyWidget) && !isNullOrUndefined(paragraphWidget.bodyWidget.containerWidget) && !(paragraphWidget.bodyWidget.containerWidget instanceof FootNoteWidget) && paragraphWidget.bodyWidget.page.footnoteWidget !== undefined) {\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, true);\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, false);\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget, index === 0);\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0 && paragraphWidget.floatingElements.length == 0) {\n if (line.isLastLine() && isPageBreak) {\n return;\n }\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n nextParagraph.index = paragraphWidget.index;\n var insertIndex = 0;\n for (var i = index; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = paragraphWidget.paragraphFormat;\n nextParagraph.characterFormat = paragraphWidget.characterFormat;\n paragraphWidget.childWidgets.splice(index);\n nextParagraph.containerWidget = nextBody;\n var footWidget = this.getFootNoteWidgetsOf(nextParagraph);\n this.moveFootNotesToPage(footWidget, paragraphWidget.bodyWidget, nextBody);\n paragraphWidget = nextParagraph;\n }\n else if (paragraphWidget instanceof ParagraphWidget && paragraphWidget.floatingElements.length > 0 && index > 0) {\n var body = paragraphWidget.containerWidget;\n body.childWidgets.splice(body.childWidgets.indexOf(paragraphWidget), 1);\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n for (var i = 0; i < paragraphWidget.floatingElements.length; i++) {\n if (body.floatingElements.indexOf(paragraphWidget.floatingElements[i]) != -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(paragraphWidget.floatingElements[i]), 1);\n nextBody.floatingElements.push(paragraphWidget.floatingElements[i]);\n }\n }\n paragraphWidget.containerWidget = nextBody;\n nextBody.height += paragraphWidget.height;\n }\n else if (!isPageBreak) {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n if (paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, paragraphWidget.containerWidget, false);\n }\n }\n if (!isPageBreak) {\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n if (paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, nextBody, true);\n }\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n if (keepLinesTogether || keepWithNext) {\n if (paragraphWidget.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n }\n if (line.paragraph !== paragraphWidget) {\n if (paragraphWidget instanceof TableWidget) {\n this.clearTableWidget(paragraphWidget, true, true, false);\n }\n this.layoutBlock(paragraphWidget, 0);\n viewer.updateClientAreaForBlock(paragraphWidget, false);\n }\n var lastBlock = line.paragraph;\n if (keepWithNext) {\n var nextBlock = paragraphWidget.nextWidget;\n if (!isNullOrUndefined(nextBlock)) {\n do {\n viewer.updateClientAreaForBlock(nextBlock, true);\n if (nextBlock !== lastBlock) {\n if (nextBlock instanceof TableWidget) {\n this.clearTableWidget(nextBlock, true, true, false);\n }\n this.layoutBlock(nextBlock, 0);\n viewer.updateClientAreaForBlock(nextBlock, false);\n }\n else {\n this.viewer.updateClientAreaLocation(nextBlock, this.viewer.clientActiveArea);\n break;\n }\n nextBlock = nextBlock.nextWidget;\n } while (nextBlock);\n }\n }\n this.updateClientAreaForNextBlock(line, lastBlock);\n }\n if (line.isFirstLine() && line.indexInOwner === 0 && !(line.children[0] instanceof ListTextElementBox)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(line.paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n }\n if (paragraphWidget instanceof ParagraphWidget &&\n paragraphWidget.floatingElements.length > 0 && !isPageBreak) {\n for (var m = 0; m < paragraphWidget.floatingElements.length; m++) {\n var shape = paragraphWidget.floatingElements[m];\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n if (shape instanceof ShapeElementBox)\n this.updateChildLocationForCellOrShape(shape.y, shape);\n }\n }\n if (this.isRelayoutOverlap && this.endOverlapWidget) {\n var block_1 = this.endOverlapWidget.previousRenderedWidget;\n var para = line.paragraph;\n this.startOverlapWidget = para;\n line = this.endOverlapWidget.childWidgets[0];\n para = line.paragraph;\n while (para) {\n para.floatingElements.forEach(function (shape) {\n if (block_1.bodyWidget.floatingElements.indexOf(shape) !== -1) {\n block_1.bodyWidget.floatingElements.splice(block_1.bodyWidget.floatingElements.indexOf(shape), 1);\n line.paragraph.bodyWidget.floatingElements.push(shape);\n }\n });\n para = para !== this.endOverlapWidget ? para.nextWidget : undefined;\n }\n this.layoutStartEndBlocks(this.startOverlapWidget, this.endOverlapWidget);\n this.startOverlapWidget = undefined;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - this.endOverlapWidget.y;\n this.viewer.clientActiveArea.y = this.endOverlapWidget.y;\n }\n };\n /**\n * @param {ParagraphWidget} paragarph - the paragraph\n * @param {BodyWidget} body - the bodyWidget\n * @param {boolean} add - to specify add or remove floating elements from body widget.\n */\n Layout.prototype.addRemoveFloatElementsFromBody = function (paragarph, body, add) {\n if (paragarph.floatingElements.length > 0) {\n for (var x = 0; x < paragarph.floatingElements.length; x++) {\n if (add) {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) === -1) {\n body.floatingElements.push(paragarph.floatingElements[x]);\n }\n }\n else {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) !== -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(paragarph.floatingElements[x]), 1);\n }\n }\n }\n }\n };\n /**\n * Align block based on keep with next and keep lines together property.\n */\n Layout.prototype.alignBlockElement = function (block) {\n if (block instanceof ParagraphWidget && block.isEndsWithPageBreak) {\n return { node: undefined, position: { index: '' } };\n }\n var startBlock;\n var startIndex = 0;\n // Check previous block has keep with next property.\n var previousBlock = this.getPreviousBlock(block);\n while (previousBlock) {\n if (previousBlock instanceof ParagraphWidget) {\n if (!previousBlock.paragraphFormat.keepWithNext || previousBlock.isEndsWithPageBreak) {\n break;\n }\n startBlock = previousBlock;\n if (previousBlock.paragraphFormat.keepLinesTogether) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startIndex = 0;\n }\n }\n else {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))\n && previousBlock.childWidgets.length === 1) {\n startBlock = undefined;\n }\n else {\n if (!previousBlock.paragraphFormat.widowControl) {\n startIndex = previousBlock.lastChild.indexInOwner;\n }\n else {\n startIndex = previousBlock.lastChild.indexInOwner - 1;\n if (startIndex === 1 || startIndex < 0) {\n // Move entire block to next page based on widow control.\n startIndex = 0;\n }\n if (startIndex !== 0) {\n break;\n }\n }\n }\n }\n }\n else if (previousBlock instanceof TableRowWidget) {\n var childWidget = previousBlock.childWidgets[0];\n if (childWidget.childWidgets.length > 0) {\n var firstBlock = this.documentHelper.selection.getFirstParagraphInCell(childWidget);\n if (!firstBlock.paragraphFormat.keepWithNext) {\n break;\n }\n if (firstBlock.paragraphFormat.keepWithNext) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startBlock = previousBlock;\n startIndex = startBlock.indexInOwner;\n }\n }\n }\n else {\n break;\n }\n // TODO: Table row splitting case\n }\n previousBlock = this.getPreviousBlock(previousBlock);\n }\n return { node: startBlock, position: { index: startIndex.toString() } };\n };\n Layout.prototype.getPreviousBlock = function (block) {\n var previousBlock;\n if (block instanceof ParagraphWidget) {\n previousBlock = block.previousWidget;\n }\n else if (block instanceof TableRowWidget) {\n previousBlock = block.previousWidget;\n if (isNullOrUndefined(previousBlock)) {\n previousBlock = block.ownerTable.previousWidget;\n }\n }\n if (previousBlock instanceof TableWidget) {\n previousBlock = previousBlock.lastChild;\n }\n return previousBlock;\n };\n Layout.prototype.splitRow = function (startRow) {\n var table = startRow.ownerTable;\n if (startRow.indexInOwner === 0) {\n return table;\n }\n var newTable = this.createTableWidget(table);\n for (var i = startRow.indexInOwner; i < table.childWidgets.length;) {\n var rowWidget = table.childWidgets.splice(i, 1)[0];\n newTable.childWidgets.push(rowWidget);\n rowWidget.containerWidget = newTable;\n table.height -= rowWidget.height;\n newTable.height += rowWidget.height;\n }\n table.containerWidget.childWidgets.splice(table.indexInOwner + 1, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n return newTable;\n };\n Layout.prototype.splitParagraph = function (paragarph, index, nextParagraph) {\n if (index === 0 && isNullOrUndefined(nextParagraph)) {\n return paragarph;\n }\n var isMoveCurrentBlock = false;\n if (isNullOrUndefined(nextParagraph)) {\n nextParagraph = new ParagraphWidget();\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner + 1, 0, nextParagraph);\n nextParagraph.paragraphFormat = paragarph.paragraphFormat;\n nextParagraph.characterFormat = paragarph.characterFormat;\n nextParagraph.index = paragarph.index;\n }\n else if (index === 0) {\n isMoveCurrentBlock = true;\n var temp = paragarph;\n paragarph = nextParagraph;\n nextParagraph = temp;\n }\n var insertIndex = 0;\n for (var i = index; i < paragarph.childWidgets.length; i++) {\n var lineWidget = paragarph.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n if (isMoveCurrentBlock) {\n nextParagraph.childWidgets.push(lineWidget);\n }\n else {\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n }\n nextParagraph.height += lineWidget.height;\n paragarph.height -= lineWidget.height;\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n if (isMoveCurrentBlock) {\n nextParagraph.containerWidget.childWidgets.splice(nextParagraph.indexInOwner, 1);\n nextParagraph.y = paragarph.y;\n nextParagraph.x = paragarph.x;\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.unshift(nextParagraph);\n }\n else {\n paragarph.childWidgets.splice(index);\n }\n if (paragarph.childWidgets.length === 0 || isMoveCurrentBlock) {\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner, 1);\n }\n return nextParagraph;\n };\n Layout.prototype.updateClientPositionForBlock = function (block, currentBlock) {\n var startBlock = (block instanceof TableRowWidget) ? block.ownerTable : block;\n var isClientAreaUpdated = false;\n do {\n this.viewer.updateClientAreaForBlock(startBlock, true);\n if (startBlock instanceof ParagraphWidget) {\n if (currentBlock instanceof ParagraphWidget && currentBlock.equals(startBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addParagraphWidget(this.viewer.clientActiveArea, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n else if (startBlock instanceof TableWidget) {\n this.addTableWidget(this.viewer.clientActiveArea, [startBlock]);\n var nextRow = startBlock.firstChild;\n if (currentBlock instanceof TableRowWidget && startBlock.equals(currentBlock.ownerTable) && !isNullOrUndefined(nextRow)) {\n do {\n if (nextRow.equals(currentBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addTableRowWidget(this.viewer.clientActiveArea, [nextRow]);\n this.updateChildLocationForRow(this.viewer.clientActiveArea.y, nextRow);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + nextRow.height);\n startBlock.height += nextRow.height;\n nextRow = nextRow.nextWidget;\n } while (nextRow);\n }\n else {\n this.updateChildLocationForTable(startBlock.y, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n }\n startBlock = startBlock.nextWidget;\n } while (startBlock && !isClientAreaUpdated);\n };\n Layout.prototype.updateClientAreaForNextBlock = function (line, paragraphWidget) {\n for (var m = 0; m < paragraphWidget.childWidgets.length; m++) {\n var child = paragraphWidget.childWidgets[m];\n if (line === child) {\n break;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + child.height);\n }\n };\n Layout.prototype.layoutStartEndBlocks = function (startBlock, endBlock) {\n var block = startBlock;\n this.isOverlapFloatTable = true;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - startBlock.y;\n this.viewer.clientActiveArea.y = startBlock.y;\n var startParagaraph;\n if (startBlock instanceof TableWidget) {\n startParagaraph = this.documentHelper.selection.getFirstParagraphInFirstCell(startBlock);\n }\n else {\n startParagaraph = startBlock;\n }\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(startParagaraph);\n }\n while (block) {\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.layoutParagraph(block, 0);\n }\n else {\n this.clearTableWidget(block, true, true, true);\n this.layoutTable(block, 0);\n }\n this.viewer.updateClientAreaForBlock(block, false);\n block = block !== endBlock ? block.nextWidget : undefined;\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element.width > 0 && (element instanceof TextElementBox || element instanceof ListTextElementBox)) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n if (!paragraphWidget.isEndsWithPageBreak || viewer instanceof WebLayoutViewer) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (this.isRelayoutFootnote && paragraphWidget.bodyWidget instanceof FootNoteWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n //this.isRelayoutFootnote = false;\n this.shiftFootnoteChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n if (viewer instanceof WebLayoutViewer && paragraphWidget.containerWidget instanceof BodyWidget) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n };\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_1;\n if (widget.y + widget.height > height) {\n top_1 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_1 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_1)) {\n top_1 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_1, widget);\n viewer.clientActiveArea.y += top_1;\n }\n }\n };\n Layout.prototype.shiftFootnoteChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var bottomMargin = widget.page.bodyWidgets[0].sectionFormat.bottomMargin;\n var height = HelperMethods.convertPointToPixel(pageHeight - bottomMargin);\n var top;\n if (widget.y + widget.height > height) {\n top = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top)) {\n top = height - (widget.y + widget.height);\n this.shiftChildLocation(top, widget);\n viewer.clientActiveArea.y += top;\n }\n };\n Layout.prototype.checkPreviousElement = function (line, index, characterFormat) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox && textElement.width > 0) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && (text[text.length - 1] === ' ' || text[text.length - 1] === '-')) {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t') {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.characterRange = textElement.characterRange;\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index_1 > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n textElement.text = text.substr(0, index_1);\n this.documentHelper.textHelper.getTextSize(splittedElement, characterFormat);\n textElement.width -= splittedElement.width;\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox || textElement instanceof FieldElementBox\n // to skip field code\n || textElement instanceof TextElementBox && textElement.width === 0)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n var is2013Justification = paragraph.paragraphFormat.textAlignment === 'Justify' &&\n this.documentHelper.compatibilityMode === 'Word2013';\n if (!is2013Justification) {\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n }\n return isSplitByWord;\n };\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = line.children.length - 1; i > 0; i--) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n }\n else {\n break;\n }\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearInvalidList = function (list) {\n if (list) {\n if (list.abstractListId === -1 && this.documentHelper.abstractLists.indexOf(list.abstractList) !== -1) {\n this.documentHelper.abstractLists.splice(this.documentHelper.abstractLists.indexOf(list.abstractList), 1);\n }\n if (list.listId === -1 && this.documentHelper.lists.indexOf(list) !== -1) {\n this.documentHelper.lists.splice(this.documentHelper.lists.indexOf(list), 1);\n }\n }\n };\n Layout.prototype.getListNumber = function (listFormat, isAutoList) {\n var list = this.documentHelper.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n if (!isNullOrUndefined(levelOverride) && this.documentHelper.renderedLevelOverrides.indexOf(levelOverride) === -1 && isNullOrUndefined(levelOverride.overrideListLevel)) {\n //Add List Override style\n this.documentHelper.renderedLevelOverrides.push(levelOverride);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (this.documentHelper.renderedLists.containsKey(abstractList)) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(levelNumber)) {\n levels.remove(levelNumber);\n this.ClearSubListLevelValues(list, abstractList, levelNumber);\n }\n }\n }\n if (isNullOrUndefined(isAutoList)) {\n this.updateListValues(list, levelNumber);\n }\n return this.getListText(list, levelNumber, listLevel);\n };\n Layout.prototype.ClearSubListLevelValues = function (list, abstractList, levelNumber) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n var levelNumberTemp = levelNumber + 1;\n while (levelNumberTemp < abstractList.levels.length) {\n var listLevel = this.getListLevel(list, levelNumberTemp);\n if (levels.containsKey(levelNumberTemp) && listLevel.restartLevel > levelNumber) {\n levels.remove(levelNumberTemp);\n }\n levelNumberTemp++;\n }\n };\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (!this.documentHelper.renderedLists.containsKey(abstractList)) {\n var startVal = new Dictionary();\n this.documentHelper.renderedLists.add(abstractList, startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.documentHelper.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && listLevel.restartLevel > listLevelNumber) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n if (this.documentHelper.renderedLists.containsKey(this.documentHelper.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.documentHelper.renderedLists.get(this.documentHelper.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n var listLevel = this.getListLevel(listAdv, levelNumber);\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber)));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n Layout.prototype.getListTextListLevel = function (listLevel, listValue) {\n switch (listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n return (listValue).toString();\n case 'Ordinal':\n return (listValue).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n Layout.prototype.getFootEndNote = function (numberFormat, value) {\n switch (numberFormat) {\n case 'UpperCaseRoman':\n return this.getAsRoman(value).toUpperCase();\n case 'LowerCaseRoman':\n return this.getAsRoman(value).toLowerCase();\n case 'UpperCaseLetter':\n return this.getAsLetter(value).toUpperCase();\n case 'LowerCaseLetter':\n return this.getAsLetter(value).toLowerCase();\n default:\n return (value).toString();\n }\n };\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined(((levelOverrideAdv = list.levelOverrides[listLevelNumber])))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fPosition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n var isList = false;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat)) {\n var listFormat = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat;\n if (paragraph.paragraphFormat.leftIndent !== listFormat.leftIndent) {\n isList = true;\n }\n }\n var clientWidth = 0;\n var clientActiveX = viewer.clientActiveArea.x;\n var firstLineIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent);\n if (!isNullOrUndefined(element) && lineWidget.isFirstLine()) {\n clientWidth = this.viewer.clientArea.x + firstLineIndent;\n if (isList) {\n clientActiveX = clientActiveX + firstLineIndent;\n }\n }\n else {\n clientWidth = this.viewer.clientArea.x;\n }\n if (clientActiveX < clientWidth) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n if (lineWidget.isFirstLine()\n && leftIndent > 0 && firstLineIndent < 0) {\n if ((viewer.clientArea.x - viewer.clientActiveArea.x) > 0) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n else if (tabs.length === 0 && paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listLevel) {\n tabs = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat.tabs;\n }\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n var defaultTabWidth = HelperMethods.convertPointToPixel(this.documentHelper.defaultTabWidth);\n if (tabs.length === 0 && (position > 0 && defaultTabWidth > Math.round(position) && isList ||\n defaultTabWidth === this.defaultTabWidthPixel && defaultTabWidth > Math.round(position))) {\n return defaultTabWidth - position;\n }\n else {\n var breaked = false;\n if (tabs.length > 0) {\n for (var i = tabs.length - 1; i > -1; i--) {\n var tabStop = tabs[i];\n var tabPosition = HelperMethods.convertPointToPixel(tabStop.position);\n if (!(parseFloat(tabPosition.toFixed(2)) > parseFloat(position.toFixed(2)))) {\n if (i > 0 && (HelperMethods.convertPointToPixel(tabs[i - 1].position) > parseFloat(position.toFixed(2)))) {\n continue;\n }\n if (i != tabs.length - 1) {\n var tabInfo = this.getJustificationTabWidth(tabs[i + 1], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabInfo.defaultTabWidth;\n fPosition = tabInfo.fPosition;\n position = tabInfo.position;\n isCustomTab = true;\n }\n breaked = true;\n break;\n }\n }\n if (!breaked) {\n var tabJustification = this.getJustificationTabWidth(tabs[0], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabJustification.defaultTabWidth;\n fPosition = tabJustification.fPosition;\n position = tabJustification.position;\n isCustomTab = true;\n }\n }\n if (!isCustomTab) {\n var diff = parseFloat(((position * 100) % (defaultTabWidth * 100) / 100).toFixed(2));\n var cnt = (position - diff) / defaultTabWidth;\n fPosition = (cnt + 1) * defaultTabWidth;\n }\n if (parseFloat(fPosition.toFixed(1)) === parseFloat(position.toFixed(1))) {\n return defaultTabWidth;\n }\n return (fPosition - position) > 0 ? fPosition - position : defaultTabWidth;\n }\n };\n Layout.prototype.getJustificationTabWidth = function (tab, element, lineWidget, paragraph, defaultTabWidth, position, fPosition) {\n var elementWidth = element ? this.documentHelper.textHelper.getTextSize(element, element.characterFormat) : 0;\n if (tab.tabJustification === 'Left' || tab.tabJustification === 'List') {\n fPosition = HelperMethods.convertPointToPixel(tab.position);\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n else {\n var tabWidth = HelperMethods.convertPointToPixel(tab.position) - position;\n var width = this.getRightTabWidth(element.indexInOwner + 1, lineWidget, paragraph);\n if (width < tabWidth && tab.tabJustification != 'Decimal') {\n if (tab.tabJustification === 'Right') {\n defaultTabWidth = tabWidth - width;\n var rightIndent = HelperMethods.convertPointToPixel(paragraph.rightIndent);\n var areaWidth = this.viewer.clientActiveArea.width + rightIndent - defaultTabWidth;\n this.viewer.clientActiveArea.width += rightIndent;\n if (areaWidth < 0) {\n defaultTabWidth += areaWidth - width;\n }\n else if (width > areaWidth) {\n defaultTabWidth -= width - areaWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth - width / 2;\n }\n }\n else if (tab.tabJustification === 'Center' && (width / 2) < tabWidth) {\n defaultTabWidth = tabWidth - width / 2;\n }\n else if (tab.tabJustification === 'Decimal') {\n if (!isNullOrUndefined(element.nextElement) && element.nextElement instanceof TextElementBox) {\n var nextElement = element.nextElement;\n if (nextElement.text.indexOf(\".\") != -1) {\n var index = nextElement.text.indexOf(\".\");\n var text = nextElement.text.substring(0, index);\n var textWidth = this.documentHelper.textHelper.getWidth(text, nextElement.characterFormat);\n defaultTabWidth = tabWidth - textWidth;\n }\n else if (width < tabWidth) {\n defaultTabWidth = tabWidth - width;\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tab.tabJustification === 'Right' ? 0 : elementWidth;\n }\n fPosition = position;\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n return {\n defaultTabWidth: defaultTabWidth,\n fPosition: fPosition,\n position: position\n };\n };\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n var elementBox = lineWidget.children[index];\n while (elementBox) {\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n if (elementBox instanceof FieldTextElementBox && !this.isTocField(elementBox.fieldBegin)) {\n var text = this.documentHelper.getFieldResult(elementBox.fieldBegin, elementBox.paragraph.bodyWidget.page);\n if (text !== '') {\n elementBox.text = text;\n }\n }\n if (elementBox instanceof TextElementBox) {\n this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n elementBox = elementBox.nextNode;\n }\n return width;\n };\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n return i;\n }\n }\n return 0;\n };\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n var trimmedSpaceWidth = 0;\n if (this.wrapPosition.length > 0) {\n var subWidths = this.getSubWidthBasedOnTextWrap(lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd);\n if (subWidths.length > 0) {\n return subWidths;\n }\n }\n var renderElementBox = lineWidget.renderedElements;\n for (var i = renderElementBox.length - 1; i >= 0; i--) {\n var element = renderElementBox[i];\n if (element.width > 0 && element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n var widthExcludeSpace = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat);\n width += widthExcludeSpace;\n // Trimmed space width can be found by subtracting the actual width and width exclude end space.\n trimmedSpaceWidth += element.width - widthExcludeSpace;\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n else {\n ////Add the width of the textelement which contains space alone and present at end of the line.\n trimmedSpaceWidth += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n else {\n width = width;\n }\n }\n var totalSpaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n if ((subWidth <= 0 && !this.is2013Justification) || (spaceCount === 0 && justify && !lineWidget.paragraph.paragraphFormat.bidi)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0 || (isParagraphEnd && this.is2013Justification && spaceCount > 0)) {\n subWidth = subWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n ////Generally, trailing space of line should get trimmed, if alignment type is Right or Left.\n ////But, if right-to-left rendering is enabled and it is last line of paragraph than the trailing space should be preserved.\n ////So, subtracted the trimmedSpaceWidth from subWidth.\n else if (trimmedSpaceWidth > 0 && lineWidget.paragraph.paragraphFormat.bidi && isParagraphEnd) {\n subWidth -= trimmedSpaceWidth;\n }\n // So set sub width to zero to layout the element in left alignment\n // Need to remove is once after implementing subwidth update separatly\n return [{ 'subWidth': subWidth, 'spaceCount': spaceCount, 'totalSpaceCount': totalSpaceCount }];\n };\n Layout.prototype.getSubWidthBasedOnTextWrap = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var subWidths = [];\n var width = 0;\n var lineContent = '';\n var wrapIndex = this.wrapPosition.length - 1;\n var trimSpace = true;\n for (var z = lineWidget.children.length - 1; z >= 0; z--) {\n var elementBox = lineWidget.children[z];\n if (elementBox.width > 0 && elementBox instanceof TextElementBox) {\n var elementText = elementBox.text;\n lineContent = elementText + lineContent;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, elementBox.characterFormat);\n }\n else {\n width += elementBox.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += elementBox.width;\n }\n }\n else {\n lineContent = 'a' + lineContent;\n trimSpace = false;\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n width += elementBox.width;\n }\n }\n if ((elementBox.padding.left > 0 || z === 0) && (wrapIndex >= 0)) {\n var wrapPosition = this.wrapPosition[wrapIndex--];\n while (wrapPosition.width <= 0 && (wrapIndex >= 0)) {\n wrapPosition = this.wrapPosition[wrapIndex--];\n }\n var info = this.getSubWidthInfo(lineWidget, wrapPosition.width, width, lineContent, spaceCount, justify, isParagraphEnd);\n if (!isNullOrUndefined(info)) {\n width = 0;\n lineContent = '';\n subWidths.unshift(info);\n }\n }\n }\n return subWidths;\n };\n /**\n * Returns the total space width in line widget.\n * @param {LineWidget} lineWidget - the line widget\n * @returns {number} the total space width.\n */\n Layout.prototype.getTotalSpaceWidth = function (lineWidget) {\n var totalSpaceWidth = 0;\n if (lineWidget) {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var currentWidget = lineWidget.children[i];\n if (currentWidget instanceof TextElementBox) {\n var spaceCount = currentWidget.text.length - HelperMethods.removeSpace(currentWidget.text).length;\n if (spaceCount > 0) {\n var spaceWidth = this.documentHelper.textHelper.getWidth(' ', currentWidget.characterFormat);\n totalSpaceWidth += spaceCount * spaceWidth;\n }\n }\n }\n }\n return totalSpaceWidth;\n };\n Layout.prototype.getSubWidthInfo = function (lineWidget, lastWrapPositionWidth, width, lineContent, spaceCount, justify, isParagraphEnd) {\n if (lastWrapPositionWidth > 0) {\n var wrappedSubWidth = lastWrapPositionWidth - width;\n lineContent = lineContent.trim();\n spaceCount = lineContent.length - HelperMethods.removeSpace(lineContent).length;\n // TODO: Consider first line indent.\n var totalSubWidth = wrappedSubWidth;\n if (totalSubWidth <= 0 || (spaceCount === 0 && justify && !lineWidget.paragraph.paragraphFormat.bidi)) {\n spaceCount = 0;\n totalSubWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0) {\n totalSubWidth = totalSubWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n return { 'subWidth': totalSubWidth, 'spaceCount': spaceCount, 'totalSpaceCount': spaceCount };\n }\n return undefined;\n };\n Layout.prototype.getBeforeSpacing = function (paragraph, pageIndex) {\n var beforeSpacing = 0;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing) {\n var previousBlock = paragraph.previousWidget;\n if (previousBlock instanceof ParagraphWidget) {\n var afterSpacing = this.getAfterSpacing(previousBlock);\n var before = paragraph.paragraphFormat.beforeSpacing;\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n before = 14;\n }\n if (afterSpacing < before) {\n beforeSpacing = before - afterSpacing;\n }\n }\n else if (previousBlock instanceof TableWidget) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n else {\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0]) {\n if (this.documentHelper.pages[pageIndex].sectionIndex !== this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n else {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 0;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n if (this.isSameStyle(paragraph, false)) {\n return 0;\n }\n else {\n return HelperMethods.convertPointToPixel(beforeSpacing);\n }\n };\n Layout.prototype.getAfterSpacing = function (paragraph) {\n var afterSpacing = paragraph.paragraphFormat.afterSpacing;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing && paragraph.paragraphFormat.spaceAfterAuto) {\n if (isNullOrUndefined(paragraph.nextWidget) && paragraph.isInsideTable) {\n afterSpacing = 0;\n }\n else {\n afterSpacing = 14;\n }\n }\n if (this.isSameStyle(paragraph, true)) {\n return 0;\n }\n else {\n return afterSpacing;\n }\n };\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight, alterLineSpacing) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.lineSpacing);\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n if (alterLineSpacing) {\n lineSpacing = lineSpacing - 1;\n }\n lineSpacing = lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n if (index == 0) {\n index = text.indexOf('-', startIndex) + 1;\n }\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, currentRow, moveFromNext) {\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n // if (!isNullOrUndefined(this.footNote) && this.footNote.length !== 0 && this.footNote[0].page.index !== this.footNote[0].footNoteReference.line.paragraph.bodyWidget.page.index) {\n // this.isTableFootNote = false;\n // this.moveFootNotesToPage(this.footNote, this.footNote[0].page.bodyWidgets[0], this.footNote[0].page.bodyWidgets[0].nextRenderedWidget);\n // this.footNote = undefined;\n // }\n };\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n if (cell.columnIndex === 0 && cell.ownerRow.rowFormat.hasValue('leftMargin')) {\n left = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.leftMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n }\n if (cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 &&\n cell.ownerRow.rowFormat.hasValue('rightMargin')) {\n right = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.rightMargin);\n }\n else {\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n var autofit = cell.ownerTable.tableFormat.allowAutoFit;\n var cellWidth = cell.cellFormat.cellWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent' && cell.cellFormat.preferredWidth !== 0 && cellWidth <= 0) {\n var width = HelperMethods.convertPointToPixel(cell.ownerTable.getTableClientWidth(cell.ownerTable.getContainerWidth()));\n cellWidth = cell.ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, width, cell);\n }\n // if (cellWidth > cell.cellFormat.preferredWidth && cell.cellFormat.preferredWidth !== 0 && cell.cellFormat.preferredWidthType !== 'Percent' && cell.ownerTable.tableFormat.preferredWidthType !== 'Percent' && isNullOrUndefined(cell.ownerTable.positioning) && (!cell.ownerTable.isContainInsideTable) && (!(cell.ownerTable.containerWidget instanceof TableCellWidget))) {\n // cellWidth = cell.cellFormat.preferredWidth;\n // }\n cell.width = HelperMethods.convertPointToPixel(cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n var leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n var rightBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellRightBorder(cell).getLineWidth());\n // update the margins values respect to layouting of borders.\n // for normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n var linestyle = false;\n cell.leftBorderWidth = !cell.ownerTable.isBidiTable ? leftBorderWidth : rightBorderWidth;\n var isLeftStyleNone = (cell.cellFormat.borders.left.lineStyle === 'None');\n var isRightStyleNone = (cell.cellFormat.borders.right.lineStyle === 'None');\n cell.x += (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n cell.width -= (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n var lastCell = !cell.ownerTable.isBidiTable ? cell.cellIndex === cell.ownerRow.childWidgets.length - 1\n : cell.cellIndex === 0;\n if (cellspace > 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 ||\n (cell.columnIndex === cell.containerWidget.childWidgets.length - 1 && cell.cellFormat.columnSpan > 1)) {\n cell.rightBorderWidth = !cell.ownerTable.isBidiTable ? rightBorderWidth : leftBorderWidth;\n if (!cell.ownerTable.tableFormat.allowAutoFit) {\n cell.width -= cell.rightBorderWidth;\n }\n if (!this.isInsertTable()) {\n linestyle = this.checkPreviousMargins(cell.ownerTable);\n }\n }\n //Add the border widths to respective margin side.\n //cell.margin.left += (isLeftStyleNone) ? 0 : (cell.leftBorderWidth);\n cell.margin.right += (isRightStyleNone && !linestyle) ? 0 : (cell.rightBorderWidth);\n //cell.ownerWidget = owner;\n if (cell.width < cell.sizeInfo.minimumWidth / 2 && this.documentHelper.owner.editor.tableResize.checkCellMinWidth) {\n cell.width = cell.sizeInfo.minimumWidth / 2;\n }\n return cell;\n };\n Layout.prototype.checkPreviousMargins = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (cell.cellFormat.borders.right.lineStyle !== 'None') {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, endRowWidget, isInitialLayout) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n var footnoteWidgets = [];\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget &&\n row.previousRenderedWidget.ownerTable.equals(row.ownerTable)) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n }\n if (!isNullOrUndefined(row)) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n for (var k = 0; k < row.childWidgets[j].childWidgets.length; k++) {\n var footnoteCollection = this.getFootNoteWidgetsOf(row.childWidgets[j].childWidgets[k]);\n for (var l = 0; l < footnoteCollection.length; l++) {\n footnoteWidgets.splice(footnoteWidgets.length, 0, footnoteCollection[l]);\n }\n }\n }\n }\n row.containerWidget = tableWidget;\n if (!isNullOrUndefined(footnoteWidgets) && footnoteWidgets.length !== 0 && row.bodyWidget.previousRenderedWidget !== undefined) {\n var footnoteNoteHeight = 0;\n if (isNullOrUndefined(row.bodyWidget.page.footnoteWidget)) {\n this.addEmptyFootNoteToBody(row.bodyWidget);\n }\n if (row.bodyWidget.page.footnoteWidget) {\n for (var l = 0; l < footnoteWidgets.length; l++) {\n row.bodyWidget.page.footnoteWidget.bodyWidgets.push(footnoteWidgets[l]);\n for (var j = 0; j < footnoteWidgets[l].childWidgets.length; j++) {\n footnoteNoteHeight += footnoteWidgets[l].childWidgets[j].height;\n }\n }\n this.layoutfootNote(row.bodyWidget.page.footnoteWidget);\n this.footnoteHeight -= footnoteNoteHeight;\n }\n //this.moveFootNotesToPage(footnoteWidgets, (row.bodyWidget.previousRenderedWidget as BodyWidget), row.bodyWidget);\n }\n tableWidget.height = tableWidget.height + row.height;\n if (this.viewer instanceof PageLayoutViewer) {\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget, isInitialLayout);\n viewer.cutFromTop(row.y + row.height);\n };\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if ((row.rowFormat.heightType !== 'Exactly' || (row.rowFormat.heightType === 'Exactly' && row.rowFormat.height > mergedCellHeight)) && row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row, cellWidget) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget, isLastRow) {\n if (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget);\n if (this.documentHelper.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n if (isLastRow) {\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n if (cell.rowIndex !== splittedWidget.index) {\n splittedWidget.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n this.isRelayoutneed = false;\n var issplit = false;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n tableRowWidget.height -= splittedCell.height;\n if (i === 0 || tableRowWidget.height < cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n // splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n else {\n if (tableRowWidget.rowFormat.heightType === 'Exactly' || (tableRowWidget.rowFormat.heightType === 'AtLeast' &&\n splittedWidget.height < tableRowWidget.rowFormat.height)) {\n //Sets the height for row widget if height type is exact or at least.\n splittedWidget.height = tableRowWidget.rowFormat.height;\n }\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n this.isRelayoutneed = true;\n var count = i;\n while (count > 0 && !issplit) {\n var cellWidget_1 = tableRowWidget.childWidgets[count - 1];\n splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget_1);\n splittedWidget.childWidgets.splice(0, 0, splittedCell);\n splittedCell.containerWidget = splittedWidget;\n count--;\n }\n issplit = true;\n }\n }\n return splittedWidget;\n };\n Layout.prototype.getfootNoteHeight = function (line) {\n var height = 0;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FootnoteElementBox) {\n var foot = line.children[i].bodyWidget;\n for (var j = 0; j < foot.childWidgets.length; j++) {\n height += foot.childWidgets[j].height;\n }\n }\n }\n if (line.paragraph.bodyWidget.page.footnoteWidget) {\n height += line.paragraph.bodyWidget.page.footnoteWidget.height;\n }\n return height;\n };\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row) {\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var headerRow = undefined;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n var isInitialLayout = row.ownerTable.isInsideTable;\n var isLastRow = false;\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (this.isRowSpanEnd(row, viewer) && row.rowFormat.heightType === 'Exactly' && this.documentHelper.splittedCellWidgets.length === 1) {\n this.documentHelper.splittedCellWidgets = [];\n }\n if (row.ownerTable.isInsideTable || (this.documentHelper.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing + this.footnoteHeight <= viewer.clientArea.bottom)) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.index - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, undefined, isInitialLayout);\n if (this.documentHelper.splittedCellWidgets.length > 0 && isNullOrUndefined(rowWidgets[rowWidgets.length - 1].nextRow)) {\n count--;\n isLastRow = true;\n }\n isInitialLayout = false;\n }\n else {\n isInitialLayout = false;\n //Split widget for next page\n if (this.documentHelper.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height + this.footnoteHeight <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (rowHeight + tableRowWidget.y + (this.isInitialLoad ? this.footnoteHeight : 0) > viewer.clientArea.bottom) {\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && (isAllowBreakAcrossPages || row.indexInOwner === 0)) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n }\n }\n // if (heightType === 'AtLeast' && row.ownerTable.spannedRowCollection.keys.length > 0) {\n // splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // }\n // if (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientActiveArea.height && isAllowBreakAcrossPages && tableRowWidget.ownerTable.tableHolder.columns.length > this.getTotalColumnSpan(tableRowWidget)) {\n // tableRowWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // splittedWidget = tableRowWidget;\n // }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n if (viewer instanceof PageLayoutViewer) {\n pages = this.documentHelper.pages;\n }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n }\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)))) {\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n else {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget)) {\n isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight);\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n count--;\n continue;\n }\n }\n }\n }\n else if (isLastRow && !isAllowBreakAcrossPages) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget) && !this.documentHelper.owner.editor.isTableInsert && !(splittedWidget.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, tableRowWidget.nextRow);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var prevBodyWidget = undefined;\n if (tableWidgets.length > 1) {\n //Get Previous Splitted Widget container\n prevBodyWidget = tableWidgets[tableWidgets.length - 2].containerWidget;\n }\n else {\n var previousBlock = row.ownerTable.previousRenderedWidget;\n prevBodyWidget = previousBlock.containerWidget;\n }\n var pageIndex = 0;\n if (!isNullOrUndefined(prevBodyWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(prevBodyWidget.page);\n }\n var rowToMove = row;\n var keepNext = false;\n var index = row.ownerTable.containerWidget.index;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n var removeTable = true;\n //Move Next RowWidge to next page\n if (moveRowToNextTable && rowWidgets.length === 1) {\n var prev = this.alignBlockElement(row);\n if (!isNullOrUndefined(prev.node)) {\n var previousRow = prev.node;\n if (previousRow instanceof TableRowWidget\n && previousRow.indexInOwner === 0) {\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n tableWidget.height = 0;\n }\n }\n else if (prev.node instanceof ParagraphWidget) {\n var previousWidget = this.splitParagraph(prev.node, parseInt(prev.position.index, 10));\n block = previousWidget;\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n }\n removeTable = false;\n }\n if (previousRow instanceof TableRowWidget) {\n rowToMove = previousRow;\n if (!rowToMove.ownerTable.equals(row.ownerTable)) {\n removeTable = false;\n }\n }\n keepNext = true;\n }\n }\n bodyWidget = this.moveBlocksToNextPage(block instanceof ParagraphWidget ? block.previousWidget : block, false);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable && removeTable) {\n if (rowToMove.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n if (removeTable) {\n if (bodyWidget.childWidgets.indexOf(curretTable) !== -1) {\n bodyWidget.childWidgets.splice(bodyWidget.childWidgets.indexOf(curretTable), 1);\n }\n bodyWidget.childWidgets.unshift(curretTable);\n this.shiftFloatingItemsFromTable(curretTable, bodyWidget);\n }\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && rowToMove.index > 0 || rowWidgets.length > 1) {\n var currentRow = !moveRowToNextTable ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n if (keepNext) {\n currentRow = rowToMove;\n }\n this.moveNextWidgetsToTable(tableWidgets, currentRow, !moveRowToNextTable);\n rowToMove = row;\n }\n if (keepNext) {\n this.updateClientPositionForBlock(removeTable ? curretTable : block, row);\n }\n moveRowToNextTable = false;\n if (rowToMove.ownerTable.header && tableRowWidget.height < viewer.clientArea.bottom && !keepNext) {\n if (viewer instanceof PageLayoutViewer) {\n viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + rowToMove.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + rowToMove.ownerTable.headerHeight - cellspace, splittedWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget);\n }\n if (removeTable && this.shiftedFloatingItemsFromTable.length > 0) {\n for (var i = 0; i < this.shiftedFloatingItemsFromTable.length; i++) {\n var floatingItem = this.shiftedFloatingItemsFromTable[i];\n var position = this.getFloatingItemPoints(floatingItem);\n floatingItem.y = position.y;\n floatingItem.x = position.x;\n if (floatingItem instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatingItem.y, floatingItem);\n }\n }\n this.shiftedFloatingItemsFromTable = [];\n }\n }\n isLastRow = false;\n }\n if (isHeader) {\n if (row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n headerRow = this.getHeader(row.ownerTable);\n if (!isNullOrUndefined(headerRow) && row.index === headerRow.index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = this.documentHelper.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + row_1.height;\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n Layout.prototype.updateWidgetToRow = function (cell) {\n //const viewer: LayoutViewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n // let cellLeft: number = rowWidget.x;\n // if (rowWidget.childWidgets.length > 0) {\n // const lastWidget: TableCellWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1] as TableCellWidget;\n // cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n // }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = void 0;\n if (rowWidget.rowFormat.heightType === 'Exactly') {\n cellHeight = cell.height + cell.margin.bottom;\n }\n else {\n cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n }\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget, isInitialLayout) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (!isInitialLayout && (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) && (rowCollection.length === 1\n || rowCollection.length >= 1 && rowWidget === rowCollection[rowCollection.length - 1])) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n /* eslint-disable-next-line max-len */\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n if (spanEndRowWidget.rowFormat.heightType !== 'Exactly' || (spanEndRowWidget.rowFormat.heightType === 'Exactly' && spanEndRowWidget.rowFormat.height > cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y)) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n }\n else {\n cellWidget.height = (spanEndRowWidget.y - cellWidget.y) + spanEndRowWidget.height;\n }\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page.\n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n /* eslint-disable-next-line max-len */\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, cellWidget.ownerTable.isInsideTable);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n /* eslint-disable-next-line max-len */\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n this.documentHelper.splittedCellWidgets.push(splittedCell);\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n if (!isNullOrUndefined(rowWidget)) {\n var left = rowWidget.x;\n var tableWidth = 0;\n var cellIndex = 0;\n tableWidth = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableHolder.tableWidth);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n if (i === cellIndex) {\n break;\n }\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n cellIndex++;\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets.\n /* eslint-disable-next-line max-len */\n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && this.documentHelper.splittedCellWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.splittedCellWidgets.length; j++) {\n var widget = this.documentHelper.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (this.documentHelper.splittedCellWidgets.length > 0) {\n this.documentHelper.splittedCellWidgets = [];\n }\n }\n };\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n if (splittedCell.height > rowWidget.height) {\n rowWidget.height = splittedCell.height;\n }\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n this.documentHelper.splittedCellWidgets.splice(i, 1);\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n var previousRow;\n for (var j = tableCollection.length - 1; j >= 0; j--) {\n var table = tableCollection[j];\n for (var z = table.childWidgets.length - 1; z >= 0; z--) {\n var row = table.childWidgets[z];\n if (row.index === previousRowIndex) {\n previousRow = row;\n break;\n }\n }\n }\n if (previousRow) {\n tableWidget = previousRow.ownerTable;\n previousRowIndex = previousRow.indexInOwner;\n }\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1) {\n //if (!isNullOrUndefined(currentRow.childWidgets[index])) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n //if (emptyCellWidget.x < (currentRow.childWidgets[index] as TableCellWidget).x) {\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n this.updateChildLocationForRow(currentRow.y, currentRow);\n return;\n //}\n //}\n }\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget) {\n var splittedWidget = undefined;\n if (cellWidget.y + cellWidget.height > bottom - (this.isInitialLoad ? this.footnoteHeight : 0) - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget);\n if (!isNullOrUndefined(splittedPara)) {\n if (i === 0 && splittedPara === paragraphWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n /* eslint-disable-next-line max-len */\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget);\n if (isNullOrUndefined(splittedTable) &&\n !(tableWidget.childWidgets[0].rowFormat.allowBreakAcrossPages)) {\n splittedTable = tableWidget;\n }\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget && this.isRelayoutneed) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'LowLetter';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'UpRoman';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = cell.leftBorderWidth;\n cellWidget.rightBorderWidth = cell.rightBorderWidth;\n return cellWidget;\n };\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n newTable.headerHeight = table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.isGridUpdated = table.isGridUpdated;\n newTable.wrapTextAround = table.wrapTextAround;\n newTable.positioning = table.positioning;\n newTable.isContainInsideTable = table.isContainInsideTable;\n newTable.isBidiTable = table.isBidiTable;\n return newTable;\n };\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n var moveEntireBlock = false;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n if (bottom < lineBottom + (this.isInitialLoad ? this.getfootNoteHeight(lineWidget) : 0) + lineWidget.height) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && (paragraphWidget.index !== 0 ||\n (paragraphWidget.index === 0 && !isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.previousWidget)))) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n else if (paragraphWidget.paragraphFormat.widowControl) {\n if (i === 1) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n }\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget && !moveEntireBlock) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n lineBottom += lineWidget.height;\n }\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area.\n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n /* eslint-disable-next-line max-len */\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget) : rowWidget;\n }\n else {\n if ((isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)\n && this.isFirstLineFitForRow(bottom, rowWidget))\n || (tableWidget.isInsideTable\n && !(tableWidget.containerWidget.containerWidget.rowFormat.allowBreakAcrossPages))) {\n splittedRow = this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget);\n }\n else if (!isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)) {\n splittedRow = rowWidget;\n }\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var lineHeight = lineWidget.height + this.getfootNoteHeight(lineWidget);\n if (paraWidget.paragraphFormat.keepLinesTogether) {\n lineHeight = paraWidget.height;\n }\n var cellwidget = lineWidget.paragraph.containerWidget;\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.documentHelper.isFirstLineFitInShiftWidgets) {\n /* eslint-disable-next-line max-len */\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n }\n else {\n // For nested tables,\n if (cellwidget.ownerTable.isInsideTable) {\n // Gets the container cell widgets, consider it as client area for the cell widget.\n var containerCellWidget = undefined;\n if (cellwidget.containerWidget instanceof TableRowWidget &&\n cellwidget.containerWidget.containerWidget instanceof TableWidget\n && cellwidget.containerWidget.containerWidget.containerWidget instanceof TableCellWidget) {\n containerCellWidget = cellwidget.containerWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(containerCellWidget) && cellwidget.containerWidget.y === containerCellWidget.y\n && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n /* eslint-disable-next-line max-len */\n }\n else if (cellwidget.containerWidget.y === this.viewer.clientArea.y && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n }\n return (paraWidget.y + lineHeight <= bottom);\n };\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n //rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget);\n top += rowWidget.height;\n }\n };\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n //cellWidget.x = cellWidget.x;\n cellWidget.index = cellWidget.cellIndex;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCellOrShape(cellWidget.y, cellWidget);\n }\n };\n Layout.prototype.updateChildLocationForCellOrShape = function (top, widget) {\n var container = widget;\n if (widget instanceof ShapeElementBox) {\n container = widget.textFrame;\n }\n for (var i = 0; i < container.childWidgets.length; i++) {\n var skipHeight = false;\n if (container.childWidgets[i] instanceof TableWidget && container.childWidgets[i].wrapTextAround\n && !isNullOrUndefined(container.childWidgets[i + 1]) && container.childWidgets[i + 1].y > container.childWidgets[i].y\n && container.childWidgets[i + 1].y < (container.childWidgets[i].y + container.childWidgets[i].height)) {\n skipHeight = true;\n }\n container.childWidgets[i].x = container.childWidgets[i].x;\n container.childWidgets[i].y = top;\n if (container.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, container.childWidgets[i]);\n }\n if (container.childWidgets[i] instanceof ParagraphWidget) {\n var para = container.childWidgets[i];\n for (var i_2 = 0; i_2 < para.childWidgets.length; i_2++) {\n var line = para.childWidgets[0];\n for (var k = 0; k < line.children.length; k++) {\n var element = line.children[k];\n if (element instanceof FootnoteElementBox) {\n if (!isNullOrUndefined(para.bodyWidget.page.footnoteWidget)) {\n break;\n }\n else {\n var prevWidget = para.bodyWidget.previousRenderedWidget;\n var prevBodyWidget = para.bodyWidget.previousRenderedWidget;\n var newBodyWidget = para.bodyWidget;\n var footWidgets = this.getFootNoteWidgetsOf(para);\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footWidgets, prevBodyWidget, newBodyWidget);\n this.layoutfootNote(para.bodyWidget.page.footnoteWidget);\n }\n }\n }\n }\n }\n if (!skipHeight) {\n top += container.childWidgets[i].height;\n }\n }\n };\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n var containerWidget = cellWidget.ownerTable.containerWidget;\n if (containerWidget instanceof BlockContainer || containerWidget instanceof TextFrame || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n para.y = location;\n this.updateShapeInsideCell(para, displacement);\n }\n else {\n this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n Layout.prototype.updateShapeInsideCell = function (paragraph, displacement) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var floatElement = paragraph.floatingElements[i];\n floatElement.y += displacement;\n if (floatElement instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatElement.y, floatElement);\n }\n }\n };\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget, true);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n Layout.prototype.getCellContentHeight = function (cellWidget, isDisplacement) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n var cellY = cellWidget.y;\n var withShapeContentHeight = 0;\n var withShapeBottom = 0;\n var considerShapeHeight = false;\n var considerAsTop = false;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n contentHeight += cellWidget.childWidgets[i].height;\n for (var k = 0; k < para.floatingElements.length; k++) {\n considerShapeHeight = true;\n var floatElement = para.floatingElements[k];\n if ((cellWidget.y + cellWidget.containerWidget.height) > (floatElement.y + floatElement.height)\n && (floatElement.y + floatElement.height) > withShapeBottom) {\n withShapeContentHeight = Math.abs(cellY - (floatElement.y + floatElement.height));\n withShapeBottom = floatElement.y + floatElement.height;\n considerAsTop = false;\n }\n else {\n considerAsTop = true;\n }\n }\n }\n else {\n if (this.considerPositionTableHeight(cellWidget, cellWidget.childWidgets[i])) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n }\n if ((cellY + contentHeight) > withShapeBottom) {\n considerShapeHeight = false;\n }\n return (isDisplacement && considerShapeHeight) ? withShapeContentHeight :\n (isDisplacement && considerAsTop ? cellWidget.ownerRow.height : contentHeight);\n };\n Layout.prototype.considerPositionTableHeight = function (cellWidget, nestedWrapTable) {\n if (nestedWrapTable.isLayouted && nestedWrapTable.wrapTextAround) {\n var wrapTableBottom = nestedWrapTable.y + nestedWrapTable.height;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if ((cellWidget.childWidgets[i].y + cellWidget.childWidgets[i].height) > wrapTableBottom) {\n return false;\n }\n }\n }\n return true;\n };\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer, isFootnoteReLayout) {\n var sectionIndex = blockAdv.bodyWidget.sectionIndex;\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.sectionIndex === sectionIndex) {\n if (!isNullOrUndefined(isFootnoteReLayout) && isFootnoteReLayout && !nextBlock.isLayouted && this.isInitialLoad) {\n break;\n }\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(this.documentHelper.blockToShift)) {\n this.documentHelper.blockToShift = block;\n }\n else if (nextWidget.bodyWidget) {\n var floatingElementLength = nextWidget.bodyWidget.floatingElements.length;\n if (floatingElementLength > 0) {\n this.documentHelper.blockToShift = block;\n }\n }\n break;\n }\n updateNextBlockList = true;\n if (viewer.owner.isShiftingEnabled && this.documentHelper.fieldStacks.length === 0) {\n this.documentHelper.blockToShift = block;\n break;\n }\n else if (isNullOrUndefined(this.viewer.owner.editorModule) || !this.viewer.owner.editorModule.isInsertingTOC) {\n block = block.combineWidget(this.viewer);\n //let paragraph: ParagraphWidget;\n if (currentWidget.containerWidget !== block.containerWidget) {\n if (!(currentWidget instanceof ParagraphWidget) ||\n (currentWidget instanceof ParagraphWidget) && !currentWidget.isEndsWithPageBreak) {\n /* eslint-disable-next-line max-len */\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n //paragraph = this.documentHelper.selection.getFirstParagraphInFirstCell(block as TableWidget);\n }\n else {\n //paragraph = block as ParagraphWidget;\n }\n //if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n // this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n //}\n viewer.updateClientAreaForBlock(block, true);\n if (this.viewer instanceof WebLayoutViewer || block.bodyWidget instanceof HeaderFooterWidget) {\n block.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || (this.documentHelper.blockToShift !== block)) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * Update the client area for the line widget.\n *\n * @param {LineWidget} startLineWidget LineWidget instance.\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (startLineWidget) {\n startLineWidget.marginTop = 0;\n //Clears the line widget starting from current line.\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer || widget.containerWidget instanceof TextFrame) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex, isBidi, isSkip) {\n this.isRelayout = true;\n if (paragraphWidget.containerWidget instanceof TextFrame\n && paragraphWidget.containerWidget.containerShape.textWrappingStyle === 'Inline') {\n lineIndex = paragraphWidget.containerWidget.containerShape.line.indexInOwner;\n paragraphWidget = paragraphWidget.containerWidget.containerShape.paragraph;\n }\n isBidi = isNullOrUndefined(isBidi) ? false : isBidi;\n this.isRelayout = true;\n if (this.documentHelper.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n this.isBidiReLayout = true;\n }\n else {\n if (this.isBidiReLayout) {\n this.isBidiReLayout = false;\n }\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.isBidiReLayout = true;\n this.reLayoutTable(paragraphWidget);\n /* eslint-disable-next-line max-len */\n if (this.isFootnoteContentChanged && (!isNullOrUndefined(paragraphWidget.bodyWidget)) && !isNullOrUndefined(paragraphWidget.bodyWidget.page.footnoteWidget)) {\n var foot = paragraphWidget.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n this.isBidiReLayout = false;\n }\n else {\n // this.isRelayout = true;\n this.reLayoutLine(paragraphWidget, lineIndex, isBidi, isSkip);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n };\n Layout.prototype.getParentRow = function (block) {\n var cell = block;\n while (cell.ownerTable !== null && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell.ownerRow;\n };\n Layout.prototype.reLayoutRow = function (block) {\n if (block instanceof ParagraphWidget) {\n block = block.associatedCell;\n }\n var currentRow = this.getParentRow(block).getSplitWidgets()[0];\n if (!isNullOrUndefined(currentRow) && !currentRow.ownerTable.tableFormat.allowAutoFit) {\n var currentTable = currentRow.ownerTable.getSplitWidgets()[0].combineWidget(this.viewer);\n var startRow = currentRow;\n while (this.isVerticalMergedCellContinue(startRow)) {\n var previousRow = startRow.previousWidget;\n if (isNullOrUndefined(previousRow)) {\n break;\n }\n startRow = previousRow;\n }\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(currentTable.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(currentTable), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n /* eslint-disable-next-line max-len */\n var area = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientArea = new Rect(area.x, area.y, area.width, area.height);\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_2 = this.documentHelper.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_2);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n this.viewer.cutFromTop(startRow.y);\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //Clear Hieght for all the content\n currentTable.height = 0;\n do {\n this.clearRowWidget(currentRow, true, true, true);\n this.layoutRow([currentTable], currentRow, true);\n if (startRow === currentRow) {\n break;\n }\n startRow = startRow.nextRow;\n } while (startRow && startRow !== currentRow);\n this.updateChildLocationForTable(currentTable.y, currentTable);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height);\n this.viewer.updateClientAreaForBlock(currentTable, true);\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n this.viewer.cutFromTop(currentTable.y);\n this.shiftTableWidget(currentTable, this.viewer, true);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n }\n else {\n this.currentCell = block;\n this.reLayoutTable(block);\n this.currentCell = undefined;\n }\n };\n Layout.prototype.reLayoutTable = function (block, isFootnoteReLayout) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n //Combine splitted table in to single table\n var currentTable = table.combineWidget(this.viewer);\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(table.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(table), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n //Clear Hieght for all the content\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_3 = this.documentHelper.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_3);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n var yPos = this.getYPosition(currentTable);\n this.viewer.cutFromTop(yPos);\n this.clearTableWidget(currentTable, true, true, true);\n this.isBidiReLayout = true;\n this.layoutBlock(currentTable, 0);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n this.layoutNextItemsBlock(currentTable, this.viewer, isFootnoteReLayout);\n };\n Layout.prototype.getYPosition = function (table) {\n if (table.wrapTextAround) {\n var prevWidget = table.previousWidget;\n while (prevWidget) {\n if (prevWidget instanceof ParagraphWidget) {\n return prevWidget.y + prevWidget.height;\n }\n else if (prevWidget instanceof TableWidget) {\n if (prevWidget.wrapTextAround) {\n prevWidget = prevWidget.previousWidget;\n }\n else {\n return prevWidget.y + prevWidget.height;\n }\n }\n }\n return this.viewer.clientActiveArea.y;\n }\n return table.y;\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight, clearGrid) {\n table.height = 0;\n if (clearGrid) {\n table.isGridUpdated = false;\n }\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight, clearGrid) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight, clearGrid) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n this.clearBlockWidget(cell.childWidgets, clearPosition, clearHeight, clearGrid);\n };\n /**\n * @private\n */\n Layout.prototype.clearBlockWidget = function (blocks, clearPosition, clearHeight, clearGrid) {\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n if (block instanceof ParagraphWidget) {\n if (clearPosition) {\n block.y = 0;\n block.x = 0;\n }\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight, clearGrid);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget, isSkipShifting) {\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer || bodyWidget instanceof TextFrame) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (this.viewer instanceof WebLayoutViewer) {\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.isRelayoutFootnote = true;\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //curretBlock.containerWidget.height -= curretBlock.height;\n this.viewer.clientActiveArea.y = curretBlock.containerWidget.containerWidget.y;\n }\n else {\n this.viewer.cutFromTop(bodyWidget.containerWidget.y);\n this.layoutfootNote(bodyWidget.containerWidget);\n return;\n }\n // curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n if (!isNullOrUndefined(bodyWidget.page.footnoteWidget)) {\n if (bodyWidget.page.footnoteWidget.footNoteType === 'Footnote') {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n // if (bodyWidget.page.footnoteWidget) {\n // this.viewer.clientActiveArea.height -= bodyWidget.page.footnoteWidget.height;\n // this.viewer.clientArea.height -= bodyWidget.page.footnoteWidget.height;\n // }\n }\n if (blockIndex > 0) {\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n if (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (isNullOrUndefined(isSkipShifting) && curretBlock.containerWidget !== prevWidget.containerWidget) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = curretBlock.containerWidget;\n var newBodyWidget = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(curretBlock);\n this.updateContainerWidget(curretBlock, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footWidgets, prevBodyWidget, newBodyWidget);\n }\n }\n else if (prevWidget instanceof ParagraphWidget && prevWidget.isEndsWithPageBreak &&\n prevWidget.containerWidget === curretBlock.containerWidget) {\n this.moveBlocksToNextPage(prevWidget, false);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.documentHelper.selection.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true);\n this.documentHelper.layout.layoutBlock(curretBlock, 0);\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.layoutfootNote(bodyWidget.containerWidget);\n }\n }\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n /* eslint-disable-next-line max-len */\n var table = this.documentHelper.layout.getParentTable(bodyWidget.ownerTable).getSplitWidgets()[0];\n this.reLayoutTable(bodyWidget.ownerTable);\n this.layoutNextItemsBlock(table, this.viewer);\n }\n }\n this.isRelayoutFootnote = false;\n };\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n if (containerWidget instanceof TextFrame) {\n return containerWidget.childWidgets[blockIndex];\n }\n else {\n var sectionIndex = containerWidget.index;\n while (containerWidget && containerWidget.index === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n Layout.prototype.layoutTable = function (table, startIndex) {\n table.isBidiTable = table.bidi;\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n var wrapDiff = 0;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tableView, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n else {\n this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (this.isWrapText) {\n wrapDiff = this.viewer.clientActiveArea.x - this.viewer.clientArea.x;\n this.isWrapText = false;\n table.x = this.viewer.clientActiveArea.x;\n }\n }\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n if (table.childWidgets.length > 0) {\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n var index = tableView.length;\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n if (index !== tableView.length && tableView.length > 1) {\n if (tableView[0] && !isNullOrUndefined(tableView[0].bodyWidget.page.footnoteWidget)) {\n var foot = this.getFootNoteWidgetsOf(tableView[0]);\n var Index = tableView[0].bodyWidget.page.footnoteWidget.bodyWidgets.indexOf(foot[0]);\n if (Index === -1) {\n var prevBodyWidget1 = tableView[0].bodyWidget;\n var newBodyWidget = tableView[1].bodyWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(foot, newBodyWidget, prevBodyWidget1);\n }\n }\n if (tableView[tableView.length - 1] !== tableView[tableView.length - 2]) {\n var footNoteWidgets = this.getFootNoteWidgetsOf(tableView[tableView.length - 1]);\n var prevBodyWidget1 = tableView[tableView.length - 1].bodyWidget;\n var newBodyWidget = tableView[tableView.length - 2].bodyWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footNoteWidgets, newBodyWidget, prevBodyWidget1);\n }\n }\n if (this.documentHelper.viewer instanceof PageLayoutViewer && table.wrapTextAround && (table.positioning.verticalAlignment === 'Bottom' || table.positioning.verticalAlignment === 'Center' || table.positioning.verticalAlignment === 'Outside')) {\n this.updateTableFloatPoints(table);\n this.updateChildLocationForTable(table.y, table);\n }\n this.updateWidgetsToPage(tableView, [], table);\n if (wrapDiff > 0) {\n this.viewer.clientArea.x = this.viewer.clientArea.x - wrapDiff;\n }\n if (table.wrapTextAround && table.bodyWidget) {\n this.updateClientAreaForWrapTable(tableView, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n tableView[tableView.length - 1].isLayouted = true;\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable && !table.wrapTextAround) {\n this.viewer.clientArea.x = this.viewer.clientArea.x + HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n return tableView[tableView.length - 1];\n };\n Layout.prototype.updateClientAreaForWrapTable = function (tables, table, beforeLayout, clientActiveAreaForTableWrap, clientAreaForTableWrap) {\n if (beforeLayout) {\n if (table.wrapTextAround) {\n this.updateTableFloatPoints(table);\n var clienactare = this.viewer.clientActiveArea.clone();\n var rect = this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (clienactare.x !== rect.x) {\n table.x = this.viewer.clientActiveArea.x;\n }\n }\n }\n else {\n if (table.wrapTextAround && table.bodyWidget) {\n if (tables.length == 1) {\n if (table.bodyWidget.floatingElements.indexOf(table) === -1) {\n table.bodyWidget.floatingElements.push(table);\n }\n if (!isNullOrUndefined(table.previousWidget) || table.isInHeaderFooter || table.isInsideTable) {\n this.viewer.clientActiveArea = clientActiveAreaForTableWrap.clone();\n this.viewer.clientArea = clientAreaForTableWrap.clone();\n }\n else {\n this.viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n }\n }\n else {\n this.documentHelper.tableLefts.pop();\n this.viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n for (var z = 0; z < tables.length; z++) {\n var bodyWidget = tables[z].bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.indexOf(tables[z]) === -1) {\n bodyWidget.floatingElements.push(tables[z]);\n }\n }\n }\n }\n }\n };\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined.\n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n if (!tableWidget.isBidiTable) {\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n else { // Right to left direction table.\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n /* eslint-disable-next-line max-len */\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n for (var i = 0; i < tables.length; i++) {\n this.updateHeightForTableWidget(tables, rows, tables[i], endRowWidget);\n }\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n // Shift the widgets for Right to left directed table.\n if (table.isBidiTable) {\n for (var i = 0; i < tables.length; i++) {\n var layoutedTable = tables[i];\n for (var j = 0; j < layoutedTable.childWidgets.length; j++) {\n var layoutedRow = layoutedTable.childWidgets[j];\n layoutedRow.shiftWidgetForRtlTable();\n }\n }\n }\n if (table.tableFormat.cellSpacing > 0) {\n /* eslint-disable-next-line max-len */\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof WebLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour.\n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (this.viewer instanceof WebLayoutViewer) {\n table.containerWidget.height += table.height;\n }\n if (table.bodyWidget instanceof HeaderFooterWidget) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, true, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n Layout.prototype.layoutRow = function (tableWidget, row, isRowLayout) {\n var viewer = this.viewer;\n var rowWidgets = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n var topMargin = this.getMaxTopCellMargin(row);\n var bottomMargin = this.getMaxBottomCellMargin(row);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.layoutCell(cell, topMargin + row.topBorderWidth, bottomMargin + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n if (!isRowLayout) {\n this.updateWidgetsToTable(tableWidget, rows, row);\n if (!row.ownerTable.isInsideTable) {\n this.footnoteHeight = 0;\n }\n }\n return rows[rows.length - 1];\n };\n Layout.prototype.getAdjacentRowCell = function (cell, cellStartPos, cellEndPos, rowIndex) {\n var adjCells = [];\n var adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n var previouRow = false;\n if (adjRow) {\n if (adjRow.childWidgets[0].x > cell.x && rowIndex !== 0) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex - 1];\n previouRow = true;\n }\n for (var i = 0; i < adjRow.childWidgets.length; i++) {\n var adjCell = adjRow.childWidgets[i];\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n /* eslint-disable-next-line max-len */\n if ((HelperMethods.round(adjCellEndPos, 2) > HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2))\n /* eslint-disable-next-line max-len */\n || (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellStartPos, 2) < HelperMethods.round(cellEndPos, 2))\n /* eslint-disable-next-line max-len */\n || (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2))) {\n //Skipped adding the Horizontal merge start cell multiple times.\n if (adjCells.indexOf(adjCell) === -1) {\n adjCells.push(adjCell);\n }\n }\n if (HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n if (previouRow) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n previouRow = false;\n }\n else {\n break;\n }\n }\n if (i === adjRow.childWidgets.length - 1 && previouRow) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n previouRow = false;\n }\n }\n }\n return adjCells;\n };\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n if ((rowWidget.rowFormat.beforeWidth !== 0 || rowWidget.rowFormat.gridBeforeWidth !== 0) && ((this.documentHelper.alignTablesRowByRow) ? rowWidget.ownerTable.tableFormat.tableAlignment === 'Left' : true)) {\n rowWidget.x += (rowWidget.rowFormat.beforeWidth !== 0) ? rowWidget.rowFormat.beforeWidth : rowWidget.rowFormat.gridBeforeWidth;\n }\n else {\n rowWidget.x = area.x;\n }\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var topBorderWidth = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (topBorderWidth > borderWidth) {\n borderWidth = topBorderWidth;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var bottomBorderWidth = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (bottomBorderWidth > borderWidth) {\n borderWidth = bottomBorderWidth;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n Layout.prototype.getMaxTopCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var topMargin = 0;\n if (cell.cellFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(cell.cellFormat.topMargin);\n }\n else if (row.rowFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(row.rowFormat.topMargin);\n }\n else {\n topMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.topMargin);\n }\n if (topMargin > value) {\n value = topMargin;\n }\n }\n return value;\n };\n Layout.prototype.getMaxBottomCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var bottomMargin = 0;\n if (cell.cellFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(cell.cellFormat.bottomMargin);\n }\n else if (row.rowFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(row.rowFormat.bottomMargin);\n }\n else {\n bottomMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.bottomMargin);\n }\n if (bottomMargin > value) {\n value = bottomMargin;\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n this.updateTopBorders(cell);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(paragraphWidget);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n }\n var footnoteWidgets = [];\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n for (var k = 0; k < block.childWidgets.length; k++) {\n if (block.childWidgets[k] instanceof LineWidget) {\n // eslint-disable-next-line\n var line = block.childWidgets[k];\n for (var j = 0; j < line.children.length; j++) {\n var child = line.children[j];\n if (child instanceof FootnoteElementBox) {\n var foot = child.line.paragraph.bodyWidget.page.footnoteWidget;\n var body = child.line.paragraph.bodyWidget;\n var findIndex = -1;\n if (!isNullOrUndefined(foot)) {\n for (var i_3 = 0; i_3 < foot.bodyWidgets.length; i_3++) {\n if ((foot.bodyWidgets[i_3]).footNoteReference === child) {\n findIndex = i_3;\n }\n }\n }\n if (findIndex === -1) {\n if (!isNullOrUndefined(body.nextRenderedWidget)) {\n var footNoteWidgets = this.getFootNoteWidgetsOf(child.paragraph);\n // if (child.bodyWidget.page.index !== footNoteWidgets[0].page.index) {\n var prevBodyWidget1 = body;\n var newBodyWidget = body.nextRenderedWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footNoteWidgets, newBodyWidget, prevBodyWidget1);\n this.layoutfootNote(body.page.footnoteWidget);\n this.viewer.updateClientArea(body.page.footnoteWidget.sectionFormat, body.page, true);\n // }\n }\n }\n }\n // if (child instanceof FootnoteElementBox && !isNullOrUndefined(cell.bodyWidget.page.footnoteWidget)) {\n // //this.footHeight = cell.bodyWidget.page.footnoteWidget.height;\n // // let footnoteCollection: BodyWidget[] = this.getFootNoteWidgetsOf(child.paragraph);\n // // for (var l = 0; l < footnoteCollection.length; l++) {\n // // footnoteWidgets.splice(footnoteWidgets.length, 0, footnoteCollection[l]);\n // // }\n // // this.footNote = footnoteWidgets;\n // break;\n // } else {\n // this.footHeight = 0;\n // }\n }\n }\n }\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n Layout.prototype.isInsertTable = function () {\n if (this.documentHelper.owner.editorHistory && this.documentHelper.owner.editorHistory.currentBaseHistoryInfo && this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.action === 'InsertTable')\n return true;\n else\n return false;\n };\n Layout.prototype.updateTopBorders = function (cell) {\n cell.updatedTopBorders = [];\n if (cell.ownerTable.tableFormat.cellSpacing === 0) {\n var cellTopBorder = cell.cellFormat.borders.top;\n if (!cellTopBorder.isBorderDefined || (cellTopBorder.isBorderDefined\n && cellTopBorder.lineStyle === 'None' && cellTopBorder.lineWidth === 0 &&\n cellTopBorder.hasValue('color'))) {\n cellTopBorder = cell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!cellTopBorder.isBorderDefined) {\n cellTopBorder = cell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var cellStartPos = cell.x - cell.margin.left;\n var cellEndPos = cell.x + cell.width + cell.margin.right;\n var adjCells = this.getAdjacentRowCell(cell, cellStartPos, cellEndPos, cell.ownerRow.indexInOwner - 1);\n for (var j = 0; j < adjCells.length; j++) {\n var adjCell = adjCells[j];\n var prevCellBottomBorder = adjCell.cellFormat.borders.bottom;\n if (!prevCellBottomBorder.isBorderDefined || (prevCellBottomBorder.isBorderDefined\n && prevCellBottomBorder.lineStyle === 'None' && prevCellBottomBorder.lineWidth === 0 &&\n prevCellBottomBorder.hasValue('color'))) {\n prevCellBottomBorder = adjCell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!prevCellBottomBorder.isBorderDefined) {\n prevCellBottomBorder = adjCell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var border = void 0;\n if (cellTopBorder.lineStyle === 'None' || cellTopBorder.lineStyle === 'Cleared') {\n border = prevCellBottomBorder;\n }\n else if (prevCellBottomBorder.lineStyle === 'Cleared' || prevCellBottomBorder.lineStyle === 'None') {\n border = cellTopBorder;\n }\n else {\n border = cell.getBorderBasedOnPriority(cellTopBorder, prevCellBottomBorder);\n }\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n if (j === 0 && cellStartPos < adjCellStartPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (adjCellStartPos - cellStartPos) });\n }\n if (border) {\n var width = 0;\n /* eslint-disable-next-line max-len */\n if (HelperMethods.round(adjCellEndPos, 2) === HelperMethods.round(cellEndPos, 2) && HelperMethods.round(adjCellStartPos, 2) === HelperMethods.round(cellStartPos, 2)) {\n width = cellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - cellStartPos;\n }\n else {\n width = cellEndPos - cellStartPos;\n }\n if (width < 0) {\n width = 0;\n }\n cell.updatedTopBorders.push({ border: border, width: width });\n }\n if (j === (adjCells.length - 1) && cellEndPos > adjCellEndPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (cellEndPos - adjCellEndPos) });\n }\n }\n }\n };\n //endregion cell\n //#region Shifting\n Layout.prototype.shiftLayoutedItems = function (reLayout) {\n if (isNullOrUndefined(this.documentHelper.blockToShift) || isNullOrUndefined(this.documentHelper.blockToShift.containerWidget)) {\n this.documentHelper.blockToShift = undefined;\n this.checkAndShiftEndnote();\n return;\n }\n var block = this.documentHelper.blockToShift;\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.index === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n if (!isNullOrUndefined(currentWidget.floatingElements)) {\n //this.shiftLayoutFloatingItems(currentWidget as ParagraphWidget);\n }\n updateNextBlockList = true;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.documentHelper.blockToShift = undefined;\n var viewer = this.viewer;\n // if (viewer instanceof PageLayoutViewer) {\n this.documentHelper.removeEmptyPages();\n this.updateFieldElements();\n if (!this.documentHelper.owner.enableLockAndEdit || !reLayout) {\n viewer.updateScrollBars();\n }\n // }\n };\n Layout.prototype.checkAndShiftEndnote = function () {\n if (this.documentHelper.owner.selection) {\n var endBlock = this.documentHelper.owner.selection.end.paragraph;\n if (endBlock.isInsideTable) {\n endBlock = this.getParentTable(endBlock);\n }\n if (!endBlock.isInHeaderFooter && !(endBlock.bodyWidget.containerWidget instanceof FootNoteWidget) && isNullOrUndefined(endBlock.nextRenderedWidget)) {\n if (!(endBlock.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote\n && endBlock.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(endBlock.bodyWidget.page.endnoteWidget);\n }\n }\n }\n };\n Layout.prototype.updateFieldElements = function () {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var fieldBegin = this.documentHelper.fields[i];\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n var fieldCode = this.documentHelper.selection.getFieldCode(fieldBegin);\n if (!isNullOrUndefined(fieldCode) && (fieldCode.toLowerCase().match('numpages') || fieldCode.toLowerCase().match('sectionpages')) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n var prevPageNum = textElement.text;\n textElement.text = this.documentHelper.pages.length.toString();\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page)\n && prevPageNum !== textElement.text) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var block = blockAdv;\n var isRealyoutList = false;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n if (this.isNeedToRelayout(blockAdv.bodyWidget)) {\n this.updateContainerForTable(block, viewer);\n //Handle layouting the block.\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n this.clearTableWidget(block, true, true, true);\n }\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n isRealyoutList = true;\n }\n else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n }\n var index = this.documentHelper.pages.indexOf(block.bodyWidget.page);\n if (index > 0 && block === block.bodyWidget.childWidgets[0] && block instanceof ParagraphWidget) {\n var val = block.bodyWidget.childWidgets[0].childWidgets[0].children;\n for (var i = 0; i < val.length; i++) {\n var element = val[i];\n if (element.margin.top > 0 && element.margin.top === this.getBeforeSpacing(element.paragraph)) {\n element.margin.top -= this.getBeforeSpacing(element.paragraph);\n }\n }\n }\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule && !isRealyoutList) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n if (!this.isRelayoutFootnote && block.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.footnoteWidget);\n }\n if (!(block.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote\n && block.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.endnoteWidget);\n }\n // }\n };\n Layout.prototype.isNeedToRelayout = function (bodyWidget) {\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatElement = bodyWidget.floatingElements[i];\n if (floatElement instanceof TableWidget || (floatElement instanceof ShapeBase &&\n (floatElement.textWrappingStyle === 'Square' || floatElement.textWrappingStyle === 'TopAndBottom'))) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n if (paragraph.height > (viewer.clientArea.height + viewer.clientArea.y)) {\n return;\n }\n var bodywid = paragraph.bodyWidget;\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n var skipFootNoteHeight = false;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n if (!isNullOrUndefined(prevWidget)) {\n var isPageBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithPageBreak : false;\n this.shiftToPreviousWidget(widget, viewer, prevWidget, isPageBreak);\n if ((isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) && !isPageBreak) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n if (isPageBreak) {\n viewer.updateClientAreaByWidget(widget);\n }\n }\n }\n var footWidget = [];\n if (!skipFootNoteHeight) {\n footWidget = this.getFootNoteWidgetsOf(widget);\n }\n skipFootNoteHeight = false;\n //let isContainsFootnote: boolean = false;\n if (this.isFitInClientArea(widget, viewer, footWidget)) {\n if (this.keepWithNext) {\n this.updateClientPositionForBlock(widget.containerWidget.firstChild, widget);\n this.keepWithNext = false;\n }\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n widget.y = viewer.clientActiveArea.y;\n if (widget.floatingElements.length > 0) {\n for (var k = 0; k < widget.floatingElements.length; k++) {\n var shape = widget.floatingElements[k];\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n if (shape instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(shape.y, shape);\n }\n }\n }\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget) {\n index++;\n if (!prevBodyWidget.lastChild.isEndsWithPageBreak) {\n this.updateContainerWidget(widget, prevBodyWidget, index, true, footWidget);\n }\n if (footWidget.length > 0) {\n if (prevBodyWidget.page.footnoteWidget) {\n for (var k = 0; k < footWidget.length; k++) {\n if (prevBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footWidget[k]) === -1 && widget.bodyWidget.page.index != footWidget[k].page.index) {\n prevBodyWidget.page.footnoteWidget.bodyWidgets.push(footWidget[k]);\n prevBodyWidget.page.footnoteWidget.height += footWidget[k].height;\n }\n }\n }\n }\n }\n if (widget.isEndsWithPageBreak && this.viewer instanceof PageLayoutViewer) {\n var nextBodyWidget = this.createOrGetNextBodyWidget(prevBodyWidget, this.viewer);\n nextBodyWidget = this.moveBlocksToNextPage(widget, true);\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n }\n else {\n var previousBlock = widget.previousRenderedWidget;\n var isPageBreak = false;\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithPageBreak &&\n this.viewer instanceof PageLayoutViewer) {\n isPageBreak = true;\n }\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1, isPageBreak, footWidget);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n //Paragraph moved to next page and client area get updated with footnote widget height.\n //So, skip considering footnote height.\n if (footWidget.length > 0) {\n skipFootNoteHeight = true;\n }\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n };\n /**\n * @private\n * Get the footnote of the block widget.\n *\n * @param {BlockWidget} widget BlockWidget instance.\n * @returns\n */\n Layout.prototype.getFootNotesOfBlock = function (widget, footnoteElements) {\n if (isNullOrUndefined(footnoteElements)) {\n footnoteElements = [];\n }\n if (widget.childWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.footnoteCollection.length; j++) {\n if (this.documentHelper.footnoteCollection[j].line.paragraph === widget) {\n //isContainsFootnote = true;\n footnoteElements.push(this.documentHelper.footnoteCollection[j]);\n }\n }\n }\n return footnoteElements;\n };\n Layout.prototype.getFootNotesWidgetsInLine = function (line) {\n var footnoteElements = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FootnoteElementBox) {\n footnoteElements.push(element);\n }\n }\n return this.getFootNoteWidgetsBy(line.paragraph, footnoteElements);\n };\n Layout.prototype.getFootNoteWidgetsBy = function (widget, footnoteElements) {\n var footWidgets = [];\n if (widget.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n if (footWidgets.length === 0 && (!isNullOrUndefined(widget.previousRenderedWidget) && widget.previousRenderedWidget.bodyWidget.page.footnoteWidget)) {\n for (var i = 0; i < widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.previousRenderedWidget) && widget.bodyWidget.previousRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.nextRenderedWidget) && widget.bodyWidget.nextRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n return footWidgets;\n };\n /**\n * @param widget\n * @private\n */\n Layout.prototype.getFootNoteWidgetsOf = function (widget, isShifting) {\n var footnoteWidgets = [];\n var footnoteElements = [];\n if (widget instanceof TableWidget) {\n for (var k_1 = 0; k_1 < widget.childWidgets.length; k_1++) {\n var row = widget.childWidgets[k_1];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n for (var x = 0; x < cell.childWidgets.length; x++) {\n var block = cell.childWidgets[x];\n footnoteElements = this.getFootNotesOfBlock(block, footnoteElements);\n var blockfootnoteWidgets = this.getFootNoteWidgetsBy(block, footnoteElements);\n for (var f = 0; f < blockfootnoteWidgets.length; f++) {\n if (footnoteWidgets.indexOf(blockfootnoteWidgets[f]) === -1) {\n footnoteWidgets.push(blockfootnoteWidgets[f]);\n }\n }\n }\n }\n }\n }\n else {\n footnoteElements = this.getFootNotesOfBlock(widget);\n if (footnoteElements.length > 0) {\n footnoteWidgets = this.getFootNoteWidgetsBy(widget, footnoteElements);\n }\n if (isShifting && footnoteWidgets.length === 0) {\n for (var k = 0; k < footnoteElements.length; k++) {\n footnoteWidgets.push(footnoteElements[k].bodyWidget);\n }\n }\n }\n return footnoteWidgets;\n };\n Layout.prototype.getFootNodeWidgetsToShiftToPage = function (paragraph) {\n var splittedWidgets = paragraph.getSplitWidgets();\n var footNoteWidgets = [];\n var toBodyWidget = paragraph.containerWidget;\n var fromBodyWidget;\n for (var i = 0; i < splittedWidgets.length; i++) {\n var footWidgets = this.getFootNoteWidgetsOf(splittedWidgets[i]);\n for (var j = 0; j < footWidgets.length; j++) {\n fromBodyWidget = footWidgets[j].containerWidget;\n if (toBodyWidget !== fromBodyWidget) {\n footNoteWidgets.push(footWidgets[j]);\n }\n }\n }\n return { 'footNoteWidgets': footNoteWidgets, 'fromBodyWidget': fromBodyWidget, 'toBodyWidget': toBodyWidget };\n };\n Layout.prototype.shiftTableWidget = function (table, viewer, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tables, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row, isClearHeight);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table);\n if (table.wrapTextAround && table.bodyWidget) {\n this.updateClientAreaForWrapTable(tables, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n return tables[tables.length - 1];\n };\n Layout.prototype.shiftRowWidget = function (tables, row, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var viewer = this.viewer;\n if (isClearHeight) {\n row.height = 0;\n }\n var rows = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isClearHeight) {\n cell.height = 0;\n }\n /* eslint-disable-next-line max-len */\n this.shiftCellWidget(cell, this.getMaxTopCellMargin(row) + row.topBorderWidth, this.getMaxBottomCellMargin(row) + row.bottomBorderWidth, isClearHeight);\n }\n viewer.updateClientAreaForRow(row, false);\n this.updateWidgetsToTable(tables, rows, row);\n return rows[rows.length - 1];\n };\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom, isClearHeight) {\n if (isNullOrUndefined(isClearHeight)) {\n isClearHeight = false;\n }\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer, isClearHeight);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n if (!isNullOrUndefined(paragraph.floatingElements)) {\n //this.shiftLayoutFloatingItems(paragraph as ParagraphWidget);\n // for (let i: number = 0; i < paragraph.floatingElements.length; i++) {\n // let shape: ShapeElementBox = paragraph.floatingElements[i];\n // this.layoutElement(shape, paragraph);\n // }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.updateContainerForTable = function (block, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(block, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n var isPageBreak = prevBodyWidget.lastChild.lastChild.isEndsWithPageBreak;\n if (prevBodyWidget !== block.containerWidget) {\n if (!isPageBreak) {\n this.updateContainerWidget(block, prevBodyWidget, index + 1, true);\n }\n else {\n viewer.updateClientArea(block.bodyWidget.sectionFormat, block.bodyWidget.page);\n }\n }\n if (block.isInHeaderFooter || this.viewer instanceof WebLayoutViewer) {\n block.containerWidget.height -= block.height;\n }\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n this.updateContainerForTable(table, viewer);\n this.viewer.updateClientAreaForBlock(table, true);\n var tempClientAreaX = this.viewer.clientArea.x;\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.updateVerticalPositionToTop(table, true);\n //const isPageLayout: boolean = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.documentHelper.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientArea.x = tempClientAreaX;\n }\n this.viewer.updateClientAreaForBlock(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.documentHelper.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index, isPageBreak, footWidget) {\n var firstLine = paragraphWidget.childWidgets[0];\n var keepLinesTogether = (paragraphWidget.paragraphFormat.keepLinesTogether && (this.viewer.clientActiveArea.y !== this.viewer.clientArea.y));\n var maxElementHeight = keepLinesTogether ? paragraphWidget.height : this.getMaxElementHeight(firstLine);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n // Get maximun height based on widow/orphan control.\n maxElementHeight = this.getMaximumLineHeightToSplit(paragraphWidget, maxElementHeight, viewer);\n // TODO: Footnote move on move entire paragraph.\n var footNoteInFirstLine = this.getFootNotesWidgetsInLine(firstLine);\n if (isNullOrUndefined(paragraphWidget.previousWidget) && footNoteInFirstLine.length > 0) {\n for (var i = 0; i < footNoteInFirstLine.length; i++) {\n for (var j = 0; j < footNoteInFirstLine[i].childWidgets.length; j++) {\n maxElementHeight += footNoteInFirstLine[i].childWidgets[j].height;\n }\n }\n //maxElementHeight += (paragraphWidget.bodyWidget.page.footnoteWidget.childWidgets[0] as ParagraphWidget).height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget) {\n var fromBodyWidget = paragraphWidget.containerWidget;\n if (paragraphWidget.childWidgets.indexOf(this.documentHelper.selection.start.currentWidget) !== -1 || paragraphWidget.childWidgets.indexOf(this.documentHelper.selection.end.currentWidget) !== -1) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n this.moveFootNotesToPage(footWidget, fromBodyWidget, previousBodyWidget);\n }\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n var line = paragraphWidget.childWidgets[i];\n if (this.isFitInClientArea(paragraphWidget, viewer, undefined)) {\n if (splittedWidget.childWidgets.length === 1) {\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n break;\n }\n else {\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n /* eslint-disable-next-line max-len */\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n /* eslint-disable-next-line max-len */\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, false);\n // nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, viewer);\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n nextBodyWidget.height += splittedWidget.height;\n splittedWidget.containerWidget = nextBodyWidget;\n if (nextBodyWidget != previousBodyWidget && previousBodyWidget.page.footnoteWidget) {\n footWidget = this.getFootNoteWidgetsOf(splittedWidget, true);\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n //paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n }\n else {\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n var startBlock = paragraphWidget;\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : this.splitParagraph(blockInfo.node, parseInt(blockInfo.position.index, 10));\n paragraphWidget = startBlock;\n this.keepWithNext = true;\n }\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n //footWidget = this.getFootNoteWidgetsOf(paragraphWidget);\n if (!isNullOrUndefined(previousBodyWidget.page.footnoteWidget)) {\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n }\n else if (!isNullOrUndefined(previousBodyWidget) && isNullOrUndefined(paragraphWidget.previousWidget)) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, previousBodyWidget.childWidgets.length, false);\n var startBlock = paragraphWidget;\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : this.splitParagraph(blockInfo.node, parseInt(blockInfo.position.index, 10));\n this.keepWithNext = true;\n nextBodyWidget = this.moveBlocksToNextPage(startBlock.previousWidget, true);\n this.updateClientPositionForBlock(paragraphWidget.previousWidget, paragraphWidget);\n // TODO: Handle moving footnote widget\n }\n else {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaximumLineHeightToSplit = function (paragraphWidget, maxElementHeight, viewer) {\n if (viewer.clientActiveArea.height >= maxElementHeight && !paragraphWidget.paragraphFormat.keepLinesTogether &&\n paragraphWidget.paragraphFormat.widowControl && !isNullOrUndefined(paragraphWidget.previousWidget) &&\n isNullOrUndefined(paragraphWidget.previousSplitWidget)) {\n var paragraphHeight = paragraphWidget.height;\n for (var m = paragraphWidget.childWidgets.length - 1; m >= 0; m--) {\n var lastLine = paragraphWidget.childWidgets[m];\n var lineHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > lineHeight) {\n paragraphHeight -= lastLine.height - lineHeight;\n }\n if (viewer.clientActiveArea.height >= paragraphHeight) {\n // Move entire paragraph to next page, If first line alone not fitted in the client area.\n if (m === 0) {\n maxElementHeight = paragraphWidget.height;\n }\n break;\n }\n paragraphHeight -= (lastLine).height;\n }\n }\n return maxElementHeight;\n };\n /**\n * @private\n * @param footnoteWidgets\n * @param fromBodyWidget\n * @param toBodyWidget\n */\n Layout.prototype.moveFootNotesToPage = function (footnoteWidgets, fromBodyWidget, toBodyWidget) {\n if (footnoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget) {\n var footNoteIndex = -1;\n var footNoteWidget = void 0;\n var insertIndex = 0;\n var check = false;\n for (var k = 0; k < footnoteWidgets.length; k++) {\n /* eslint-disable-next-line max-len */\n footNoteWidget = footnoteWidgets[k];\n footNoteIndex = fromBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget);\n if (footNoteIndex >= 0) {\n if (toBodyWidget.page.footnoteWidget === undefined) {\n this.addEmptyFootNoteToBody(toBodyWidget);\n }\n for (var i = 0; i < toBodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n var body = (toBodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference;\n if (body === (footNoteWidget).footNoteReference) {\n check = true;\n }\n }\n fromBodyWidget.page.footnoteWidget.bodyWidgets.splice(footNoteIndex, 1);\n if (toBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget) < 0 && !check) {\n var childLength = toBodyWidget.page.footnoteWidget.bodyWidgets.length;\n var fromPage = this.documentHelper.pages.indexOf(fromBodyWidget.page);\n var toPage = this.documentHelper.pages.indexOf(toBodyWidget.page);\n footNoteWidget.containerWidget = toBodyWidget.page.footnoteWidget;\n footNoteWidget.page = toBodyWidget.page;\n if (fromPage > toPage) {\n toBodyWidget.page.footnoteWidget.bodyWidgets.push(footNoteWidget);\n insertIndex++;\n }\n else {\n toBodyWidget.page.footnoteWidget.bodyWidgets.splice(insertIndex++, 0, footNoteWidget);\n }\n toBodyWidget.page.footnoteWidget.height += footNoteWidget.height;\n }\n fromBodyWidget.page.footnoteWidget.height -= footNoteWidget.height;\n }\n }\n if (fromBodyWidget.page.footnoteWidget && fromBodyWidget.page.footnoteWidget.bodyWidgets.length === 0) {\n fromBodyWidget.page.footnoteWidget = undefined;\n }\n if (fromBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(fromBodyWidget.page.footnoteWidget);\n }\n if (toBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(toBodyWidget.page.footnoteWidget);\n }\n }\n };\n Layout.prototype.addEmptyFootNoteToBody = function (bodyWidget) {\n var footnoteWidget = new FootNoteWidget();\n footnoteWidget.footNoteType = 'Footnote';\n footnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n // footnoteWidget.childWidgets.push(newParagraph);\n footnoteWidget.height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnoteWidget.margin = new Margin(0, footnoteWidget.height, 0, 0);\n bodyWidget.page.footnoteWidget = footnoteWidget;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget) {\n var height = 0;\n /* eslint-disable-next-line max-len */\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = this.documentHelper.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = this.documentHelper.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === this.documentHelper.pages.length - 1\n || this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n this.documentHelper.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = this.documentHelper.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer, blocks) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n var footHeight = 0;\n if (!isNullOrUndefined(blocks)) {\n if (blocks.length > 0) {\n if (blocks[0].containerWidget instanceof FootNoteWidget) {\n footHeight = blocks[0].containerWidget.margin.top;\n }\n for (var k = 0; k < blocks.length; k++) {\n for (var l = 0; l < blocks[k].childWidgets.length; l++) {\n footHeight += blocks[k].childWidgets[l].height;\n }\n }\n }\n }\n return viewer.clientActiveArea.height >= height + footHeight;\n };\n Layout.prototype.isLineInFootNote = function (line, footNotes) {\n for (var i = 0; i < footNotes.length; i++) {\n if (footNotes[i].line === line) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget, isPageBreak) {\n var fromBodyWidget = paragraphWidget.containerWidget;\n var toBodyWidget = previousWidget.containerWidget;\n var footNotes = [];\n var footNoteWidgets = [];\n if (toBodyWidget !== fromBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n }\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line);\n if (this.isLineInFootNote(line, footNotes)) {\n var footWidget = this.getFootNoteWidgetsBy(line.paragraph, footNotes);\n var height = 0;\n for (var m = 0; m < footWidget.length; m++) {\n var footContent = footWidget[m];\n for (var n = 0; n < footContent.childWidgets.length; n++) {\n height += footContent.childWidgets[n].height;\n }\n }\n if (footWidget.length > 0 && footWidget[0].containerWidget) {\n height += footWidget[0].containerWidget.margin.top;\n }\n maxElementHeight += height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n if (footNotes.length > 0 && this.isLineInFootNote(line, footNotes)) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(line.paragraph, footNotes));\n }\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n var newBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (paragraphWidget.containerWidget !== newBodyWidget) {\n newBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n }\n if (bodyWidget !== newBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n if (footNotes.length > 0) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(paragraphWidget, footNotes));\n toBodyWidget = newBodyWidget;\n }\n this.updateContainerWidget(paragraphWidget, newBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(fromBodyWidget.sectionFormat, fromBodyWidget.page);\n break;\n }\n }\n if (!isNullOrUndefined(footNoteWidgets) && footNoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget\n && fromBodyWidget != toBodyWidget) {\n this.moveFootNotesToPage(footNoteWidgets, fromBodyWidget, toBodyWidget);\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll, footWidget) {\n if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget) {\n return;\n }\n var previousWidget = widget.containerWidget;\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.documentHelper.pages[this.documentHelper.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.documentHelper.scrollToBottom();\n }\n if (isNullOrUndefined(page.nextPage) || page.nextPage.bodyWidgets[0].index !== widget.containerWidget.index) {\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(widget.floatingElements)) {\n for (var i = 0; i < widget.floatingElements.length; i++) {\n var shape = widget.floatingElements[i];\n if (shape.textWrappingStyle !== 'Inline') {\n bodyWidget.floatingElements.push(shape);\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(shape), 1);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n }\n }\n if (widget instanceof TableWidget && widget.wrapTextAround\n && widget.bodyWidget.floatingElements.indexOf(widget) !== -1) {\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(widget), 1);\n }\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n if (previousWidget && previousWidget.page && previousWidget.page.footnoteWidget && footWidget && footWidget.length > 0) {\n this.moveFootNotesToPage(footWidget, previousWidget, bodyWidget);\n }\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = (previousBlock && previousBlock.containerWidget.equals(block.containerWidget)) ?\n previousBlock.containerWidget : block.containerWidget;\n index = previousBlock && previousBlock.containerWidget.equals(block.containerWidget) ?\n prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n Layout.prototype.moveBlocksToNextPage = function (block, moveFootnoteFromLastBlock) {\n var body = block.bodyWidget;\n var page = body.page;\n var pageIndex = page.index + 1;\n var nextPage = undefined;\n var nextBody = undefined;\n var insertPage = false;\n if (this.documentHelper.pages.length > pageIndex) {\n nextPage = this.documentHelper.pages[pageIndex];\n if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0])) {\n nextPage = undefined;\n insertPage = true;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n }\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n if (insertPage) {\n this.documentHelper.insertPage(pageIndex, nextPage);\n }\n this.clearLineMeasures();\n }\n // eslint-disable no-constant-condition\n do {\n var lastBlock = void 0;\n if (body.lastChild instanceof FootNoteWidget) {\n lastBlock = body.lastChild.previousWidget;\n }\n else {\n lastBlock = body.lastChild;\n }\n if (moveFootnoteFromLastBlock) {\n var footWidget = this.getFootNoteWidgetsOf(lastBlock);\n this.moveFootNotesToPage(footWidget, body, nextBody);\n }\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.splice(body.childWidgets.indexOf(lastBlock), 1);\n nextBody.childWidgets.splice(0, 0, lastBlock);\n if (lastBlock instanceof TableWidget && (body.floatingElements.indexOf(lastBlock) !== -1)) {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock), 1);\n //nextBody.floatingElements.push(lastBlock);\n }\n if (lastBlock instanceof ParagraphWidget && lastBlock.floatingElements.length > 0) {\n for (var m = 0; m < lastBlock.floatingElements.length; m++) {\n if (body.floatingElements.indexOf(lastBlock.floatingElements[m]) !== -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock.floatingElements[m]), 1);\n nextBody.floatingElements.push(lastBlock.floatingElements[m]);\n }\n }\n }\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n // eslint-disable-next-line no-constant-condition\n } while (true);\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n //endregion\n //#region Relayout Parargaph\n /* eslint-disable */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex, isBidi, isSkip) {\n if (!this.allowLayout) {\n return;\n }\n this.isFootnoteContentChanged = false;\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout = lineWidget.previousLine;\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n lineToLayout.paragraph.splitLtrAndRtlText(lineToLayout.indexInOwner);\n lineToLayout.paragraph.combineconsecutiveRTL(lineToLayout.indexInOwner);\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if ((this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n paragraph.bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n // } else if (bodyWidget instanceof FootNoteWidget) {\n // this.isRelayoutFootnote = true;\n // this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n // this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n // this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n // // curretBlock.containerWidget.height -= curretBlock.height;\n // this.viewer.clientActiveArea.y = paragraph.containerWidget.y;\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (!isNullOrUndefined(paragraph.containerWidget) && !isNullOrUndefined(paragraph.containerWidget.containerWidget) && paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n var y = paragraph.bodyWidget.containerWidget.y;\n this.viewer.cutFromTop(y);\n this.documentHelper.owner.editor.isFootNoteInsert = true;\n this.layoutfootNote(paragraph.containerWidget.containerWidget);\n return;\n }\n else if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n this.layoutNextItemsBlock(paragraph, this.viewer);\n var prevWidget = paragraph.getSplitWidgets()[0].previousRenderedWidget;\n if (!isNullOrUndefined(prevWidget) && (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak)) {\n this.viewer.cutFromTop(paragraph.y + paragraph.height);\n if (paragraph.containerWidget !== prevWidget.containerWidget && !isNullOrUndefined(prevWidget.containerWidget)) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = paragraph.containerWidget;\n var newBodyWidget_1 = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(paragraph);\n //this.updateContainerWidget(paragraph as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n if (!isNullOrUndefined(newBodyWidget_1.page.footnoteWidget)) {\n this.moveFootNotesToPage(footWidgets, newBodyWidget_1, prevBodyWidget);\n }\n }\n }\n var page = this.documentHelper.pages.length;\n var foot;\n var newBodyWidget = this.documentHelper.pages[page - 1].bodyWidgets[0];\n if (this.isFootnoteContentChanged && !isNullOrUndefined(paragraph.bodyWidget.page.footnoteWidget)) {\n foot = paragraph.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n if (this.isEndnoteContentChanged && !isNullOrUndefined(newBodyWidget.page.endnoteWidget)) {\n foot = newBodyWidget.page.endnoteWidget;\n var clientArea = this.viewer.clientArea.clone();\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n this.viewer.cutFromTop(newBodyWidget.childWidgets[newBodyWidget.childWidgets.length - 1].y\n + newBodyWidget.childWidgets[newBodyWidget.childWidgets.length - 1].height);\n this.layoutfootNote(foot);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = clientActiveArea;\n //this.viewer.updateClientAreaForBlock(foot.block, false);\n }\n };\n //#endregion\n //RTL Feature layout start\n Layout.prototype.isContainsRtl = function (lineWidget) {\n if (this.viewer.documentHelper.isSelectionChangedOnMouseMoved && !this.isDocumentContainsRtl) {\n return false;\n }\n var isContainsRTL = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof TextElementBox) {\n isContainsRTL = lineWidget.children[i].characterFormat.bidi || lineWidget.children[i].characterFormat.bdo === 'RTL'\n || this.documentHelper.textHelper.isRTLText(lineWidget.children[i].text);\n if (isContainsRTL) {\n if (!this.isDocumentContainsRtl) {\n this.isDocumentContainsRtl = isContainsRTL;\n }\n break;\n }\n }\n }\n return isContainsRTL;\n };\n // Re arranges the elements for Right to left layotuing.\n /* eslint-disable */\n // public reArrangeElementsForRtl(line: LineWidget, isParaBidi: boolean): void {\n // if (line.children.length === 0) {\n // return;\n // }\n // let lastAddedElementIsRtl: boolean = false;\n // let lastAddedRtlElementIndex: number = -1;\n // let tempElements: ElementBox[] = [];\n // for (let i: number = 0; i < line.children.length; i++) {\n // let element: ElementBox = line.children[i];\n // let elementCharacterFormat: WCharacterFormat = undefined;\n // if (element.characterFormat) {\n // elementCharacterFormat = element.characterFormat;\n // }\n // let isRtl: boolean = false;\n // let text: string = '';\n // let containsSpecchrs: boolean = false;\n // if (element instanceof BookmarkElementBox) {\n // if (isParaBidi) {\n // if (lastAddedElementIsRtl || element.bookmarkType === 0 && element.nextElement\n // && element.nextElement.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.nextElement.text)\n // || element.bookmarkType === 1 && element.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.text)) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedElementIsRtl ? lastAddedRtlElementIndex : lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // } else {\n // tempElements.push(element);\n // }\n // continue;\n // }\n // if (element instanceof TextElementBox) {\n // text = (element as TextElementBox).text;\n // containsSpecchrs = this.documentHelper.textHelper.containsSpecialCharAlone(text.trim());\n // if (containsSpecchrs) {\n // if (elementCharacterFormat.bidi && isParaBidi) {\n // text = HelperMethods.reverseString(text);\n // for (let k: number = 0; k < text.length; k++) {\n // let ch: string = this.documentHelper.textHelper.inverseCharacter(text.charAt(k));\n // text = text.replace(text.charAt(k), ch);\n // }\n // element.text = text;\n // }\n // }\n // let textElement: ElementBox = element.nextElement;\n // if (element instanceof TextElementBox && this.documentHelper.textHelper.containsNumberAlone(element.text.trim())) {\n // while (textElement instanceof TextElementBox && textElement.text.trim() !== '' && (this.documentHelper.textHelper.containsNumberAlone(textElement.text.trim()) || this.documentHelper.textHelper.containsSpecialCharAlone(textElement.text.trim()))) {\n // element.text = element.text + textElement.text;\n // element.line.children.splice(element.line.children.indexOf(textElement), 1);\n // textElement = element.nextElement;\n // }\n // element.width = this.documentHelper.textHelper.getTextSize(element as TextElementBox, element.characterFormat);\n // }\n // }\n // let isRTLText: boolean = false;\n // // let isNumber: boolean = false;\n // // The list element box shold be added in the last position in line widget for the RTL paragraph \n // // and first in the line widget for LTR paragrph.\n // if (element instanceof ListTextElementBox) {\n // isRtl = isParaBidi;\n // } else { // For Text element box we need to check the character format and unicode of text to detect the RTL text. \n // isRTLText = this.documentHelper.textHelper.isRTLText(text);\n // isRtl = isRTLText || elementCharacterFormat.bidi\n // || elementCharacterFormat.bdo === 'RTL';\n // }\n // if (element instanceof FieldElementBox || this.isRtlFieldCode) {\n // if ((element as FieldElementBox).fieldType === 0) {\n // this.isRtlFieldCode = true;\n // } else if ((element as FieldElementBox).fieldType === 1) {\n // this.isRtlFieldCode = false;\n // }\n // isRtl = false;\n // }\n // // If the text element box contains only whitespaces, then need to check the previous and next elements.\n // if (!isRtl && !isNullOrUndefined(text) && text !== '' && ((text !== '' && text.trim() === '') || containsSpecchrs)) {\n // let elements: ElementBox[] = line.children;\n // //Checks whether the langugae is RTL.\n // if (elementCharacterFormat.bidi) {\n // // If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // if (lastAddedElementIsRtl) {\n // isRtl = true;\n // // Else, Check for next element.\n // } else if (i + 1 < line.children.length && line.children[i + 1] instanceof TextElementBox) {\n // text = (elements[i + 1] as TextElementBox).text;\n // isRtl = this.documentHelper.textHelper.isRTLText(text) || elements[i + 1].characterFormat.bidi\n // || elements[i + 1].characterFormat.bdo === 'RTL';\n // }// If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // } else if (lastAddedElementIsRtl) {\n // isRtl = true;\n // }\n // }\n // // Preserve the isRTL value, to reuse it for navigation and selection.\n // element.isRightToLeft = isRtl;\n // //Adds the text element to the line\n // if (isRtl && elementCharacterFormat.bdo !== 'LTR') {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // tempElements.splice(0, 0, element);\n // }\n // lastAddedElementIsRtl = true;\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // } else {\n // if (lastAddedElementIsRtl && element instanceof ImageElementBox) {\n // if (elementCharacterFormat.bidi) {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // }\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // lastAddedElementIsRtl = false;\n // }\n // }\n // }\n // // Clear the elemnts and reassign the arranged elements.\n // line.children = [];\n // line.children = tempElements;\n // }\n Layout.prototype.shiftElementsForRTLLayouting = function (line, paraBidi) {\n ////Check whether span has bidi value\n var textRangeBidi = this.hasTextRangeBidi(line);\n if (this.isContainsRTLText(line) || paraBidi || textRangeBidi) {\n ////Splits the child elements of a line by consecutive RTL, LTR text and word breaking characters.\n var characterRangeTypes = [];\n var lineElementsBidiValues = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox && element.height > 0 && !(element.isPageBreak)) {\n var textRange = element;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n if (textRange.text == \"\\t\") {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n element.isRightToLeft = characterRangeTypes[characterRangeTypes.length - 1] == CharacterRangeType.RightToLeft;\n }\n else if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n var isStartMark = this.isStartMarker(element);\n var isEndMark = this.isEndMarker(element);\n if (isStartMark && i < line.children.length - 1) {\n var nextltWidget = this.getNextValidWidget(i + 1, line);\n if (!isNullOrUndefined(nextltWidget) && (nextltWidget instanceof TextElementBox)\n && nextltWidget.height > 0) {\n var textRange = nextltWidget;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n //Since tab-stop in the line changes the reordering, here we consider an tab-stop widget as Tab.\n if (nextltWidget.text === '\\t') {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (!isEndMark && i > 0) {\n lineElementsBidiValues.push(lineElementsBidiValues[lineElementsBidiValues.length - 1]);\n characterRangeTypes.push(characterRangeTypes[characterRangeTypes.length - 1]);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (element instanceof ListTextElementBox && paraBidi) {\n lineElementsBidiValues.push(paraBidi);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n ////Sets CharacterRangeType of word split characters as (WordSplit | RTL), if word split characters are present between splitted RTL text in the same layouted line.\n ////This code handles for both single and multiple Text Ranges of a line (Special case for ordering elements)\n var rtlStartIndex = -1;\n var isPrevLTRText = undefined;\n for (var i = 0; i < characterRangeTypes.length; i++) {\n if (i + 1 < lineElementsBidiValues.length\n && lineElementsBidiValues[i] != lineElementsBidiValues[i + 1]) {\n if (rtlStartIndex != -1) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n isPrevLTRText = null;\n continue;\n }\n if (characterRangeTypes[i] == CharacterRangeType.RightToLeft || characterRangeTypes[i] == CharacterRangeType.LeftToRight\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1\n || (isNullOrUndefined(isPrevLTRText) || !isPrevLTRText) && lineElementsBidiValues[i]) {\n if (rtlStartIndex == -1 && characterRangeTypes[i] != CharacterRangeType.LeftToRight) {\n rtlStartIndex = i;\n }\n else if (rtlStartIndex == -1) {\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n continue;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = characterRangeTypes[i] == CharacterRangeType.RightToLeft\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1 ? i : -1;\n }\n }\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n }\n if (rtlStartIndex != -1 && rtlStartIndex < characterRangeTypes.length - 1) {\n this.updateCharacterRange(line, characterRangeTypes.length - 1, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n if (characterRangeTypes.length != line.children.length) {\n ////This exception is thrown to avoid, unhandled exception in RTL/LTR reordering logic.\n throw new Error(\"Splitted Widget count mismatch while reordering layouted child widgets of a line\");\n }\n var reorderedWidgets = this.reorderElements(line, characterRangeTypes, lineElementsBidiValues, paraBidi);\n lineElementsBidiValues.length = 0;\n characterRangeTypes.length = 0;\n if (line.children.length > 0) {\n line.layoutedElements = reorderedWidgets;\n //elements.Clear();\n //line.children = reorderedWidgets;\n ////ReCalculate the height and baseline offset once again.\n //UpdateMaxElement();\n }\n }\n return paraBidi;\n };\n Layout.prototype.isStartMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 0;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 0;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 0;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 0;\n }\n return false;\n };\n Layout.prototype.isEndMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 1;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 1;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 1;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 1;\n }\n return false;\n };\n Layout.prototype.getNextValidWidget = function (startIndex, layoutedWidgets) {\n for (var i = startIndex; i < layoutedWidgets.children.length; i++) {\n var element = layoutedWidgets.children[i];\n if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n continue;\n }\n else {\n return element[i];\n }\n }\n return null;\n };\n Layout.prototype.hasTextRangeBidi = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var elementBox = line.children[i];\n if (elementBox instanceof TextElementBox) {\n var textRange = elementBox;\n if (textRange.characterFormat.bidi) {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.isContainsRTLText = function (line) {\n var documentHelper = line.paragraph.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n var isContainsRTL = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof TextElementBox) {\n isContainsRTL = line.children[i].characterFormat.bidi || line.children[i].characterFormat.bidi == true\n || textHelper.isRTLText(line.children[i].text);\n if (isContainsRTL)\n break;\n }\n }\n return isContainsRTL;\n };\n Layout.prototype.updateCharacterRange = function (line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes) {\n var endIndex = i;\n if (!lineElementsBidiValues[i]) {\n if (characterRangeTypes[i] === CharacterRangeType.LeftToRight) {\n endIndex--;\n }\n for (var j = endIndex; j >= rtlStartIndex; j--) {\n if (characterRangeTypes[j] != CharacterRangeType.WordSplit) {\n endIndex = j;\n break;\n }\n }\n }\n for (var j = rtlStartIndex; j <= endIndex; j++) {\n if (characterRangeTypes[j] == CharacterRangeType.WordSplit) {\n characterRangeTypes[j] = CharacterRangeType.RightToLeft | CharacterRangeType.WordSplit;\n var previousIndex = j - 1;\n var nextIndex = j + 1;\n //// Handled a special behavior, When a EastAsia font is \"Times New Roman\" for text range.\n //// Group of word split character is exist in between a RTL characters, MS Word reverse a corresponding word split characters.\n //// So, that we have reverse the word split characters.\n if (previousIndex >= 0 && nextIndex < characterRangeTypes.length\n && characterRangeTypes[previousIndex] == CharacterRangeType.RightToLeft\n && (characterRangeTypes[nextIndex] == CharacterRangeType.RightToLeft || characterRangeTypes[nextIndex] == CharacterRangeType.Number)\n && line.children[j] instanceof TextElementBox) {\n var textRange = line.children[j];\n if (textRange.characterFormat.fontFamilyBidi == \"Times New Roman\") {\n var charArray = textRange.text.split(\"\");\n var reverseArray = charArray.reverse();\n var joinArray = reverseArray.join(\"\");\n textRange.text = joinArray;\n }\n }\n }\n }\n };\n Layout.prototype.reorderElements = function (line, characterRangeTypes, listElementsBidiValues, paraBidi) {\n var insertIndex = 0, lastItemIndexWithoutRTLFlag = -1, consecutiveRTLCount = 0, consecutiveNumberCount = 0;\n var reorderedElements = [];\n var prevCharType = CharacterRangeType.LeftToRight;\n var prevBidi = false;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n var textElement = element;\n textElement.characterRange = characterRangeTypes[i];\n var isRTLText = (textElement.characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft || textElement.characterRange == CharacterRangeType.Number;\n var isBidi = listElementsBidiValues[i];\n ////If tab-stop is exist with in the line then we have to consider the below behaviours\n if (characterRangeTypes[i] == CharacterRangeType.Tab) {\n if (paraBidi) {\n ////When para bidi is true, reordering is performed until tab stop position and break the reordering and then again reordering is performed for the remaining contents which exist after the tab-stop. \n ////Assume if we have an tab stop in center of the line, then the reordering is performed until the tab stop position and stop and place a tab stop and starts reordering for the remaining contents. \n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n prevCharType = CharacterRangeType.LeftToRight;\n prevBidi = false;\n reorderedElements.splice(insertIndex, 0, element);\n continue;\n }\n else if (isBidi) {\n ////If text range bidi is true for the tab stop widget, MS Word does not consider this tab-stop bidi as LTR Bidi and does not shift it as per our reordering. \n ////Instead its consider this widget as non-bidi LTR and do the reordering.\n isBidi = false;\n }\n }\n if (i > 0 && prevBidi != isBidi) {\n if (paraBidi) {\n ////If Bidi of paragraph is true, then start inserting widgets from first (index 0).\n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n }\n else {\n ////If Bidi of paragraph is false, then start inserting widgets from last (reorderedWidgets.Count).\n lastItemIndexWithoutRTLFlag = reorderedElements.length - 1;\n }\n ////If Bidi for previous and next widget differs, we have to reset consecutive number to 0.\n consecutiveNumberCount = 0;\n }\n if (!isBidi && !isRTLText) {\n if (paraBidi) {\n if (consecutiveRTLCount > 0 && prevBidi == isBidi) {\n insertIndex += consecutiveRTLCount;\n }\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n }\n else {\n reorderedElements.push(element);\n insertIndex = i + 1;\n }\n consecutiveRTLCount = 0;\n lastItemIndexWithoutRTLFlag = paraBidi ? insertIndex - 1 : reorderedElements.length - 1;\n }\n else if (isRTLText || (isBidi && textElement.characterRange == CharacterRangeType.WordSplit\n && (prevCharType == CharacterRangeType.RightToLeft || this.isInsertWordSplitToLeft(characterRangeTypes, listElementsBidiValues, i)))) {\n consecutiveRTLCount++;\n insertIndex = lastItemIndexWithoutRTLFlag + 1;\n if (textElement.characterRange == CharacterRangeType.Number) {\n if (prevCharType == CharacterRangeType.Number) {\n ////Moves the insertIndex to the right after the previous consecutive number.\n insertIndex += consecutiveNumberCount;\n }\n ////Increments consecutive number counter, to decide how much position the next number text range (widget) has to be moved and inserted towards right of insertIndex.\n consecutiveNumberCount++;\n }\n reorderedElements.splice(insertIndex, 0, element);\n }\n else {\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n consecutiveRTLCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.Number) {\n ////Resets the consecutive number counter when character range is not a number.\n consecutiveNumberCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.WordSplit) {\n ////Note: Handled to set only CharacterRangeType.RightToLeft and CharacterRangeType.LeftToRight\n ////For CharacterRangeType.WordSplit | CharacterRangeType.RightToLeft case, the IsInsertWordSplitToLeft method will return true.\n prevCharType = textElement.characterRange;\n }\n prevBidi = isBidi;\n }\n return reorderedElements;\n };\n Layout.prototype.isInsertWordSplitToLeft = function (characterRangeTypes, lineElementsBidiValues, elementIndex) {\n for (var i = elementIndex + 1; i < characterRangeTypes.length; i++) {\n if ((characterRangeTypes[i] & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft) {\n return true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n if (lineElementsBidiValues[i]) {\n return false;\n }\n else {\n ////If bidi is true for previous LTR and bidi is false for next LTR, then insert Word split to before previous inserted widget.\n return true;\n }\n }\n }\n return true;\n };\n Layout.prototype.shiftLayoutFloatingItems = function (paragraph) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var element = paragraph.floatingElements[i];\n var position = this.getFloatingItemPoints(element);\n var height = position.y - element.y;\n element.x = position.x;\n element.y = position.y;\n if (element instanceof ShapeElementBox) {\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var block = element.textFrame.childWidgets[j];\n if (block instanceof ParagraphWidget) {\n block.y = block.y + height;\n }\n else if (block instanceof TableWidget) {\n this.shiftChildLocationForTableWidget(block, height);\n }\n }\n }\n }\n };\n //RTL feature layout end\n Layout.prototype.getFloatingItemPoints = function (floatElement) {\n var paragraph = floatElement.line.paragraph;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var indentX = 0;\n var indentY = 0;\n if (paragraph) {\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var rightMargin = HelperMethods.convertPointToPixel(sectionFormat.rightMargin);\n var topMargin = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var bottomMargin = sectionFormat.bottomMargin > 0 ? HelperMethods.convertPointToPixel(sectionFormat.bottomMargin) : 48;\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var pageWidth = HelperMethods.convertPointToPixel(sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var pageClientWidth = pageWidth - (leftMargin + rightMargin);\n var pageClientHeight = pageHeight - topMargin - bottomMargin;\n //Need to consider RTL layout.\n if (paragraph.isInHeaderFooter && sectionFormat.topMargin <= 0) {\n topMargin = Math.abs(topMargin) > 0 ? Math.abs(topMargin)\n : HelperMethods.convertPointToPixel(sectionFormat.headerDistance) + (paragraph.height);\n }\n else {\n topMargin = topMargin > 0 ? topMargin : 48;\n }\n //Update the top margin as text body y position when text body y position exceeds the top margin. \n if (!paragraph.isInHeaderFooter && topMargin < this.viewer.clientArea.y) {\n topMargin = this.viewer.clientArea.y;\n }\n var mIsYPositionUpdated = false;\n var textWrapStyle = 'InFrontOfText';\n //if (textWrapStyle !== 'Inline') {\n var isLayoutInCell = false;\n var vertOrigin = floatElement.verticalOrigin;\n var horzOrigin = floatElement.horizontalOrigin;\n var horzAlignment = floatElement.horizontalAlignment;\n var vertAlignment = floatElement.verticalAlignment;\n var verticalPercent = floatElement.verticalRelativePercent;\n var horizontalPercent = floatElement.horizontalRelativePercent;\n var shapeHeight = floatElement.height;\n //Need to update size width for Horizontal Line when width exceeds client width.\n // if(shape !== null && shape.IsHorizontalRule && size.Width > m_layoutArea.ClientActiveArea.Width)\n // size.Width = m_layoutArea.ClientActiveArea.Width;\n var shapeWidth = floatElement.width;\n var vertPosition = floatElement.verticalPosition;\n var horzPosition = floatElement.horizontalPosition;\n var layoutInCell = floatElement.layoutInCell;\n var autoShape = void 0;\n if (floatElement instanceof ShapeElementBox) {\n autoShape = floatElement.autoShapeType;\n }\n //Word 2013 Layout picture in table cell even layoutInCell property was False.\n if (paragraph.isInsideTable && layoutInCell) {\n isLayoutInCell = true;\n indentY = this.getVerticalPosition(floatElement, vertPosition, vertOrigin, textWrapStyle);\n indentX = this.getHorizontalPosition(floatElement.width, floatElement, horzAlignment, horzOrigin, horzPosition, textWrapStyle, paragraph.associatedCell.cellFormat.cellWidth);\n }\n else {\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n switch (vertOrigin) {\n case 'Line':\n indentY = this.documentHelper.selection.getTop(floatElement.line);\n break;\n default:\n indentY = this.viewer.clientActiveArea.y;\n break;\n }\n switch (horzOrigin) {\n case 'Character':\n indentX = this.viewer.clientActiveArea.x;\n break;\n default:\n switch (horzAlignment) {\n case 'Center':\n indentX = (this.viewer.clientArea.width / 2) - (floatElement.width / 2);\n break;\n default:\n indentX = this.viewer.clientArea.x;\n break;\n }\n break;\n }\n }\n else {\n if (mIsYPositionUpdated) { /* Upadte the Y Coordinate of floating image when floating image postion is changed based on the wrapping style. */\n indentY = this.viewer.clientArea.y;\n }\n else {\n switch (vertOrigin) {\n case 'Page':\n case 'TopMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Top':\n indentY = vertPosition;\n break;\n case 'Center':\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight) / 2;\n }\n else {\n indentY = (pageHeight - shapeHeight) / 2;\n }\n break;\n case 'Outside':\n case 'Bottom':\n if (vertOrigin === 'Page' && vertAlignment === 'Bottom') {\n indentY = pageHeight - shapeHeight;\n }\n else {\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight);\n }\n else if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n break;\n case 'Inside':\n if (vertOrigin === 'Page') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n else {\n //Need to ensure this behaviour.\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = ((topMargin - shapeHeight) / 2 - headerDistance);\n }\n }\n break;\n case 'None':\n if (Math.abs(verticalPercent) <= 1000) {\n indentY = pageHeight * (verticalPercent / 100);\n }\n else {\n indentY = vertPosition;\n }\n break;\n }\n break;\n case 'Line':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n //Need to update line widget height instead of client active area.\n indentY = this.viewer.clientActiveArea.y;\n break;\n case 'Center':\n indentY = this.viewer.clientActiveArea.y - shapeHeight / 2;\n break;\n case 'Outside':\n case 'Bottom':\n indentY = this.viewer.clientActiveArea.y - shapeHeight;\n break;\n case 'None':\n indentY = Math.round(paragraph.y) + vertPosition;\n break;\n }\n break;\n case 'BottomMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n indentY = (pageHeight - bottomMargin);\n break;\n case 'Center':\n indentY = pageHeight - bottomMargin + ((bottomMargin - shapeHeight) / 2);\n break;\n case 'Outside':\n case 'Bottom':\n if (paragraph.bodyWidget.page.index + 1 % 2 !== 0 && vertAlignment === 'Outside') {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = pageHeight - shapeHeight;\n }\n break;\n case 'None':\n indentY = pageHeight - bottomMargin + vertPosition;\n break;\n }\n break;\n case 'InsideMargin':\n case 'OutsideMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n if (vertOrigin === 'InsideMargin') {\n if (vertOrigin === 'InsideMargin' && paragraph.bodyWidget.page.index + 1 % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : topMargin - shapeHeight;\n }\n break;\n case 'Top':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : 0;\n }\n break;\n case 'Center':\n if (vertOrigin === 'OutsideMargin') {\n //Need to ensure this.\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2 : (topMargin - shapeHeight) / 2;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2;\n }\n else {\n indentY = (topMargin - shapeHeight) / 2;\n }\n }\n break;\n case 'Outside':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = (pageHeight - bottomMargin);\n }\n else {\n indentY = (topMargin - shapeHeight);\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? topMargin - shapeHeight : pageHeight - bottomMargin;\n }\n break;\n case 'Bottom':\n if (vertOrigin === 'OutsideMargin') {\n indentY = (paragraph.bodyWidget.page.index + 1) !== 0 ? pageHeight - shapeHeight : topMargin - shapeHeight;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = topMargin - shapeHeight;\n }\n }\n break;\n case 'None':\n break;\n }\n break;\n case 'Paragraph':\n var space = 0;\n //let prevsibling: BlockWidget = paragraph.previousWidget as BlockWidget;\n // if (floatElement) {\n // //Need to handle DocIO Implementation.\n // if (Math.round(paragraph.y) !== Math.round(topMargin) && (prevsibling instanceof ParagraphWidget)\n // && ((paragraph.paragraphFormat.beforeSpacing > prevsibling.paragraphFormat.afterSpacing)\n // || (prevsibling.paragraphFormat.afterSpacing < 14)\n // && !paragraph.paragraphFormat.contextualSpacing)) {\n // space = prevsibling.paragraphFormat.afterSpacing;\n // }\n // }\n // eslint-disable-next-line max-len\n //Floating item Y position is calculated from paragraph original Y position not from wrapped paragraph Y(ParagraphLayoutInfo.YPosition) position.\n indentY = Math.round(paragraph.y) + space + vertPosition;\n break;\n case 'Margin':\n //If header distance is more than top margin, then calculate the position of item based on header distance.\n //As per Microsoft Word behavior, it is need to consider paragraph height along with the distance.\n if (paragraph.isInHeaderFooter && headerDistance > topMargin) {\n //Need to udpate.\n indentY = (headerDistance + (paragraph.height)) + vertPosition;\n }\n else {\n indentY = topMargin + vertPosition;\n }\n switch (vertAlignment) {\n case 'Top':\n indentY = topMargin;\n break;\n case 'Center':\n indentY = topMargin + (pageClientHeight - shapeHeight) / 2;\n break;\n case 'Outside':\n case 'Bottom':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'None':\n break;\n }\n break;\n default:\n //Need to analyze further.\n indentY = this.viewer.clientArea.y - vertPosition;\n break;\n }\n }\n // if (horzOrigin !== 'Column' && horzAlignment !== 'None') {\n // indentX = this.viewer.clientArea.x;\n // //Update the floating item x position to zero when floating item’s width\n // //exceeds the page width when floating item and it wrapping style is not equal to \n // // infront of text and behind text and also vertical origin is not equal to paragraph.\n // } else \n if (paragraph && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind' &&\n vertOrigin === 'Paragraph' && shapeWidth >= pageWidth) {\n indentX = 0;\n }\n else {\n switch (horzOrigin) {\n case 'Page':\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n if (isLayoutInCell) {\n indentX = (paragraph.associatedCell.cellFormat.cellWidth - shapeWidth) / 2;\n }\n else {\n indentX = (pageWidth - shapeWidth) / 2;\n }\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Outside':\n case 'Right':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.cellFormat.cellWidth - shapeWidth;\n }\n else {\n indentX = pageWidth - shapeWidth;\n }\n break;\n case 'None':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.x + horzPosition;\n }\n else if (floatElement instanceof ShapeElementBox) {\n indentX = horzPosition;\n // Shape pItemShape = paraItem as Shape;\n // float horRelPercent = pItemShape !== null ? pItemShape.TextFrame.HorizontalRelativePercent\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalRelativePercent;\n // if (Math.Abs(horRelPercent) <= 1000)\n // indentX = pageWidth * (horRelPercent / 100);\n // else\n // indentX = pItemShape !== null ? pItemShape.HorizontalPosition\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalPosition;\n }\n else {\n indentX = horzPosition;\n }\n break;\n }\n if (indentX < 0 && isLayoutInCell) {\n indentX = paragraph.associatedCell.x;\n }\n break;\n case 'Column':\n //Update the Xposition while wrapping element exsit in the paragraph\n if (this.viewer.clientActiveArea.x < paragraph.x) {\n // let cellPadings = 0;\n // if (paragraph.isInsideTable) {\n // CellLayoutInfo cellLayoutInfo = (ownerPara.GetOwnerEntity() as IWidget).LayoutInfo as CellLayoutInfo;\n // cellPadings = cellLayoutInfo.Paddings.Left + cellLayoutInfo.Paddings.Right;\n // }\n // float minimumWidthRequired = DEF_MIN_WIDTH_SQUARE;\n // if (textWrapStyle === TextWrappingStyle.Tight || textWrapStyle === TextWrappingStyle.Through)\n // minimumWidthRequired = ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013 ?\n // DEF_MIN_WIDTH_2013_TIGHTANDTHROW : DEF_MIN_WIDTH_TIGHTANDTHROW;\n // minimumWidthRequired -= cellPadings;\n // //Re Update the x position to the page left when paragraph starting position not equal to the \n // //column starting and current inline item is x position equal to the column left position.\n // if ((ownerPara.IsXpositionUpated && ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013)\n // || paragraphLayoutInfo.XPosition > (pageWidth - minimumWidthRequired - rightMargin)\n // || paragraphLayoutInfo.IsXPositionReUpdate)\n // indentX = layouter.ClientLayoutArea.Left + horzPosition;\n // else\n indentX = paragraph.x + horzPosition;\n }\n else {\n //Re Update the x position to the page left when word version not equal to 2013 \n //and wrapping style not equal to infront of text and behind text. \n if ((textWrapStyle === 'InFrontOfText' || textWrapStyle === 'Behind')) {\n if (!(floatElement.paragraph.isInsideTable) && (autoShape === 'StraightConnector' || autoShape === 'Rectangle')) {\n indentX = horzPosition + HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n }\n else {\n indentX = paragraph.x + horzPosition;\n }\n }\n else {\n indentX = this.viewer.clientActiveArea.x + horzPosition;\n }\n }\n //Update the Wrapping element right position as page right when \n //wrapping element right position exceeds the page right except position \n //InFrontOfText and behindText wrapping style.\n if (textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind'\n && Math.round(indentX + shapeWidth) > Math.round(pageWidth) && shapeWidth < pageWidth) {\n indentX = (pageWidth - shapeWidth);\n }\n if (paragraph.paragraphFormat.leftIndent && paragraph.isInHeaderFooter) {\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.leftIndent);\n indentX -= leftIndent;\n }\n switch (horzAlignment) {\n case 'Center':\n indentX = this.viewer.clientActiveArea.x + (this.viewer.clientActiveArea.width - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = this.viewer.clientActiveArea.x;\n break;\n case 'Right':\n indentX = this.viewer.clientActiveArea.x + this.viewer.clientActiveArea.width - shapeWidth; //- TextBoxFormat.InternalMargin.Right;\n break;\n case 'None':\n break;\n }\n break;\n case 'Margin':\n if (paragraph.bodyWidget) {\n indentX = leftMargin + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = leftMargin + (pageClientWidth - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = leftMargin;\n break;\n case 'Outside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'Right':\n indentX = leftMargin + pageClientWidth - shapeWidth;\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'None':\n break;\n }\n }\n else {\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'Character':\n if (horzAlignment === 'Right' || horzAlignment === 'Center') {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n //Need to update this while layouting.**\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'LeftMargin':\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'RightMargin':\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'InsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n case 'OutsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n default:\n indentX = this.viewer.clientArea.x + horzPosition;\n break;\n }\n }\n //Update the floating item right position to the page right when floating item \n //right position exceeds the page width and it wrapping style is not equal to \n // InFrontOfText and behind text and also vertical origin is not equal to paragraph.\n if (paragraph && textWrapStyle !== 'InFrontOfText'\n && textWrapStyle !== 'Behind' && vertOrigin === 'Paragraph' && pageWidth < indentX + shapeWidth) {\n indentX = pageWidth - shapeWidth;\n }\n }\n }\n }\n //}\n return new Point(indentX, indentY);\n };\n Layout.prototype.getLeftMarginHorizPosition = function (leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = (leftMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Right':\n indentX = leftMargin - shapeWidth;\n break;\n case 'None':\n break;\n }\n if (indentX < 0 && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = 0;\n }\n return indentX;\n };\n Layout.prototype.getRightMarginHorizPosition = function (pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var xPosition = pageWidth - rightMargin;\n var indentX = xPosition + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = xPosition + (rightMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = xPosition;\n break;\n case 'Right':\n indentX = pageWidth - shapeWidth;\n break;\n case 'None':\n break;\n }\n if ((indentX < 0 || indentX + shapeWidth > pageWidth) && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = pageWidth - shapeWidth;\n }\n return indentX;\n };\n Layout.prototype.getVerticalPosition = function (paraItem, vertPosition, vertOrigin, textWrapStyle) {\n var paragraph = paraItem.line.paragraph;\n //ParagraphLayoutInfo paragraphLayoutInfo = (paragraph as IWidget).LayoutInfo as ParagraphLayoutInfo;\n var shape = paraItem;\n //WPicture pic = paraItem as WPicture;\n var indentY = 0;\n var topMargin = paragraph.associatedCell.y;\n switch (vertOrigin) {\n case 'Page':\n case 'Margin':\n case 'TopMargin':\n case 'InsideMargin':\n case 'BottomMargin':\n case 'OutsideMargin':\n indentY = topMargin + vertPosition;\n break;\n case 'Line':\n case 'Paragraph':\n var space = 0;\n // if (shape) {\n // space = paragraph.paragraphFormat.afterSpacing;\n // }\n indentY = paragraph.y + vertPosition + space;\n break;\n default:\n indentY = this.viewer.clientActiveArea.y + vertPosition;\n break;\n }\n return indentY;\n };\n Layout.prototype.getHorizontalPosition = function (width, paraItem, horzAlignment, horzOrigin, horzPosition, textWrapStyle, cellWid) {\n var indentX = 0;\n var paragraph = paraItem.line.paragraph;\n // CellLayoutInfo cellLayoutInfo = (paragraph.OwnerTextBody as IWidget).LayoutInfo as CellLayoutInfo;\n // ILayoutSpacingsInfo spacings = cellLayoutInfo as ILayoutSpacingsInfo;\n var cell = paragraph.associatedCell;\n var cellWidth = cellWid - cell.leftMargin - cell.rightMargin;\n var cellInnerWidth = cell.cellFormat.cellWidth;\n var marginLeft = cell.x;\n var pageLeft = marginLeft - cell.leftMargin;\n switch (horzOrigin) {\n case 'Page':\n {\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = pageLeft + (cellWidth - width) / 2;\n break;\n case 'Left':\n indentX = pageLeft;\n break;\n case 'Right':\n indentX = pageLeft + (cellWidth - width);\n break;\n case 'None':\n indentX = pageLeft + horzPosition;\n break;\n }\n }\n break;\n case 'Column':\n case 'Margin':\n {\n switch (horzAlignment) {\n case 'Center':\n indentX = marginLeft + (cellInnerWidth - width) / 2;\n break;\n case 'Left':\n indentX = marginLeft;\n break;\n case 'Right':\n indentX = marginLeft + (cellInnerWidth - width);\n break;\n case 'None':\n indentX = marginLeft + horzPosition;\n break;\n }\n }\n break;\n default:\n {\n indentX = marginLeft + horzPosition;\n }\n break;\n }\n return indentX;\n };\n Layout.prototype.updateTableFloatPoints = function (table) {\n if (table.wrapTextAround) {\n var tableTotalWidth = table.getTableCellWidth();\n var position = table.positioning;\n var sectionFormat = table.bodyWidget.sectionFormat;\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Page' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.width - tableTotalWidth;\n }\n else {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.x;\n }\n }\n }\n else {\n if (!(table.containerWidget instanceof TextFrame) && !table.isInsideTable) {\n // Vertical position\n if (position.verticalOrigin === 'Page') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n else if (position.verticalOrigin === 'Margin') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (isNullOrUndefined(position.verticalAlignment)) {\n this.viewer.clientActiveArea.y = (HelperMethods.convertPointToPixel(sectionFormat.topMargin) + HelperMethods.convertPointToPixel(position.verticalPosition));\n }\n }\n else if (position.verticalOrigin === 'Paragraph') {\n if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth) / 2;\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin)\n + (HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin) - tableTotalWidth) / 2;\n }\n }\n if (Math.round(position.horizontalPosition) > 0) {\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n }\n else if (table.isInsideTable) {\n var ownerCell = table.containerWidget;\n var cellFormat = ownerCell.cellFormat;\n if (position.verticalOrigin === 'Page') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n else if (position.verticalOrigin === 'Margin') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n this.viewer.clientActiveArea.y += ownerCell.topMargin;\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n else {\n if (this.viewer.clientActiveArea.y + HelperMethods.convertPointToPixel(position.verticalPosition) < ownerCell.y) {\n this.viewer.clientActiveArea.y = ownerCell.y;\n }\n else {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = ownerCell.x;\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth) - tableTotalWidth);\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = (ownerCell.x + ownerCell.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth)\n - (tableTotalWidth + ownerCell.rightMargin));\n }\n }\n if (Math.round(position.horizontalPosition) > 0) {\n this.viewer.clientActiveArea.x = ownerCell.x;\n if (position.horizontalOrigin === 'Margin') {\n this.viewer.clientActiveArea.x += ownerCell.leftMargin;\n }\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (cellFormat.preferredWidth / 2) - (tableTotalWidth / 2);\n }\n }\n }\n }\n table.x = this.viewer.clientActiveArea.x;\n table.y = this.viewer.clientActiveArea.y;\n };\n Layout.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') !== -1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.getTotalColumnSpan = function (row) {\n var tableRow = row;\n var totalColumnSpan = 0;\n for (var i = 0; i < tableRow.childWidgets.length; i++) {\n totalColumnSpan += tableRow.childWidgets[i].cellFormat.columnSpan;\n }\n return totalColumnSpan;\n };\n Layout.prototype.getMaximumRightCellBorderWidth = function (table) {\n var highestBorderSize = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var cell = row.childWidgets[row.childWidgets.length - 1];\n var cellBorder = cell.cellFormat.borders.right.lineWidth;\n if (highestBorderSize < cellBorder) {\n highestBorderSize = cellBorder;\n }\n }\n return highestBorderSize;\n };\n Layout.prototype.getDefaultBorderSpacingValue = function (border, isBorderValueZero, tableHorizontalPosition) {\n if (border == 0) {\n if (this.documentHelper.compatibilityMode != 'Word2013' && tableHorizontalPosition == 'Center') {\n border = 1.5;\n }\n else {\n border = 0.75;\n }\n return true;\n }\n return isBorderValueZero;\n };\n Layout.prototype.getMinimumWidthRequiredForTable = function (isBorderValueZero, tableHorizontalPosition, border) {\n var minimumWidthRequired = 0;\n //To fit the item right side of the Table Microsoft Word 2013 application and other version has different value based on border of the table and alignment of the table.\n if (this.documentHelper.compatibilityMode == 'Word2013') {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + Math.round(0.75 / 2);\n }\n else {\n minimumWidthRequired = 18.5 + Math.round(border / 2);\n }\n }\n else {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + 0.75;\n }\n else {\n minimumWidthRequired = 18.5 + border;\n }\n }\n }\n else {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 19.25;\n }\n else {\n minimumWidthRequired = 18.5 + (border / 2);\n }\n }\n else {\n if (border == 0.25) {\n minimumWidthRequired = 18.5;\n }\n else {\n minimumWidthRequired = 19.3;\n }\n }\n }\n return HelperMethods.convertPointToPixel(minimumWidthRequired);\n };\n Layout.prototype.shiftFloatingItemsFromTable = function (table, bodyWidget) {\n if (table.containerWidget instanceof BodyWidget) {\n for (var i = 0; i < table.containerWidget.floatingElements.length; i++) {\n var shape = table.containerWidget.floatingElements[i];\n if (!(shape instanceof TableWidget) && shape.paragraph.containerWidget instanceof TableCellWidget\n && shape.paragraph.containerWidget.ownerTable.containerWidget.ownerTable == table) {\n bodyWidget.floatingElements.push(table.containerWidget.floatingElements[i]);\n table.containerWidget.floatingElements.splice(table.containerWidget.floatingElements.indexOf(table.containerWidget.floatingElements[i]), 1);\n this.shiftedFloatingItemsFromTable.push(shape);\n i--;\n }\n }\n }\n };\n return Layout;\n}());\nexport { Layout };\n","import { isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, LineWidget, ParagraphWidget, TextElementBox, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox, BlockWidget, CommentCharacterElementBox, ShapeElementBox, EditRangeStartElementBox, ShapeBase, TextFrame } from './page';\nimport { Layout } from './layout';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { CharacterRangeType } from '../../index';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(documentHelper) {\n this.isPrinting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageIndex = -1;\n this.isFieldCode = false;\n this.leftPosition = 0;\n this.topPosition = 0;\n this.height = 0;\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.containerCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellChecker;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = HelperMethods.getColor(this.documentHelper.backgroundColor);\n this.pageContext.beginPath();\n if (this.viewer instanceof WebLayoutViewer) {\n height = height > this.documentHelper.visibleBounds.height ? height : this.documentHelper.visibleBounds.height;\n var marginTop = top;\n if (page.index === 0) {\n marginTop = top - this.viewer.padding.top;\n }\n /* eslint-disable-next-line max-len */\n this.pageContext.fillRect(left - this.viewer.padding.left, marginTop, width + this.viewer.padding.left, height + this.viewer.padding.top);\n }\n else {\n this.pageContext.fillRect(left, top, width, height);\n }\n this.pageContext.closePath();\n if (this.viewer instanceof PageLayoutViewer) {\n this.pageContext.strokeStyle = this.documentHelper.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n }\n this.pageLeft = left;\n this.pageTop = top;\n this.pageIndex = page.index;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n this.height = height;\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidgetIn, width, true);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidgetIn, width, false);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[i]);\n if (page.footnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.footnoteWidget, width);\n }\n }\n if (page.endnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.endnoteWidget, width);\n }\n if (this.documentHelper.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidgetIn);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(window.devicePixelRatio, this.documentHelper.owner.documentEditorSettings.printDevicePixelRatio);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n this.pageContext.fillStyle = '#FFFFFF';\n this.pageContext.fillRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.pageContext.fillStyle = '#000000';\n };\n Renderer.prototype.renderHFWidgets = function (page, widget, width, isHeader) {\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 1 : 0.65;\n }\n var cliped = false;\n var height = 0;\n var pageHt = 0;\n var headerFooterHeight = page.boundingRectangle.height / 100 * 40;\n if (isHeader) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var widgetHeight = Math.max((widget.y + widget.height), topMargin);\n if (widgetHeight > headerFooterHeight) {\n cliped = true;\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.pageTop, width, this.getScaledValue(headerFooterHeight));\n this.pageContext.clip();\n }\n }\n else {\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = void 0;\n if (isNullOrUndefined(page.footerWidget.sectionFormat)) {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin));\n }\n else {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin));\n }\n height = Math.max(page.boundingRectangle.height - headerFooterHeight, footerHeight);\n pageHt = page.boundingRectangle.height - footerDistance;\n }\n this.renderFloatingItems(page, widget.floatingElements, 'Behind');\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n if (!isHeader) {\n height += block.height;\n }\n if (isHeader || !isHeader && this.getScaledValue(Math.round(height)) <= this.getScaledValue(Math.round(pageHt))) {\n this.renderWidget(page, block);\n }\n }\n this.renderFloatingItems(page, widget.floatingElements, 'InFrontOfText');\n if (cliped) {\n this.pageContext.restore();\n }\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 0.65 : 1;\n }\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), topMargin));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.65;\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n //Maximum header height limit\n y = Math.min(y, headerFooterHeight);\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth, '#000000', false);\n var type = this.getHeaderFooterType(page, true);\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n /* eslint-disable-next-line max-len */\n this.getScaledValue(Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin)));\n //Maximum footer height limit\n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth, '#000000', false);\n type = this.getHeaderFooterType(page, false);\n width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, top + footerHeight - 5);\n ctx.restore();\n }\n };\n Renderer.prototype.getFooterHeight = function (page) {\n var footerWidgetHeight = ((page.boundingRectangle.height) / 100) * 40;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var actualHeight = page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin));\n return Math.max((page.boundingRectangle.height) - footerWidgetHeight, actualHeight);\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n type = isHeader ? l10n.getConstant('Header') : l10n.getConstant('Footer');\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n (isNullOrUndefined(page.previousPage) || page.sectionIndex !== page.previousPage.sectionIndex)) {\n type = isHeader ? l10n.getConstant('First Page Header') : l10n.getConstant('First Page Footer');\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.documentHelper.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? l10n.getConstant('Even Page Header') : l10n.getConstant('Even Page Footer');\n }\n else {\n type = isHeader ? l10n.getConstant('Odd Page Header') : l10n.getConstant('Odd Page Footer');\n }\n }\n return type;\n };\n /* eslint-disable-next-line max-len */\n Renderer.prototype.renderDashLine = function (context, x, y, width, fillStyle, isSmallDash) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 1;\n if (isSmallDash) {\n context.setLineDash([3, 2]);\n }\n else {\n context.setLineDash([6, 4]);\n }\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.setLineDash([]);\n context.closePath();\n };\n Renderer.prototype.renderSolidLine = function (context, x, y, width, fillStyle) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 0.5;\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n Renderer.prototype.render = function (page, bodyWidget) {\n if (this.isFieldCode) {\n this.isFieldCode = false;\n }\n this.renderFloatingItems(page, page.bodyWidgets[0].floatingElements, 'Behind');\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[i];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget &&\n (bodyWidget.childWidgets[0].childWidgets.length > 0) &&\n page.repeatHeaderRowTableWidget) {\n /* eslint-disable-next-line max-len */\n this.renderHeader(page, widget, this.documentHelper.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n this.renderFloatingItems(page, page.bodyWidgets[0].floatingElements, 'InFrontOfText');\n };\n Renderer.prototype.renderFloatingItems = function (page, floatingElements, wrappingType) {\n if (!isNullOrUndefined(floatingElements) && floatingElements.length > 0) {\n /* eslint-disable */\n floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n for (var i = 0; i < floatingElements.length; i++) {\n if (floatingElements[i] instanceof TableWidget) {\n continue;\n }\n var shape = floatingElements[i];\n if ((wrappingType === \"Behind\" && shape.textWrappingStyle !== \"Behind\") ||\n (wrappingType !== \"Behind\" && shape.textWrappingStyle === \"Behind\")) {\n continue;\n }\n if (shape instanceof ImageElementBox) {\n this.renderImageElementBox(shape, shape.x, shape.y, 0);\n }\n else if (shape instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(shape.x, 1);\n var shapeTop = this.getScaledValue(shape.y, 2);\n this.renderShapeElementBox(shape, shapeLeft, shapeTop, page);\n }\n }\n }\n };\n Renderer.prototype.renderShapeElementBox = function (shape, shapeLeft, shapeTop, page) {\n var isZeroShapeHeight = (shape.height === 0) ? true : false;\n var shapeType = shape.autoShapeType;\n var blocks = shape.textFrame.childWidgets;\n this.pageContext.beginPath();\n if (shape.fillFormat && shape.fillFormat.color && shape.fillFormat.fill) {\n this.pageContext.fillStyle = shape.fillFormat.color;\n this.pageContext.fillRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n if (!isNullOrUndefined(shapeType)) {\n if ((shape.lineFormat.line && shape.lineFormat.lineFormatType !== 'None') || (!isNullOrUndefined(shape.lineFormat.lineFormatType) && shape.lineFormat.lineFormatType !== 'None')) {\n this.pageContext.lineWidth = shape.lineFormat.weight;\n this.pageContext.strokeStyle = HelperMethods.getColor(shape.lineFormat.color);\n this.pageContext.strokeRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n }\n this.pageContext.closePath();\n var isClipped = false;\n if (shape.width != 0 && shape.height != 0) {\n isClipped = true;\n this.clipRect(shape.x, shape.y, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n for (var i = 0; i < blocks.length; i++) {\n this.renderWidget(page, blocks[i]);\n if (isZeroShapeHeight && shapeType !== 'StraightConnector') {\n shape.height += blocks[i].height;\n }\n }\n if (isZeroShapeHeight) {\n isZeroShapeHeight = false;\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderWidget = function (page, widget) {\n if (this.documentHelper.owner.enableLockAndEdit) {\n this.renderLockRegionBorder(page, widget);\n }\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n Renderer.prototype.renderLockRegionBorder = function (page, widget) {\n if (!widget.isInsideTable && widget instanceof BlockWidget && widget.locked) {\n var settinsModel = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var leftPosition = HelperMethods.convertPointToPixel(sectionFormat.leftMargin) - 5;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) + 10;\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = widget.x - 5;\n pageWidth = (this.documentHelper.visibleBounds.width - (this.viewer.padding.right * 5)) / this.documentHelper.zoomFactor;\n }\n var previousWidget = widget.previousRenderedWidget;\n var nextWidget = widget.nextRenderedWidget;\n var color = widget.lockedBy === this.documentHelper.owner.currentUser ? settinsModel.editableRegionColor : settinsModel.lockedRegionColor;\n var topPosition = widget.y;\n var height = widget.y + widget.height;\n //Left border\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition, height, 1);\n //Top border\n if (isNullOrUndefined(previousWidget) || !previousWidget.locked || widget.lockedBy !== previousWidget.lockedBy) {\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition + pageWidth, topPosition, 1);\n }\n //Right border\n this.renderSingleBorder(color, leftPosition + pageWidth, topPosition, leftPosition + pageWidth, height, 1);\n if (isNullOrUndefined(nextWidget) || !nextWidget.locked || widget.lockedBy !== nextWidget.lockedBy) {\n // Bottom border\n this.renderSingleBorder(color, leftPosition, height, leftPosition + pageWidth, height, 1);\n }\n }\n };\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n //Updated client area for current page\n page.viewer.updateClientArea(page.bodyWidgets[0].sectionFormat, page);\n var top = page.viewer.clientArea.y;\n var parentTable = header.ownerTable.getSplitWidgets()[0];\n for (var i = 0; i <= header.rowIndex; i++) {\n if (parentTable.childWidgets.length === 0) {\n return;\n }\n var row = parentTable.childWidgets[i];\n if (widget.childWidgets.indexOf(row) !== -1) {\n continue;\n }\n var headerWidget = row.clone();\n headerWidget.containerWidget = row.containerWidget;\n page.viewer.updateClientAreaLocation(headerWidget, new Rect(page.viewer.clientArea.x, top, headerWidget.width, headerWidget.height));\n page.documentHelper.layout.updateChildLocationForRow(top, headerWidget);\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j = 0; j < headerWidget.childWidgets.length; j++) {\n cell = headerWidget.childWidgets[j];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.documentHelper.layout.updateChildLocationForTable(top, widget);\n }\n };\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n var top = paraWidget.y;\n var left = paraWidget.x;\n this.renderParagraphBorder(page, paraWidget);\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n top += widget.marginTop;\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n Renderer.prototype.renderParagraphBorder = function (page, paragraphWidet) {\n var leftBorder = paragraphWidet.paragraphFormat.borders.left;\n var topBorder = paragraphWidet.paragraphFormat.borders.top;\n var rightBorder = paragraphWidet.paragraphFormat.borders.right;\n var bottomBorder = paragraphWidet.paragraphFormat.borders.bottom;\n var startX = 0;\n var startY = 0;\n var endX = 0;\n var endY = 0;\n var firstLine = paragraphWidet.firstChild;\n var lastLine = paragraphWidet.lastChild;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraphWidet);\n if (leftBorder.lineStyle !== 'None') {\n startX = paragraphWidet.x - HelperMethods.convertPointToPixel(leftBorder.space);\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n this.renderSingleBorder(leftBorder.color, startX, startY, endX, endY, leftBorder.lineWidth);\n }\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startX = paragraphWidet.x;\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n this.renderSingleBorder(topBorder.color, startX, startY, endX, endY, topBorder.lineWidth);\n }\n if (rightBorder.lineStyle !== 'None') {\n startX = paragraphWidet.x + this.getContainerWidth(paragraphWidet, page) + HelperMethods.convertPointToPixel(rightBorder.space);\n startY = endY;\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n this.renderSingleBorder(rightBorder.color, startX, startY, endX, endY, rightBorder.lineWidth);\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n startX = paragraphWidet.x;\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = (paragraphWidet.y + paragraphWidet.height + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - (this.getBottomMargin(paragraphWidet));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n this.renderSingleBorder(bottomBorder.color, startX, startY, endX, endY, bottomBorder.lineWidth);\n }\n };\n Renderer.prototype.getContainerWidth = function (paraWidget, page) {\n if (paraWidget.isInsideTable) {\n var cell = paraWidget.associatedCell;\n return (cell.width + cell.margin.left + cell.margin.right) - cell.leftBorderWidth;\n }\n else {\n if (this.viewer instanceof WebLayoutViewer) {\n var indent = HelperMethods.convertPointToPixel(paraWidget.leftIndent + paraWidget.rightIndent);\n return (this.documentHelper.visibleBounds.width - (indent) - (this.viewer.padding.right * 4) - (this.viewer.padding.left * 2)) / this.documentHelper.zoomFactor;\n }\n else {\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var width = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n return HelperMethods.convertPointToPixel(width - (paraWidget.rightIndent + paraWidget.leftIndent));\n }\n }\n };\n Renderer.prototype.getTopMargin = function (paragraph) {\n if (paragraph.isEmpty()) {\n return paragraph.childWidgets[0].margin.top;\n }\n else {\n var widget = paragraph.childWidgets[0];\n return widget.children[0].margin.top;\n }\n };\n Renderer.prototype.getBottomMargin = function (paragarph) {\n if (paragarph.isEmpty()) {\n return paragarph.childWidgets[paragarph.childWidgets.length - 1].margin.bottom;\n }\n else {\n var widget = paragarph.childWidgets[paragarph.childWidgets.length - 1];\n return widget.children[widget.children.length - 1].margin.bottom;\n }\n };\n Renderer.prototype.renderfootNoteWidget = function (page, footnote, width) {\n var isEmptyPage = footnote.page.bodyWidgets.length === 1 && ((footnote.page.bodyWidgets[0].childWidgets.length === 1\n && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty != undefined && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty()) || footnote.page.bodyWidgets[0].childWidgets.length === 0);\n var footerY = this.getFooterHeight(page);\n var height = footnote.y + footnote.height;\n if (height > footerY) {\n height = (footerY - footnote.y);\n }\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.getScaledValue(footnote.y, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.clip();\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n var bodyWidget = footnote.bodyWidgets[i];\n var footNoteReference = bodyWidget.footNoteReference;\n for (var j = 0; j < bodyWidget.childWidgets.length; j++) {\n var widget = bodyWidget.childWidgets[j];\n if (i === 0 && j === 0) {\n var ctx = this.pageContext;\n this.renderSolidLine(ctx, this.getScaledValue(96, 1), this.getScaledValue(footnote.y + (footnote.margin.top / 2) + 1, 2), 210 * this.documentHelper.zoomFactor, '#000000');\n }\n if (j === 0 && !isNullOrUndefined(footNoteReference) && widget.childWidgets[0].children[0] instanceof TextElementBox && !this.documentHelper.owner.editor.isFootNoteInsert) {\n //if (j < 1 || (j > 0 && widget.footNoteReference !== (bodyWidget.childWidgets[j - 1] as BlockWidget).footNoteReference)) {\n widget.childWidgets[0].children[0].text = widget.childWidgets[0].children[0].text.replace(widget.childWidgets[0].children[0].text, footNoteReference.text);\n //}\n }\n this.renderWidget(page, widget);\n }\n }\n this.pageContext.restore();\n };\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n if (this.isFieldCode) {\n return;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n }\n };\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n }\n };\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting) {\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height + cellBottomMargin * this.documentHelper.zoomFactor < 0 ||\n (this.getScaledValue(cellWidget.y, 2) - cellTopMargin > this.documentHelper.visibleBounds.height)) {\n return;\n }\n }\n var widgetHeight = 0;\n this.renderSelectionHighlightOnTable(page, cellWidget);\n this.renderTableCellOutline(page.documentHelper, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n // MS word render the content in right margin also.\n // So, we need to add right margin value while cliping the content\n var width = (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right) - cellWidget.leftBorderWidth;\n if (!this.isPrinting) {\n this.clipRect(cellWidget.x - cellWidget.margin.left, cellWidget.y, this.getScaledValue(width), this.getScaledValue(this.height));\n }\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n };\n Renderer.prototype.checkHeaderFooterLineWidget = function (widget, keys) {\n var headerFooter;\n if (widget instanceof LineWidget) {\n headerFooter = widget.paragraph.bodyWidget;\n }\n else if (widget instanceof TableCellWidget) {\n headerFooter = widget.bodyWidget;\n }\n if (!isNullOrUndefined(headerFooter.parentHeaderFooter)) {\n headerFooter = headerFooter.parentHeaderFooter;\n for (var j = 0; j < keys.length; j++) {\n var selectedWidget = keys[j];\n if (selectedWidget instanceof LineWidget && widget instanceof LineWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.paragraph.isInHeaderFooter && headerFooter === selectedWidget.paragraph.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n else if (selectedWidget instanceof TableCellWidget && widget instanceof TableCellWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.ownerTable.isInHeaderFooter && headerFooter === selectedWidget.ownerTable.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n }\n }\n return undefined;\n };\n Renderer.prototype.renderEditRegionHighlight = function (page, lineWidget, top) {\n if (page.documentHelper.selection && !isNullOrUndefined(page.documentHelper.selection.editRegionHighlighters)) {\n var renderHighlight = page.documentHelper.selection.editRegionHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.selection.editRegionHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = page.documentHelper.selection.editRegionHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = widgetInfo[i].color !== '' ? widgetInfo[i].color : '#add8e6';\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSearchHighlight = function (page, lineWidget, top) {\n if (this.documentHelper.owner.searchModule && !isNullOrUndefined(page.documentHelper.owner.searchModule.searchHighlighters)) {\n var renderHighlight = page.documentHelper.owner.searchModule.searchHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.searchModule.searchHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = page.documentHelper.owner.searchModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.viewer.owner.documentEditorSettings.searchHighlightColor;\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSelectionHighlight = function (page, lineWidget, top) {\n if (!this.isPrinting && page.documentHelper.owner.selection && !this.documentHelper.isScrollToSpellCheck && page.documentHelper.owner.selection.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selection.selectedWidgets.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selection.selectedWidgets.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selection.addSelectionHighlight(this.selectionContext, lineWidget, top, page);\n }\n }\n };\n Renderer.prototype.renderSelectionHighlightOnTable = function (page, cellWidget) {\n if (!this.isPrinting && page.documentHelper.owner.selection && page.documentHelper.owner.selection.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selection.selectedWidgets.containsKey(cellWidget);\n if (!renderHighlight && cellWidget.ownerTable.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selection.selectedWidgets.keys;\n cellWidget = this.checkHeaderFooterLineWidget(cellWidget, keys);\n if (!isNullOrUndefined(cellWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selection.addSelectionHighlightTable(this.selectionContext, cellWidget, page);\n }\n }\n };\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n this.renderSelectionHighlight(page, lineWidget, top);\n var paraFormat = lineWidget.paragraph.paragraphFormat;\n if (lineWidget.isFirstLine() && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n if (this.documentHelper && this.documentHelper.selection && !isNullOrUndefined(this.documentHelper.selection.formFieldHighlighters)\n && this.documentHelper.selection.formFieldHighlighters.containsKey(lineWidget)) {\n if (this.documentHelper.owner.documentEditorSettings\n && this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading) {\n var widgetInfo = page.documentHelper.selection.formFieldHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.documentHelper.owner.documentEditorSettings.formFieldSettings.shadingColor;\n var height = lineWidget.height;\n var isAltered = false;\n var isLastLine = lineWidget.isLastLine();\n if (isLastLine) {\n height = height - HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(lineWidget.paragraph));\n if (lineWidget.paragraph.paragraphFormat.lineSpacing > 1) {\n var formField = this.getFormfieldInLine(lineWidget);\n if (!isNullOrUndefined(formField)) {\n var sizeInfo = this.documentHelper.textHelper.getHeight(formField.characterFormat);\n var maxHeight = sizeInfo.Height;\n if (lineWidget.paragraph.paragraphFormat.lineSpacingType === 'Multiple') {\n height = height - HelperMethods.convertPointToPixel(this.documentHelper.layout.getLineSpacing(lineWidget.paragraph, maxHeight, true));\n }\n else {\n top = top + HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n height = sizeInfo.Height;\n isAltered = true;\n }\n }\n }\n }\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(height));\n if (isAltered) {\n isAltered = false;\n top = top - HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n }\n }\n }\n }\n // Render search highlight\n this.renderSearchHighlight(page, lineWidget, top);\n // EditRegion highlight \n this.renderEditRegionHighlight(page, lineWidget, top);\n var isCommentMark = false;\n var children = lineWidget.renderedElements;\n for (var i = 0; i < children.length; i++) {\n var elementBox = children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox) {\n var pageGap = 0;\n if (this.viewer instanceof PageLayoutViewer) {\n pageGap = this.viewer.pageGap;\n }\n var style = 'display:block;position:absolute;';\n var topPosition = this.getScaledValue((top - 10) + (page.boundingRectangle.y -\n (pageGap * (page.index + 1)))) + (pageGap * (page.index + 1)) + 'px;';\n if (elementBox instanceof EditRangeStartElementBox) {\n if (this.documentHelper.owner.enableLockAndEdit) {\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n elementBox.renderLockMark(this.documentHelper.owner.currentUser, l10n);\n var settings = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var color = elementBox.user === this.documentHelper.owner.currentUser ? settings.editableRegionColor : settings.lockedRegionColor;\n style += \"color:\" + color + \";\";\n var leftMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.leftMargin);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue(leftMargin - 20) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = lineWidget.paragraph.x - 5 + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n elementBox.editRangeMark.setAttribute('style', style);\n }\n else {\n if (elementBox.editRangeMark) {\n elementBox.editRangeMark.setAttribute('style', 'display:none');\n }\n }\n }\n else if (elementBox instanceof CommentCharacterElementBox &&\n elementBox.commentType === 0 && this.documentHelper.owner.selectionModule) {\n if (this.documentHelper.owner.enableComment && !isCommentMark) {\n isCommentMark = true;\n elementBox.renderCommentMark();\n var rightMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.rightMargin);\n var pageWidth = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageWidth);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue((pageWidth - rightMargin) + (rightMargin / 4)) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = (page.boundingRectangle.width - (this.viewer.padding.right * 2) - (this.viewer.padding.left * 2)) + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n elementBox.commentMark.setAttribute('style', style);\n }\n else {\n if (elementBox.commentMark) {\n elementBox.commentMark.setAttribute('style', 'display:none');\n }\n }\n }\n }\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n var underlineY = this.getUnderlineYPosition(lineWidget);\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.documentHelper.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.documentHelper.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n if (elementBox instanceof TextElementBox) {\n elementBox.canTrigger = true;\n elementBox.isVisible = false;\n if (!elementBox.isSpellChecked || elementBox.line.paragraph.isChangeDetected) {\n elementBox.ischangeDetected = true;\n }\n }\n continue;\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(left, 1);\n var shapeTop = this.getScaledValue(top, 2);\n this.renderShapeElementBox(elementBox, shapeLeft, shapeTop, page);\n }\n else {\n elementBox.isVisible = true;\n left += elementBox.padding.left;\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n }\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if ((!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n this.isFieldCode = false;\n }\n }\n };\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (lineWidget.children[i] instanceof ShapeElementBox) {\n continue;\n }\n else {\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = (lineWidget.children[i] instanceof ImageElementBox) ? 0.9 : lineWidget.children[i].height / 20;\n }\n }\n }\n return height - 2 * lineHeight;\n };\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.hasValue('fontColor') ? format.fontColor : breakCharacterFormat.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontFamily = format.hasValue('fontFamily') ? format.fontFamily : breakCharacterFormat.fontFamily;\n if (this.documentHelper.isIosDevice && (elementBox.text === String.fromCharCode(9679) || elementBox.text === String.fromCharCode(9675))) {\n fontFamily = '';\n }\n var fontSize = format.hasValue('fontSize') ? format.fontSize : breakCharacterFormat.fontSize;\n var baselineAlignment = format.hasValue('baselineAlignment') ? format.baselineAlignment : breakCharacterFormat.baselineAlignment;\n bold = format.hasValue('bold') ? format.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.hasValue('italic') ? format.italic ? 'italic' : '' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n var strikethrough = format.hasValue('strikethrough') ? format.strikethrough : breakCharacterFormat.strikethrough;\n var highlightColor = format.hasValue('highlightColor') ? format.highlightColor : breakCharacterFormat.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(highlightColor);\n }\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + fontFamily + '\"';\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n var text = elementBox.text;\n var isParaBidi = elementBox.paragraph.paragraphFormat.bidi;\n if (isParaBidi) {\n this.pageContext.direction = 'rtl';\n left += elementBox.width;\n }\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n if (isParaBidi) {\n this.pageContext.direction = 'ltr';\n left -= elementBox.width;\n }\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n Renderer.prototype.getDefaultFontColor = function (backColor) {\n if (HelperMethods.isVeryDark(backColor)) {\n return \"#FFFFFF\";\n }\n else {\n return \"#000000\";\n }\n };\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType && containerWidget instanceof TableCellWidget) {\n var width = (containerWidget.width + containerWidget.margin.left + containerWidget.margin.right) - containerWidget.leftBorderWidth;\n this.clipRect(containerWidget.x - containerWidget.margin.left, containerWidget.y, this.getScaledValue(width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n if (format.highlightColor !== 'NoColor') {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(format.highlightColor);\n }\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : format.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + format.fontFamily + '\"';\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n //this.pageContext.direction = 'ltr';\n var isRTL = format.bidi || this.documentHelper.textHelper.isRTLText(elementBox.text);\n text = this.documentHelper.textHelper.setText(text, isRTL, format.bdo, true);\n if (format.allCaps) {\n text = text.toUpperCase();\n }\n var characterRange = elementBox.characterRange;\n if (((characterRange == CharacterRangeType.WordSplit) ||\n (((characterRange & CharacterRangeType.WordSplit) == CharacterRangeType.WordSplit) &&\n ((characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft))) && format.bidi) {\n text = this.inverseCharacter(text);\n }\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), scaledWidth);\n if (((this.documentHelper.owner.isSpellCheck && !this.spellChecker.removeUnderline) && (this.documentHelper.triggerSpellCheck || elementBox.canTrigger) && elementBox.text !== ' ' && !this.documentHelper.isScrollHandler && (isNullOrUndefined(elementBox.previousNode) || !(elementBox.previousNode instanceof FieldElementBox))\n && (!this.documentHelper.selection.isSelectionInsideElement(elementBox) || this.documentHelper.triggerElementsOnLoading || this.documentHelper.owner.editor.triggerPageSpellCheck))) {\n elementBox.canTrigger = true;\n this.leftPosition = this.pageLeft;\n this.topPosition = this.pageTop;\n var errorDetails = this.spellChecker.checktextElementHasErrors(elementBox.text, elementBox, left);\n if (errorDetails.errorFound) {\n color = '#FF0000';\n var backgroundColor = (containerWidget instanceof TableCellWidget) ? containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n for (var i = 0; i < errorDetails.elements.length; i++) {\n var currentElement = errorDetails.elements[i];\n if (elementBox.ignoreOnceItems.indexOf(this.spellChecker.manageSpecialCharacters(currentElement.text, undefined, true)) === -1) {\n this.renderWavyLine(currentElement, (isNullOrUndefined(currentElement.start)) ? left : currentElement.start.location.x, (isNullOrUndefined(currentElement.start)) ? top : currentElement.start.location.y - elementBox.margin.top, underlineY, color, 'Single', format.baselineAlignment, backgroundColor);\n }\n }\n }\n else if (elementBox.ischangeDetected || this.documentHelper.triggerElementsOnLoading) {\n elementBox.ischangeDetected = false;\n this.handleChangeDetectedElements(elementBox, underlineY, left, top, format.baselineAlignment);\n }\n }\n var currentInfo = this.getRevisionType(revisionInfo, true);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Insertion' || currentInfo.type === 'MoveTo'))) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment, currentInfo);\n }\n currentInfo = this.getRevisionType(revisionInfo, false);\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Deletion' || currentInfo.type === 'MoveFrom'))) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment, currentInfo);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case String.fromCharCode(40):\n //Specify the ')'\n return String.fromCharCode(41);\n //Specify the ')'\n case String.fromCharCode(41):\n //Specify the '('\n return String.fromCharCode(40);\n //Specify the '<'\n case String.fromCharCode(60):\n //Specify the '>'\n return String.fromCharCode(62);\n //Specify the '>'\n case String.fromCharCode(62):\n //Specify the '<'\n return String.fromCharCode(60);\n //Specify the '{'\n case String.fromCharCode(123):\n //Specify the '}'\n return String.fromCharCode(125);\n //Specify the '}'\n case String.fromCharCode(125):\n //Specify the '{'\n return String.fromCharCode(123);\n //Specify the '['\n case String.fromCharCode(91):\n //Specify the ']'\n return String.fromCharCode(93);\n //Specify the ']'\n case String.fromCharCode(93):\n //Specify the '['\n return String.fromCharCode(91);\n default:\n return ch;\n }\n };\n Renderer.prototype.getBackgroundColorHeirachy = function (element) {\n var bgColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (element.paragraph.isInsideTable) {\n var cell = element.paragraph.containerWidget;\n bgColor = cell.cellFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n else {\n bgColor = cell.ownerTable.tableFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n }\n }\n else if (element.paragraph.containerWidget instanceof TextFrame\n && element.paragraph.containerWidget.containerShape.fillFormat.color === '#000000FF') {\n return element.paragraph.containerWidget.containerShape.fillFormat.color;\n }\n return this.documentHelper.backgroundColor;\n };\n Renderer.prototype.handleChangeDetectedElements = function (elementBox, underlineY, left, top, baselineAlignment) {\n var _this = this;\n var checkText = elementBox.text.trim();\n var beforeIndex = this.pageIndex;\n if (elementBox.text === '\\v') {\n return;\n }\n if (!this.spellChecker.checkElementCanBeCombined(elementBox, underlineY, beforeIndex, true)) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedText = checkText.split(/[\\s]+/);\n var markindex = elementBox.line.getOffset(elementBox, 0);\n var spaceValue = 1;\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText = splittedText[i];\n var retrievedText = this.spellChecker.manageSpecialCharacters(currentText, undefined, true);\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n this.handleUnorderedElements(retrievedText, elementBox, underlineY, i, markindex, i === splittedText.length - 1, beforeIndex);\n markindex += currentText.length + spaceValue;\n }\n }\n }\n else {\n var retrievedText = this.spellChecker.manageSpecialCharacters(checkText, undefined, true);\n if (checkText.length > 0) {\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n var indexInLine_1 = elementBox.indexInOwner;\n var indexinParagraph_1 = elementBox.line.paragraph.indexInOwner;\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(retrievedText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else {\n if (this.spellChecker.isInUniqueWords(retrievedText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(retrievedText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else if (!this.documentHelper.owner.editor.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, checkText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n var canUpdate = (beforeIndex === _this.pageIndex || elementBox.isVisible) && (indexInLine_1 === elementBox.indexInOwner) && (indexinParagraph_1 === elementBox.line.paragraph.indexInOwner);\n _this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, canUpdate);\n });\n }\n }\n }\n }\n }\n }\n };\n Renderer.prototype.handleUnorderedElements = function (currentText, elementBox, underlineY, iteration, markIndex, isLastItem, beforeIndex) {\n var _this = this;\n var indexInLine = elementBox.indexInOwner;\n var indexinParagraph = elementBox.line.paragraph.indexInOwner;\n if (currentText.length > 0) {\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(currentText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, true, underlineY, iteration, markIndex, isLastItem);\n }\n else {\n var canUpdate_1 = (elementBox.isVisible) && (indexInLine === elementBox.indexInOwner) && (indexinParagraph === elementBox.line.paragraph.indexInOwner);\n if (this.spellChecker.isInUniqueWords(currentText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(currentText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n }\n else if (!this.documentHelper.owner.editor.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, currentText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n _this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n });\n }\n }\n }\n };\n Renderer.prototype.renderWavyLine = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, backgroundColor) {\n if (elementBox.text.length > 1) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var frequencyRange = 0.5;\n var amplitudeRange = 1.0;\n var stepToCover = .7;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var specialCharacter = this.spellChecker.getSpecialCharactersInfo(elementBox.text, elementBox.characterFormat);\n var whiteSpaceData = this.spellChecker.getWhiteSpaceCharacterInfo(elementBox.text, elementBox.characterFormat);\n var x = left + specialCharacter.beginningWidth + ((whiteSpaceData.isBeginning) ? whiteSpaceData.width : 0) + elementBox.margin.left;\n var x1 = x * this.documentHelper.zoomFactor + this.leftPosition;\n var y1 = y * this.documentHelper.zoomFactor + this.topPosition;\n var x2 = x1 + this.getScaledValue(elementBox.width - (specialCharacter.beginningWidth + specialCharacter.endWidth) - whiteSpaceData.width);\n var startingPoint = new Point(x1, y1);\n var endingPoint = new Point(x2, y1);\n this.drawWavy(startingPoint, endingPoint, (x2 - x1) * frequencyRange, amplitudeRange, stepToCover, color, elementBox.height, backgroundColor);\n }\n };\n Renderer.prototype.drawWavy = function (from, to, frequency, amplitude, step, color, height, backColor, negative) {\n this.pageContext.save();\n this.pageContext.fillStyle = (!isNullOrUndefined(backColor) ? backColor : this.documentHelper.backgroundColor);\n this.pageContext.fillRect(from.x, from.y - amplitude, (to.x - from.x), amplitude * 3);\n this.pageContext.restore();\n this.pageContext.lineWidth = 1;\n this.pageContext.lineCap = 'round';\n this.pageContext.strokeStyle = color;\n this.pageContext.beginPath();\n //this.pageContext.save();\n var cx = 0;\n var cy = 0;\n var fx = from.x;\n var fy = from.y;\n var tx = to.x;\n var ty = to.y;\n var i = 0;\n var waveOffsetLength = 0;\n var ang = Math.atan2(ty - fy, tx - fx);\n var distance = Math.sqrt((fx - tx) * (fx - tx) + (fy - ty) * (fy - ty));\n var a = amplitude * 1;\n var f = Math.PI * frequency;\n for (i; i <= distance; i += step) {\n waveOffsetLength = Math.sin((i / distance) * f) * a;\n cx = from.x + Math.cos(ang) * i + Math.cos(ang - Math.PI / 2) * waveOffsetLength;\n cy = from.y + Math.sin(ang) * i + Math.sin(ang - Math.PI / 2) * waveOffsetLength;\n i > 0 ? this.pageContext.lineTo(cx, cy) : this.pageContext.moveTo(cx, cy);\n }\n this.pageContext.stroke();\n this.pageContext.restore();\n };\n /**\n * @private\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n textWidth = this.documentHelper.textHelper.getWidth(tabText, elementBox.characterFormat);\n var count = Math.floor(elementBox.width / textWidth);\n if (textWidth == 0) {\n count = 0;\n }\n for (var i = 0; i <= count; i++) {\n tabText += tabString;\n }\n return tabText.slice(0, -1);\n };\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n tabString = '_';\n break;\n }\n return tabString;\n };\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n var lineHeight = renderedHeight / 20;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n underline = (revisionInfo.type === 'MoveTo') ? 'Double' : 'Single';\n }\n if (underline === 'Double') {\n y -= lineHeight;\n }\n if (elementBox instanceof ImageElementBox) {\n underlineHeight = 0.9;\n }\n while (lineCount < (underline === 'Double' ? 2 : 1)) {\n lineCount++;\n var width = elementBox.width;\n if (elementBox instanceof TextElementBox && !(elementBox instanceof TabElementBox) && isNullOrUndefined(elementBox.nextNode)) {\n width = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(elementBox.text), elementBox.characterFormat);\n }\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(width), this.getScaledValue(underlineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n strikethrough = (revisionInfo.type === 'Deletion') ? 'SingleStrike' : 'DoubleStrike';\n }\n if (elementBox instanceof ImageElementBox) {\n lineHeight = 0.9;\n }\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(elementBox.width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n var containerWid = elementBox.line.paragraph.containerWidget;\n var isHeightType = false;\n if (containerWid instanceof TableCellWidget) {\n isHeightType = (containerWid.ownerRow.rowFormat.heightType === 'Exactly');\n }\n if (elementBox.textWrappingStyle === 'Inline') {\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n else if (isHeightType) {\n var width = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth;\n isClipped = true;\n this.clipRect(containerWid.x, containerWid.y, this.getScaledValue(width), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile && !isNullOrUndefined(elementBox.metaFileImageString)) {\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n else {\n try {\n if (!elementBox.isCrop) {\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), //dx\n this.getScaledValue(top + topMargin, 2), //dy\n this.getScaledValue(elementBox.width), //dw\n this.getScaledValue(elementBox.height)); //dh\n }\n else {\n this.pageContext.drawImage(elementBox.element, elementBox.cropX, //sx\n elementBox.cropY, //sy\n elementBox.cropWidth, //sw\n elementBox.cropHeight, //sh\n this.getScaledValue(left + leftMargin, 1), //dx\n this.getScaledValue(top + topMargin, 2), //dy\n this.getScaledValue(elementBox.width), //dw\n this.getScaledValue(elementBox.height)); //dh\n }\n }\n catch (e) {\n elementBox.imageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n }\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n var currentRevision = this.getRevisionType(revisionInfo, false);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Deletion' || currentRevision.type === 'MoveFrom')) {\n this.renderStrikeThrough(elementBox, left, top, 'SingleStrike', color, 'Normal', currentRevision);\n }\n currentRevision = this.getRevisionType(revisionInfo, true);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Insertion' || currentRevision.type === 'MoveTo')) {\n var y = this.getUnderlineYPosition(elementBox.line);\n this.renderUnderline(elementBox, left, top, y, color, 'Single', 'Normal');\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.documentHelper);\n var table = tableWidget;\n tableWidget.width = this.documentHelper.layout.getTableWidth(table);\n var border = !table.isBidiTable ? layout.getTableLeftBorder(table.tableFormat.borders)\n : layout.getTableRightBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth);\n // }\n border = !table.isBidiTable ? layout.getTableRightBorder(table.tableFormat.borders)\n : layout.getTableLeftBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth);\n // }\n };\n /* eslint-disable */\n Renderer.prototype.renderTableCellOutline = function (documentHelper, cellWidget) {\n var layout = documentHelper.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n var isBidiTable = cellWidget.ownerTable.isBidiTable;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n var border = !isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n this.renderCellBackground(height, cellWidget, cellLeftMargin, lineWidth);\n var leftBorderWidth = lineWidth;\n if (tableCell.index === 0 || tableCell.cellFormat.rowSpan === 1 || (tableCell.cellFormat.rowSpan > 1 && tableCell.columnIndex === 0)) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellTopMargin, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n else {\n for (var i = 0; i < tableCell.ownerTable.childWidgets.length; i++) {\n var row = tableCell.ownerTable.childWidgets[i];\n var cell = void 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var currentCell = row.childWidgets[j];\n if ((currentCell.columnIndex + currentCell.cellFormat.columnSpan - 1) === tableCell.columnIndex - 1) {\n cell = currentCell;\n break;\n }\n else if (row.childWidgets[j].columnIndex >= tableCell.columnIndex && row.childWidgets[j].previousWidget) {\n cell = row.childWidgets[j].previousWidget;\n break;\n }\n }\n if (cell && cell.columnIndex + cell.cellFormat.columnSpan - 1 === tableCell.columnIndex - 1) {\n var border_1 = !isBidiTable ? TableCellWidget.getCellRightBorder(cell) : TableCellWidget.getCellLeftBorder(cell);\n var lineWidthInt = border_1.lineWidth;\n if (cell.y + cell.height < tableCell.y) {\n continue;\n }\n else if (cell.y < tableCell.y && cell.y + cell.height > tableCell.y) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, tableCell.y - cellTopMargin, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt);\n }\n else if ((cell.y === tableCell.y) || (cell.y > tableCell.y && cell.y + cell.height < tableCell.y + tableCell.height)) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt);\n }\n else if (cell.y < tableCell.y + tableCell.height && cell.y + cell.height >= tableCell.y + tableCell.height) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cellBottomMargin, lineWidthInt);\n }\n else if (cell.y > tableCell.y + tableCell.height) {\n break;\n }\n }\n }\n }\n // }\n if (tableCell.updatedTopBorders && tableCell.updatedTopBorders.length > 1) {\n var cellX = cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2;\n var cellY = cellWidget.y - cellWidget.margin.top;\n for (var a = 0; a < tableCell.updatedTopBorders.length; a++) {\n var borderInfo = tableCell.updatedTopBorders[a];\n border = borderInfo.border;\n if (border.lineStyle !== 'None' && border.lineWidth < TableCellWidget.getCellTopBorder(tableCell).lineWidth) {\n border.lineWidth = TableCellWidget.getCellTopBorder(tableCell).lineWidth;\n }\n if (!isNullOrUndefined(border)) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellX, cellY + lineWidth / 2, cellX + borderInfo.width, cellY + lineWidth / 2, lineWidth);\n cellX = cellX + borderInfo.width;\n }\n }\n }\n else {\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n var width = 0;\n this.renderSingleBorder(border.color, cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right + width, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth);\n // }\n }\n var isLastCell = false;\n if (!isBidiTable) {\n isLastCell = tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1;\n }\n else {\n isLastCell = tableCell.cellIndex === 0;\n }\n var prevRowSpannedCells = tableCell.containerWidget.getPreviousRowSpannedCells();\n var isAffectedByRowSpan = false;\n for (var k = 0; k < prevRowSpannedCells.length; k++) {\n var spannedCell = prevRowSpannedCells[k];\n if (tableCell.rowIndex < spannedCell.rowIndex + spannedCell.cellFormat.rowSpan && tableCell.columnIndex < spannedCell.columnIndex) {\n isAffectedByRowSpan = true;\n break;\n }\n }\n if ((tableCell.ownerTable.tableFormat.cellSpacing > 0 || isLastCell) && (isBidiTable || tableCell.columnIndex + tableCell.cellFormat.columnSpan === tableCell.ownerTable.tableHolder.columns.length || !isAffectedByRowSpan)) {\n border = isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n var previousCellIndex = undefined;\n if (!isNullOrUndefined(nextRow)) {\n if (nextRow.lastChild) {\n var lastCellWidget = nextRow.lastChild;\n previousCellIndex = lastCellWidget.columnIndex + lastCellWidget.cellFormat.columnSpan;\n }\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan >= tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget || previousCellIndex && nextRow.childWidgets.length < tableCell.ownerRow.childWidgets.length\n && previousCellIndex < tableCell.columnIndex + tableCell.cellFormat.columnSpan) {\n var bottomBorder = tableCell.cellFormat.borders.bottom;\n if (!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'Cleared') {\n border = TableCellWidget.getCellBottomBorder(tableCell);\n }\n else {\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, tableCell.ownerRow.rowFormat.borders.bottom), tableCell.ownerTable.tableFormat.borders.bottom)\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n }\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n // }\n };\n Renderer.prototype.renderCellBackground = function (height, cellWidget, leftMargin, lineWidth) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n var left = cellWidget.x - leftMargin - lineWidth;\n var topMargin = cellWidget.topMargin ? HelperMethods.convertPointToPixel(cellWidget.topMargin) : 0;\n var top = cellWidget.y - topMargin;\n var width = cellWidget.width + leftMargin + cellWidget.margin.right - lineWidth;\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var revision = cellWidget.ownerRow.rowFormat.revisions[cellWidget.ownerRow.rowFormat.revisions.length - 1];\n bgColor = (revision.revisionType === 'Insertion') ? '#e1f2fa' : '#fce6f4';\n }\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = HelperMethods.getColor(bgColor);\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n //Render foreground color\n if (cellFormat.shading.hasValue('foregroundColor') && cellFormat.shading.textureStyle !== 'TextureNone') {\n this.pageContext.beginPath();\n if (cellFormat.shading.foregroundColor !== 'empty') {\n this.pageContext.fillStyle = this.drawTextureStyle(cellFormat.shading.textureStyle, HelperMethods.getColor(cellFormat.shading.foregroundColor), HelperMethods.getColor(cellFormat.shading.backgroundColor));\n //Width is increased twice since left and right line width is reduced in cell rendering which is required for background rendering.\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width + (lineWidth * 2)), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n }\n };\n Renderer.prototype.drawTextureStyle = function (textureStyle, foreColor, backColor) {\n if (textureStyle.indexOf('Percent') > -1) {\n var text = textureStyle.replace(\"Texture\", \"\").replace(\"Percent\", \"\").replace(\"Pt\", \".\");\n var percent = parseInt(text);\n return this.getForeColor(foreColor, backColor, percent);\n }\n if (textureStyle === 'TextureSolid') {\n return foreColor;\n }\n return '#FFFFFF';\n };\n Renderer.prototype.getForeColor = function (foreColor, backColor, percent) {\n var r = 0;\n var g = 0;\n var b = 0;\n var foreColorRgb = HelperMethods.convertHexToRgb(foreColor);\n var backColorRgb = HelperMethods.convertHexToRgb(backColor);\n r = this.getColorValue(foreColorRgb.r, backColorRgb.r, percent);\n g = this.getColorValue(foreColorRgb.g, backColorRgb.g, percent);\n b = this.getColorValue(foreColorRgb.b, backColorRgb.b, percent);\n return ('#' + HelperMethods.convertRgbToHex(r) + HelperMethods.convertRgbToHex(g) + HelperMethods.convertRgbToHex(b));\n };\n Renderer.prototype.getColorValue = function (foreColorValue, backColorValue, percent) {\n var colorValue = 0;\n if (percent == 100) {\n colorValue = foreColorValue;\n }\n else {\n colorValue = backColorValue + Math.round(foreColorValue * (percent / 100)) - Math.round(backColorValue * (percent / 100));\n }\n return colorValue;\n };\n Renderer.prototype.renderSingleBorder = function (color, startX, startY, endX, endY, lineWidth) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = HelperMethods.getColor(color);\n if (lineWidth > 0) {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.documentHelper.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n Renderer.prototype.checkRevisionType = function (elementBox) {\n var revisions = [];\n var count = elementBox.revisions.length;\n for (var i = 0; i < count; i++) {\n var currentRevision = elementBox.revisions[i];\n var color = this.documentHelper.authors.get(currentRevision.author);\n revisions.push({ 'type': currentRevision.revisionType, 'color': color });\n }\n return revisions;\n };\n Renderer.prototype.getRevisionColor = function (revisionInfo) {\n if (revisionInfo.length === 1) {\n return revisionInfo[0].color;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n if (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom') {\n return revisionInfo[i].color;\n }\n }\n return undefined;\n };\n Renderer.prototype.getRevisionType = function (revisionInfo, checkInsert) {\n if (revisionInfo.length === 0) {\n return undefined;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n var type = undefined;\n if (checkInsert && (revisionInfo[i].type === 'Insertion' || revisionInfo[i].type === 'MoveTo')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n if (!checkInsert && (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n }\n return undefined;\n };\n Renderer.prototype.getFormfieldInLine = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FieldElementBox && !isNullOrUndefined(line.children[i].formFieldData)) {\n return line.children[i];\n }\n }\n return undefined;\n };\n /**\n * Destroys the internal objects which is maintained.\n *\n * @returns {void}\n */\n Renderer.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CharacterRangeType } from '../../index';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(documentHelper) {\n this.paragraphMarkInfo = {};\n this.documentHelper = documentHelper;\n if (!isNullOrUndefined(documentHelper)) {\n this.context = documentHelper.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n TextHelper.prototype.getEnSpaceCharacter = function () {\n return String.fromCharCode(8194);\n };\n TextHelper.prototype.repeatChar = function (char, count) {\n var text = '';\n for (var i = 0; i < count; i++) {\n text += char;\n }\n return text;\n };\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getParagraphMarkSize(characterFormat).Width;\n };\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n var format = this.getFormatText(characterFormat);\n if (this.paragraphMarkInfo[format]) {\n return this.paragraphMarkInfo[format];\n }\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n var textSizeInfo = {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n return this.paragraphMarkInfo[format] = textSizeInfo;\n };\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n var isRTL = characterFormat.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, characterFormat.bdo);\n textTrimEndWidth = this.getWidth(text, characterFormat);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat);\n }\n elementBox.trimEndWidth = textTrimEndWidth;\n return textTrimEndWidth;\n };\n TextHelper.prototype.getHeight = function (characterFormat) {\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection\n var key = this.getFormatText(characterFormat);\n if (!isNullOrUndefined(this.documentHelper.heightInfoCollection[key])) {\n return this.documentHelper.heightInfoCollection[key];\n }\n var sizeInfo = this.documentHelper.owner.textMeasureHelper.getHeightInternal(characterFormat);\n this.documentHelper.heightInfoCollection[key] = sizeInfo;\n return sizeInfo;\n };\n TextHelper.prototype.getFormatText = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat);\n };\n TextHelper.prototype.getWidth = function (text, characterFormat) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = characterFormat.fontFamily;\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + fontFamily;\n if (characterFormat.allCaps) {\n text = text.toUpperCase();\n }\n return this.context.measureText(text).width;\n };\n TextHelper.prototype.setText = function (textToRender, isBidi, bdo, isRender) {\n if (isNullOrUndefined(isRender)) {\n isRender = false;\n }\n if (textToRender.length === 0) {\n return '';\n }\n var isRtlText = isBidi;\n if ((!isRtlText && (bdo === 'RTL')) || (isRtlText && (bdo === 'LTR'))) {\n textToRender = HelperMethods.reverseString(textToRender);\n }\n else if (isRender && isRtlText && HelperMethods.endsWith(textToRender)) {\n var spaceCount = textToRender.length - HelperMethods.trimEnd(textToRender).length;\n textToRender = HelperMethods.addSpace(spaceCount) + HelperMethods.trimEnd(textToRender);\n }\n return textToRender;\n };\n TextHelper.prototype.measureText = function (text, characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.hasValue('fontSize') ? listCharacterFormat.fontSize : breakCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.hasValue('fontFamily') ? listCharacterFormat.fontFamily : breakCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.hasValue('bold') ? listCharacterFormat.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.hasValue('italic') ? listCharacterFormat.italic ? 'italic' : ''\n : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n var isRTL = format.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, format.bdo);\n elementBox.width = this.getWidth(text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n };\n TextHelper.prototype.containsSpecialCharAlone = function (text) {\n /* eslint-disable */\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?,' + ' ' + \"'\";\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsNumberAlone = function (text) {\n /* eslint-disable */\n var number = '0123456789';\n if (text === '') {\n return false;\n }\n for (var i = 0; i < text.length; i++) {\n if (number.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsCombinationText = function (element) {\n /* eslint-disable */\n if (element.text.match(/^[0-9]+$/) && element.paragraph.bidi) {\n return true;\n }\n else {\n return false;\n }\n };\n TextHelper.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case '(':\n //Specify the ')'\n return ')';\n //Specify the ')'\n case ')':\n //Specify the '('\n return '(';\n //Specify the '<'\n case '<':\n //Specify the '>'\n return '>';\n //Specify the '>'\n case '>':\n //Specify the '<'\n return '<';\n //Specify the '{'\n case '{':\n //Specify the '}'\n return '}';\n //Specify the '}'\n case '}':\n //Specify the '{'\n return '{';\n //Specify the '['\n case '[':\n //Specify the ']'\n return ']';\n //Specify the ']'\n case ']':\n //Specify the '['\n return '[';\n default:\n return ch;\n }\n };\n TextHelper.prototype.containsSpecialChar = function (text) {\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?' + ' ';\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {boolean} - Returns true if given text it right to left.\n */\n TextHelper.prototype.isRTLText = function (text) {\n var isRTL = false;\n if (!isNullOrUndefined(text)) {\n for (var i = 0; i < text.length; i++) {\n var temp = text[i];\n if ((temp >= String.fromCharCode(1424) && temp <= String.fromCharCode(1535)) ////Script-Hebr, Hebrew characters https://en.wikipedia.org/wiki/Hebrew_alphabet#Unicode_and_HTML (https://en.wikipedia.org/wiki/Hebrew_(Unicode_block))\n || (temp >= String.fromCharCode(64285) && temp <= String.fromCharCode(64335)) //Script-Hebr, Hebrew Alphabetic Presentation Forms characters https://en.wikipedia.org/wiki/Alphabetic_Presentation_Forms \n || (temp >= String.fromCharCode(1536) && temp <= String.fromCharCode(1791)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(1872) && temp <= String.fromCharCode(1919)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(2208) && temp <= String.fromCharCode(2303)) //Arabic characters\n || (temp >= String.fromCharCode(64336) && temp <= String.fromCharCode(65023)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(65136) && temp <= String.fromCharCode(65279)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(43392) && temp <= String.fromCharCode(43487)) //Javanese characters\n || (temp >= String.fromCharCode(1792) && temp <= String.fromCharCode(1871)) //Syriac characters\n || (temp >= String.fromCharCode(1920) && temp <= String.fromCharCode(1983)) //Thaana characters\n || (temp >= String.fromCharCode(2112) && temp <= String.fromCharCode(2143)) //Mandiac characters\n || (temp >= String.fromCharCode(1984) && temp <= String.fromCharCode(2047)) //N'Ko characters\n || (temp >= String.fromCharCode(2048) && temp <= String.fromCharCode(2111)) //Samaritan characters\n //Tifinag characters \n || (temp >= String.fromCharCode(11568) && temp <= String.fromCharCode(11647))) {\n isRTL = true;\n break;\n }\n }\n }\n return isRTL;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {RtlInfo} - Returns the text info.\n */\n TextHelper.prototype.getRtlLanguage = function (text) {\n if (isNullOrUndefined(text) || text === '') {\n return { isRtl: false, id: 0 };\n }\n if (text >= String.fromCharCode(1424) && text <= String.fromCharCode(1535)) {\n return { isRtl: true, id: 1 };\n //Arabic - Urdu characters\n }\n else if ((text >= String.fromCharCode(1536) && text <= String.fromCharCode(1791))\n || (text >= String.fromCharCode(1872) && text <= String.fromCharCode(1919))\n || (text >= String.fromCharCode(2208) && text <= String.fromCharCode(2303))\n || (text >= String.fromCharCode(64336) && text <= String.fromCharCode(65023))\n || (text >= String.fromCharCode(65136) && text <= String.fromCharCode(65279))) {\n return { isRtl: true, id: 2 };\n }\n else if (text >= String.fromCharCode(43392) && text <= String.fromCharCode(43487)) {\n return { isRtl: true, id: 3 };\n }\n else if (text >= String.fromCharCode(1792) && text <= String.fromCharCode(1871)) {\n return { isRtl: true, id: 4 };\n }\n else if (text >= String.fromCharCode(1920) && text <= String.fromCharCode(1983)) {\n return { isRtl: true, id: 5 };\n }\n else if (text >= String.fromCharCode(2112) && text <= String.fromCharCode(2143)) {\n return { isRtl: true, id: 6 };\n }\n else if (text >= String.fromCharCode(1984) && text <= String.fromCharCode(2047)) {\n return { isRtl: true, id: 7 };\n }\n else if (text >= String.fromCharCode(2048) && text <= String.fromCharCode(2111)) {\n return { isRtl: true, id: 8 };\n }\n else if (text >= String.fromCharCode(11568) && text <= String.fromCharCode(11647)) {\n return { isRtl: true, id: 9 };\n }\n return { isRtl: false, id: 0 };\n };\n /**\n * @private\n */\n TextHelper.prototype.splitTextByConsecutiveLtrAndRtl = function (text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter) {\n var charTypeIndex = characterRangeTypes.length;\n var splittedText = [];\n if (isNullOrUndefined(text) || text === '') {\n return splittedText;\n }\n var lastLtrIndex = -1;\n var ltrText = '';\n var rtlText = '';\n var wordSplitChars = '';\n var numberText = '';\n for (var i = 0; i < text.length; i++) {\n var currentCharacterType = 0;\n var separateEachWordSplitChars = false;\n if ((isNullOrUndefined(isPrevLTRText) ? !isPrevLTRText : isTextBidi) && this.isNumber(text[i])) {\n numberText += text[i];\n currentCharacterType = 4;\n }\n else if (this.isWordSplitChar(text[i])) {\n currentCharacterType = 2;\n if (separateEachWordSplitChars = (isTextBidi || (text.charCodeAt(i) == 32 && wordSplitChars == ''))) {\n wordSplitChars += text[i];\n }\n else {\n wordSplitChars += text[i];\n }\n }\n else if (this.isRTLText(text[i]) && !this.isNumber(text[i])) {\n isPrevLTRText = false;\n hasRTLCharacter = true;\n rtlText += text[i];\n currentCharacterType = 1;\n }\n else {\n isPrevLTRText = true;\n ltrText += text[i];\n }\n if (numberText != '' && currentCharacterType != 4) {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n numberText = '';\n }\n if (rtlText != '' && currentCharacterType != 1) {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n rtlText = '';\n }\n if (ltrText != '' && currentCharacterType != 0) {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n ltrText = '';\n }\n if (wordSplitChars != '' && (currentCharacterType != 2 || separateEachWordSplitChars)) {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n wordSplitChars = '';\n }\n }\n if (numberText != '') {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n }\n else if (rtlText != '') {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else if (ltrText != '') {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n else if (wordSplitChars != '') {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n }\n if (hasRTLCharacter || (!isNullOrUndefined(isPrevLTRText) && !isPrevLTRText)) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)) \n //along with single in-between word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n //Else handled to combine consecutive number when text bidi is false and middle word split character is not white space.\n || this.isNumberNonReversingCharacter(splittedText[i], isTextBidi))\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n else if (lastLtrIndex != -1) {\n if (isTextBidi) {\n for (var i = 1; i < lastLtrIndex; i++) {\n //Combines the first and last LTR along with all in-between splited text's.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && i < lastLtrIndex\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight) {\n ltrText = '';\n for (var j = i + 1; j <= lastLtrIndex; j++) {\n ltrText += splittedText[j];\n splittedText.splice(j, 1);\n characterRangeTypes.splice(j + charTypeIndex, 1);\n j--;\n lastLtrIndex--;\n }\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + ltrText;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n lastLtrIndex--;\n }\n }\n }\n else {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n }\n else if (!isTextBidi) {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n if (isTextBidi) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)\n //or if it's lang attribute is represent a RTL language)\n //along with single in-between number non reversing word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n || this.isNumberNonReversingCharacter(splittedText[i], isTextBidi) || !isRTLLang)\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the Number along with single non-word split characters (% $ #).\n else if (charType == CharacterRangeType.WordSplit\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n && this.isNonWordSplitCharacter(splittedText[i]) && !isRTLLang) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the consecutive LTR and Number\n else if (charType == CharacterRangeType.LeftToRight\n && (characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n || characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight)) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n characterRangeTypes[i + charTypeIndex - 1] = CharacterRangeType.LeftToRight;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n return splittedText;\n };\n /**\n * @private\n */\n TextHelper.prototype.isRightToLeftLanguage = function (lang) {\n return (lang == 14337 || lang == 15361 || lang == 5121 || lang == 3073 || lang == 2049 ||\n lang == 11265 || lang == 13313 || lang == 12289 || lang == 4097 || lang == 8193 ||\n lang == 16385 || lang == 1025 || lang == 10241 || lang == 7169 || lang == 9217 || lang == 10655);\n };\n TextHelper.prototype.isNumber = function (ch) {\n if (!isNaN(parseInt(ch, 10))) {\n //This logic works for universal digits 0 to 9.\n return true;\n }\n else if (ch >= String.fromCharCode(1632) && ch <= String.fromCharCode(1641)) {\n //This logic works for ARABIC-INDIC DIGIT\n return true;\n }\n else if (ch >= String.fromCharCode(1776) && ch <= String.fromCharCode(1785)) {\n //This logic works for EXTENDED ARABIC-INDIC DIGIT\n return true;\n }\n else {\n //TODO: Extend this for language specific \n return false;\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.isWordSplitChar = function (character) {\n for (var i = 0; i < TextHelper.wordSplitCharacters.length; i++) {\n if (TextHelper.wordSplitCharacters[i] === character) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.prototype.isNumberNonReversingCharacter = function (character, isTextBidi) {\n for (var i = 0; i < TextHelper.numberNonReversingCharacters.length; i++) {\n var ch = TextHelper.numberNonReversingCharacters[i];\n if (character[0] == ch && (ch.charCodeAt(0) == 47 ? !isTextBidi : true)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.prototype.isNonWordSplitCharacter = function (character) {\n var isNonWordSplitChar = false;\n for (var i = 0; i < character.length; i++) {\n var charCode = character.charCodeAt(i);\n //Consider a (% $ #) as non-word split characters\n if (charCode == 35 || charCode == 36 || charCode == 37) {\n isNonWordSplitChar = true;\n }\n else {\n isNonWordSplitChar = false;\n break;\n }\n }\n return isNonWordSplitChar;\n };\n TextHelper.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.context = undefined;\n this.paragraphMarkInfo = {};\n this.paragraphMarkInfo = undefined;\n };\n TextHelper.wordSplitCharacters = [String.fromCharCode(32), String.fromCharCode(33), String.fromCharCode(34), String.fromCharCode(35), String.fromCharCode(36), String.fromCharCode(37), String.fromCharCode(38), String.fromCharCode(39), String.fromCharCode(40), String.fromCharCode(41), String.fromCharCode(42), String.fromCharCode(43), String.fromCharCode(44), String.fromCharCode(45), String.fromCharCode(46), String.fromCharCode(47), String.fromCharCode(58), String.fromCharCode(59), String.fromCharCode(60), String.fromCharCode(61), String.fromCharCode(62), String.fromCharCode(63), String.fromCharCode(64), String.fromCharCode(91), String.fromCharCode(92), String.fromCharCode(93), String.fromCharCode(94), String.fromCharCode(95), String.fromCharCode(96), String.fromCharCode(123), String.fromCharCode(124), String.fromCharCode(125), String.fromCharCode(126), String.fromCharCode(1548), String.fromCharCode(1563), String.fromCharCode(1567), String.fromCharCode(8216), String.fromCharCode(8217), String.fromCharCode(8221), String.fromCharCode(12288), String.fromCharCode(8207)];\n TextHelper.numberNonReversingCharacters = [String.fromCharCode(44), String.fromCharCode(46), String.fromCharCode(47), String.fromCharCode(58), String.fromCharCode(1548)];\n return TextHelper;\n}());\nexport { TextHelper };\n","import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(documentHelper) {\n var _this = this;\n /**\n * @private\n * @param {WheelEvent} event Specifies the mouse wheen event\n * @returns {void}\n */\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.documentHelper.viewerContainer.offsetLeft;\n if (pageX < _this.documentHelper.pageContainer.offsetWidth) {\n var isFirefFox = navigator.userAgent.match('Firefox');\n /* eslint-disable */\n var wheel = isFirefFox ? event.detail < 0 : (Browser.isIE ? event.wheelDelta > 0 : event.deltaY < 0);\n /* eslint-enable */\n var zoomFactor = _this.documentHelper.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n };\n this.documentHelper = documentHelper;\n }\n Zoom.prototype.setZoomFactor = function () {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n this.documentHelper.selection.updateCaretPosition();\n }\n this.documentHelper.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.documentHelper.owner.imageResizerModule)) {\n this.documentHelper.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.documentHelper.owner.fireZoomFactorChange();\n };\n Object.defineProperty(Zoom.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.documentHelper.zoomFactor > 5) {\n this.documentHelper.zoomFactor = 5;\n }\n else if (this.documentHelper.zoomFactor < 0.1) {\n this.documentHelper.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n this.documentHelper.clearContent();\n viewer.handleZoom();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n Zoom.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar AddUserDialog = /** @class */ (function () {\n function AddUserDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n var localObj = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n localObj.setLocale(_this.documentHelper.owner.locale);\n if (!_this.target) {\n _this.initUserDialog(localObj, _this.documentHelper.owner.enableRtl);\n }\n _this.documentHelper.dialog.header = localObj.getConstant('Add Users');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.beforeOpen = _this.loadUserDetails;\n _this.documentHelper.dialog.close = _this.documentHelper.updateFocus;\n _this.documentHelper.dialog.buttons = [\n {\n click: _this.okButtonClick,\n buttonModel: {\n content: localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true\n }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }, {\n click: _this.deleteButtonClick,\n buttonModel: { content: localObj.getConstant('Delete'), cssClass: 'e-flat e-user-delete' }\n }\n ];\n _this.documentHelper.dialog.dataBind();\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadUserDetails = function () {\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n _this.documentHelper.restrictEditingPane.addedUser.dataSource = _this.documentHelper.userCollection.slice();\n _this.documentHelper.restrictEditingPane.addedUser.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n _this.documentHelper.restrictEditingPane.isAddUser = true;\n _this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n _this.documentHelper.restrictEditingPane.addUserCollection();\n _this.documentHelper.restrictEditingPane.isAddUser = false;\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.textBoxInput.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.addButton.disabled = _this.textBoxInput.value === '';\n };\n /**\n * @returns {void}\n */\n this.addButtonClick = function () {\n if (_this.validateUserName(_this.textBoxInput.value)) {\n if (_this.documentHelper.userCollection.indexOf(_this.textBoxInput.value) === -1) {\n _this.documentHelper.userCollection.push(_this.textBoxInput.value);\n }\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n _this.textBoxInput.value = '';\n }\n else {\n DialogUtility.alert('Invalid user name');\n }\n };\n /**\n * @returns {void}\n */\n this.deleteButtonClick = function () {\n var index = _this.documentHelper.userCollection.indexOf(_this.userList.getSelectedItems().text);\n if (index > -1) {\n _this.documentHelper.userCollection.splice(index, 1);\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n }\n };\n this.documentHelper = documentHelper;\n }\n AddUserDialog.prototype.initUserDialog = function (localValue, isRtl) {\n //const id: string = this.documentHelper.owner.containerId + '_addUser';\n this.target = createElement('div', { className: 'e-de-user-dlg' });\n var headerValue = localValue.getConstant('Enter User');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-de-user-dlg-common' });\n this.target.appendChild(commonDiv);\n var adduserDiv = createElement('div', { className: 'e-de-user-dlg-list' });\n commonDiv.appendChild(adduserDiv);\n if (isRtl) {\n adduserDiv.classList.add('e-de-rtl');\n }\n // const textBoxDiv: HTMLElement = createElement('div', { className: 'e-de-dlg-container' });\n // adduserDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-de-user-dlg-textbox-input', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n adduserDiv.appendChild(this.textBoxInput);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'),\n attrs: { type: 'button' }\n });\n adduserDiv.appendChild(addButtonElement);\n addButtonElement.addEventListener('click', this.addButtonClick);\n this.addButton = new Button({ cssClass: 'e-de-user-add-btn' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.addButton.addEventListener('click', this.addButtonClick);\n var userCollectionDiv = createElement('div');\n commonDiv.appendChild(userCollectionDiv);\n var userDiv = createElement('div', { innerHTML: localValue.getConstant('Users'), className: 'e-de-user-dlg-user' });\n userCollectionDiv.appendChild(userDiv);\n var listviewDiv = createElement('div');\n userCollectionDiv.appendChild(listviewDiv);\n this.userList = new ListView({\n cssClass: 'e-de-user-listview'\n });\n this.userList.appendTo(listviewDiv);\n };\n AddUserDialog.prototype.validateUserName = function (value) {\n if (value.indexOf('@') === -1) {\n return false;\n }\n else {\n var parts = value.split('@');\n var domain = parts[1];\n if (domain.indexOf('.') === -1) {\n return false;\n }\n else {\n var domainParts = domain.split('.');\n var ext = domainParts[1];\n if (domainParts.length > 2) {\n return false;\n }\n if (ext.length > 4 || ext.length < 2) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n AddUserDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return AddUserDialog;\n}());\nexport { AddUserDialog };\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * @private\n */\nvar EnforceProtectionDialog = /** @class */ (function () {\n function EnforceProtectionDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localeValue = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localeValue.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localeValue);\n }\n _this.documentHelper.dialog.header = _this.localeValue.getConstant('Start Enforcing Protection');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localeValue.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localeValue.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n if (_this.passwordTextBox.value !== _this.confirmPasswordTextBox.value) {\n DialogUtility.alert(_this.localeValue.getConstant('Password Mismatch'));\n }\n else {\n _this.password = _this.passwordTextBox.value;\n _this.viewer.owner.editor.addProtection(_this.password, _this.owner.protectionType);\n }\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(EnforceProtectionDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EnforceProtectionDialog.prototype.initDialog = function (localValue) {\n //const instance: EnforceProtectionDialog = this;\n //const id: string = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { className: 'e-de-enforce' });\n var passwordContainer = createElement('div', { className: 'e-de-container-row' });\n //const newPassWord: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Enter new password') });\n this.passwordTextBox = createElement('input', { attrs: { type: 'password', autofocus: 'true' }, className: 'e-input' });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n //container.appendChild(newPassWord);\n passwordContainer.appendChild(this.passwordTextBox);\n var confirmPasswordcontainer = createElement('div');\n //const confirmPassword: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Reenter new password to confirm') }) as HTMLDivElement;\n this.confirmPasswordTextBox = createElement('input', { attrs: { type: 'password' }, className: 'e-input' });\n //container.appendChild(confirmPassword);\n confirmPasswordcontainer.appendChild(this.confirmPasswordTextBox);\n this.target.appendChild(passwordContainer);\n this.target.appendChild(confirmPasswordcontainer);\n new TextBox({ placeholder: localValue.getConstant('Enter new password'), floatLabelType: 'Always', cssClass: 'e-de-enforce-dlg-input' }, this.passwordTextBox);\n new TextBox({ placeholder: localValue.getConstant('Reenter new password to confirm'), floatLabelType: 'Always' }, this.confirmPasswordTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n EnforceProtectionDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return EnforceProtectionDialog;\n}());\nexport { EnforceProtectionDialog };\n/**\n * @private\n */\nvar UnProtectDocumentDialog = /** @class */ (function () {\n function UnProtectDocumentDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localObj = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localObj.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localObj);\n }\n _this.documentHelper.dialog.header = 'Unprotect Document';\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.documentHelper.dialog.dataBind();\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n var password = _this.passwordTextBox.value;\n if (password === '') {\n DialogUtility.alert(_this.localObj.getConstant('The password is incorrect'));\n return;\n }\n _this.viewer.owner.editor.stopProtection(password);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(UnProtectDocumentDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n UnProtectDocumentDialog.prototype.initDialog = function (localValue) {\n //const instance: UnProtectDocumentDialog = this;\n var id = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { id: id, className: 'e-de-enforce' });\n var container = createElement('div');\n var newPassWord = createElement('div', {\n className: 'e-de-unprotect-dlg-title',\n innerHTML: localValue.getConstant('Password')\n });\n this.passwordTextBox = createElement('input', {\n attrs: { type: 'password' },\n id: this.viewer.owner.containerId + '_display_text', className: 'e-input e-de-enforce-dlg-input'\n });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(newPassWord);\n container.appendChild(this.passwordTextBox);\n this.target.appendChild(container);\n };\n /**\n * @private\n * @returns {void}\n */\n UnProtectDocumentDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return UnProtectDocumentDialog;\n}());\nexport { UnProtectDocumentDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { AddUserDialog } from './add-user-dialog';\nimport { EnforceProtectionDialog, UnProtectDocumentDialog } from './enforce-protection-dialog';\nimport { Base64 } from '../editor/editor-helper';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * @private\n */\nvar RestrictEditing = /** @class */ (function () {\n function RestrictEditing(documentHelper) {\n var _this = this;\n this.addRemove = true;\n this.protectionType = 'ReadOnly';\n this.previousProtectionType = 'Read only';\n this.isShowRestrictPane = false;\n this.isAddUser = false;\n this.usersCollection = ['Everyone'];\n /**\n * @returns {void}\n */\n this.closePane = function () {\n _this.restrictPane.style.display = 'none';\n _this.documentHelper.updateViewerSize();\n };\n this.onYesButtonClick = function () {\n _this.viewer.owner.editor.removeAllEditRestrictions();\n _this.documentHelper.dialog.hide();\n };\n this.onCancelButtonClick = function (args) {\n _this.protectionTypeDrop.value = _this.previousProtectionType;\n _this.documentHelper.dialog.hide();\n };\n this.onNoButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @returns {void}\n */\n this.showAllRegion = function () {\n _this.documentHelper.selection.showAllEditingRegion();\n };\n this.documentHelper = documentHelper;\n this.addUserDialog = new AddUserDialog(documentHelper);\n this.enforceProtectionDialog = new EnforceProtectionDialog(documentHelper, this);\n this.unProtectDialog = new UnProtectDocumentDialog(documentHelper, this);\n this.base64 = new Base64();\n }\n Object.defineProperty(RestrictEditing.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n RestrictEditing.prototype.showHideRestrictPane = function (isShow) {\n if (!this.restrictPane) {\n this.localObj = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localObj.setLocale(this.viewer.owner.locale);\n this.initPane(this.localObj, this.documentHelper.owner.enableRtl);\n }\n if (isShow) {\n this.restrictPane.style.display = 'block';\n this.isShowRestrictPane = true;\n this.documentHelper.selection.isHighlightEditRegion = true;\n this.wireEvents();\n this.documentHelper.updateViewerSize();\n this.loadPaneValue();\n }\n else {\n this.closePane();\n this.documentHelper.updateFocus();\n }\n };\n RestrictEditing.prototype.initPane = function (localValue, isRtl) {\n this.restrictPane = createElement('div', { className: 'e-de-restrict-pane' });\n if (isRtl) {\n this.restrictPane.classList.add('e-rtl');\n }\n var headerWholeDiv = createElement('div', { className: 'e-de-rp-whole-header' });\n var headerDiv1 = createElement('div', {\n innerHTML: localValue.getConstant('Restrict Editing'), className: 'e-de-rp-header'\n });\n this.closeButton = createElement('button', {\n className: 'e-de-rp-close-icon e-de-close-icon e-btn e-flat e-icon-btn',\n attrs: { type: 'button' }\n });\n headerWholeDiv.appendChild(this.closeButton);\n headerWholeDiv.appendChild(headerDiv1);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.restrictPane.appendChild(headerWholeDiv);\n this.initRestrictEditingPane(localValue);\n this.documentHelper.optionsPaneContainer.setAttribute('style', 'display:inline-flex;');\n this.documentHelper.optionsPaneContainer.insertBefore(this.restrictPane, this.documentHelper.viewerContainer);\n };\n /* eslint-disable */\n RestrictEditing.prototype.initRestrictEditingPane = function (localObj) {\n this.restrictPaneWholeDiv = createElement('div');\n var formatWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var formatDiv = createElement('div', {\n innerHTML: localObj.getConstant('Formatting restrictions'),\n className: 'e-de-rp-format'\n });\n formatWholeDiv.appendChild(formatDiv);\n var allowFormatting = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n formatWholeDiv.appendChild(allowFormatting);\n this.allowFormat = this.createCheckBox(localObj.getConstant('Allow formatting'), allowFormatting);\n this.restrictPaneWholeDiv.appendChild(formatWholeDiv);\n // Editing restrictions\n var editRestrictWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n // let editRestrict: HTMLElement = createElement('div', {\n // innerHTML: localObj.getConstant('Editing restrictions'),\n // className: 'e-de-rp-format'\n // });\n // editRestrictWholeDiv.appendChild(editRestrict);\n var readOnly = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n var protectionTypeInput = createElement('input', {\n className: 'e-prop-font-style'\n });\n editRestrictWholeDiv.appendChild(protectionTypeInput);\n var protectionTypeValue = [\n { Value: 'Read only', Name: localObj.getConstant('Read only') },\n { Value: 'Filling in forms', Name: localObj.getConstant('Filling in forms') },\n { Value: 'Comments', Name: localObj.getConstant('Comments') },\n { Value: 'Tracked changes', Name: localObj.getConstant('Tracked changes') }\n ];\n this.protectionTypeDrop = new DropDownList({\n dataSource: protectionTypeValue,\n cssClass: 'e-de-prop-dropdown',\n floatLabelType: 'Always',\n placeholder: localObj.getConstant('Editing restrictions'),\n fields: { text: 'Name', value: 'Value' },\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.protectionTypeDrop.value = 'Read only';\n this.protectionTypeDrop.appendTo(protectionTypeInput);\n // let allowPrint: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowPrint'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowPrint);\n // this.allowPrint = this.createCheckBox('Allow Printing', allowPrint);\n // let allowCopy: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowCopy'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowCopy);\n // this.allowCopy = this.createCheckBox('Allow Copy', allowCopy);\n this.restrictPaneWholeDiv.appendChild(editRestrictWholeDiv);\n // User Permissions\n this.userWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var userDiv = createElement('div', {\n innerHTML: localObj.getConstant('Exceptions Optional'),\n className: 'e-de-rp-format'\n });\n this.userWholeDiv.appendChild(userDiv);\n var subContentDiv = createElement('div', {\n innerHTML: localObj.getConstant('Select Part Of Document And User'),\n className: 'e-de-rp-sub-content-div'\n });\n this.userWholeDiv.appendChild(subContentDiv);\n var emptyuserDiv = createElement('div', { className: 'e-de-rp-user' });\n this.userWholeDiv.appendChild(emptyuserDiv);\n this.addedUser = new ListView({\n cssClass: 'e-de-user-listView',\n dataSource: [{ text: 'Everyone' }],\n showCheckBox: true,\n select: this.selectHandler.bind(this),\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.addedUser.appendTo(emptyuserDiv);\n this.addUser = createElement('button', {\n className: 'e-btn e-primary e-flat e-de-rp-mu-btn',\n innerHTML: localObj.getConstant('More users') + '...',\n //styles: 'margin-top: 3px',\n attrs: { type: 'button' }\n });\n this.userWholeDiv.appendChild(this.addUser);\n this.restrictPaneWholeDiv.appendChild(this.userWholeDiv);\n var lastDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.restrictPaneWholeDiv.appendChild(lastDiv);\n this.enforceProtection = createElement('button', {\n innerHTML: localObj.getConstant('Enforcing Protection'),\n className: 'e-btn e-de-rp-btn-enforce',\n attrs: { type: 'button' }\n });\n lastDiv.appendChild(this.enforceProtection);\n this.restrictPane.appendChild(this.restrictPaneWholeDiv);\n this.stopProtectionDiv = createElement('div', { styles: 'display:none' });\n var headerDiv = createElement('div', { innerHTML: localObj.getConstant('Your permissions'), className: 'e-de-rp-stop-div1' });\n this.stopProtectionDiv.appendChild(headerDiv);\n var contentWholeDiv = createElement('div', { className: 'e-de-rp-stop-div2' });\n this.stopProtectionDiv.appendChild(contentWholeDiv);\n var content1 = localObj.getConstant('Protected Document');\n this.contentDiv1 = createElement('div', { innerHTML: content1 });\n contentWholeDiv.appendChild(this.contentDiv1);\n var content2 = localObj.getConstant('ReadOnlyProtection');\n this.contentDiv2 = createElement('div', { innerHTML: content2 });\n contentWholeDiv.appendChild(this.contentDiv2);\n this.stopReadOnlyOptions = createElement('div');\n this.stopProtectionDiv.appendChild(this.stopReadOnlyOptions);\n var navigateNext = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var navigateNextButton = createElement('button', {\n innerHTML: localObj.getConstant('Find Next Region I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n navigateNext.appendChild(navigateNextButton);\n navigateNextButton.addEventListener('click', this.navigateNextRegion.bind(this));\n this.stopReadOnlyOptions.appendChild(navigateNext);\n var showAllRegion = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var showAllRegionButton = createElement('button', {\n innerHTML: localObj.getConstant('Show All Regions I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n showAllRegion.appendChild(showAllRegionButton);\n showAllRegionButton.addEventListener('click', this.showAllRegion);\n this.stopReadOnlyOptions.appendChild(showAllRegion);\n var highlightRegion = createElement('div', { className: 'e-de-rp-nav-lbl e-de-rp-more-less' });\n var highlightRegionInput = createElement('input', { attrs: { type: 'checkbox' }, className: 'e-btn e-de-rp-nav-btn' });\n highlightRegion.appendChild(highlightRegionInput);\n this.stopReadOnlyOptions.appendChild(highlightRegion);\n this.highlightCheckBox = new CheckBox({ label: localObj.getConstant('Highlight the regions I can edit'), enableRtl: this.documentHelper.owner.enableRtl }, highlightRegionInput);\n var lastButtonDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.stopProtection = createElement('button', {\n innerHTML: localObj.getConstant('Stop Protection'),\n className: 'e-btn e-de-rp-btn-stop-enforce',\n attrs: { type: 'button' }\n });\n lastButtonDiv.appendChild(this.stopProtection);\n this.stopProtectionDiv.appendChild(lastButtonDiv);\n this.restrictPane.appendChild(this.stopProtectionDiv);\n };\n RestrictEditing.prototype.showStopProtectionPane = function (show) {\n if (show) {\n this.stopProtectionDiv.style.display = 'block';\n this.restrictPaneWholeDiv.style.display = 'none';\n }\n else {\n this.stopProtectionDiv.style.display = 'none';\n this.restrictPaneWholeDiv.style.display = 'block';\n }\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n case 'CommentsOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n default:\n this.stopReadOnlyOptions.style.display = 'none';\n break;\n }\n };\n RestrictEditing.prototype.wireEvents = function () {\n this.addUser.addEventListener('click', this.addUserDialog.show);\n this.enforceProtection.addEventListener('click', this.protectDocument.bind(this));\n this.stopProtection.addEventListener('click', this.stopProtectionTriggered.bind(this));\n this.closeButton.addEventListener('click', this.closePane);\n this.allowFormat.addEventListener('change', this.enableFormatting.bind(this));\n this.protectionTypeDrop.addEventListener('change', this.protectionTypeDropChanges.bind(this));\n this.highlightCheckBox.addEventListener('change', this.highlightClicked.bind(this));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.enableFormatting = function (args) {\n this.documentHelper.restrictFormatting = !args.checked;\n };\n RestrictEditing.prototype.stopProtectionTriggered = function (args) {\n if ((isNullOrUndefined(this.documentHelper.saltValue) || this.documentHelper.saltValue === '')\n && (isNullOrUndefined(this.documentHelper.hashValue) || this.documentHelper.hashValue === '')) {\n this.documentHelper.owner.editor.unProtectDocument();\n return;\n }\n this.unProtectDialog.show();\n };\n RestrictEditing.prototype.protectionTypeDropChanges = function (args) {\n switch (args.value) {\n case 'Read only':\n this.protectionType = 'ReadOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('ReadOnlyProtection');\n //this.contentDiv2.style.display = 'block'; \n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Filling in forms':\n this.protectionType = 'FormFieldsOnly';\n this.userWholeDiv.style.display = 'none';\n //this.enforceProtection.style.marginLeft = '8px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('FormFieldsOnly');\n //this.contentDiv2.style.display = 'block';\n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Comments':\n this.protectionType = 'CommentsOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('CommentsOnly');\n //this.contentDiv2.style.display = 'none';\n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Tracked changes':\n this.protectionType = 'RevisionsOnly';\n this.userWholeDiv.style.display = 'none';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('TrackChangesOnly');\n this.previousProtectionType = args.previousItemData.Value;\n if (this.documentHelper.selection && this.documentHelper.editRanges.length > 0) {\n this.documentHelper.dialog.height = ' Auto';\n this.documentHelper.dialog.width = ' 600px';\n this.documentHelper.dialog.header = this.localObj.getConstant('Information');\n this.documentHelper.dialog.content = this.localObj.getConstant('RemovedIgnoreExceptions') + '
' + '
' + this.localObj.getConstant('RemovedIgnore');\n this.documentHelper.dialog.buttons = [{\n click: this.onYesButtonClick,\n buttonModel: { content: this.localObj.getConstant('Yes') }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel') }\n },\n {\n click: this.onNoButtonClick,\n buttonModel: { content: this.localObj.getConstant('No') }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n }\n break;\n default:\n this.protectionType = 'NoProtection';\n this.addedUser.uncheckAllItems();\n this.viewer.owner.editor.removeAllEditRestrictions();\n break;\n }\n };\n RestrictEditing.prototype.selectHandler = function (args) {\n if (args.isChecked) {\n this.viewer.owner.editor.insertEditRangeElement(args.text);\n args.event.target.classList.add('e-check');\n }\n else {\n this.viewer.owner.editor.removeUserRestrictions(args.text);\n }\n };\n RestrictEditing.prototype.highlightClicked = function (args) {\n this.documentHelper.selection.isHighlightEditRegion = args.checked;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.protectDocument = function () {\n this.enforceProtectionDialog.show();\n };\n RestrictEditing.prototype.createCheckBox = function (label, element) {\n var checkBox = new CheckBox({ label: label, enableRtl: this.documentHelper.owner.enableRtl });\n checkBox.appendTo(element);\n return checkBox;\n };\n RestrictEditing.prototype.loadPaneValue = function () {\n // if (!this.isAddUser) {\n // this.protectionType = this.documentHelper.protectionType;\n // }\n this.allowFormat.checked = !this.documentHelper.restrictFormatting;\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.protectionTypeDrop.value = 'Read only';\n break;\n case 'FormFieldsOnly':\n this.protectionTypeDrop.value = 'Filling in forms';\n break;\n case 'CommentsOnly':\n this.protectionTypeDrop.value = 'Comments';\n break;\n case 'RevisionsOnly':\n this.protectionTypeDrop.value = 'Tracked changes';\n break;\n }\n this.highlightCheckBox.checked = true;\n this.addedUser.enablePersistence = true;\n this.addedUser.dataSource = this.usersCollection.slice();\n this.addedUser.dataBind();\n this.showStopProtectionPane(this.documentHelper.isDocumentProtected);\n };\n RestrictEditing.prototype.navigateNextRegion = function () {\n this.documentHelper.selection.navigateToNextEditingRegion();\n };\n RestrictEditing.prototype.addUserCollection = function () {\n if (this.documentHelper.selection && this.documentHelper.selection.editRangeCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.selection.editRangeCollection.length; i++) {\n var editStart = this.documentHelper.selection.editRangeCollection[i];\n if (editStart.user !== '' && this.usersCollection.indexOf(editStart.user) === -1) {\n this.usersCollection.push(editStart.user);\n }\n if (editStart.group !== '' && this.usersCollection.indexOf(editStart.group) === -1) {\n this.usersCollection.push(editStart.group);\n }\n }\n }\n this.addedUser.dataSource = this.documentHelper.userCollection.slice();\n this.addedUser.dataBind();\n };\n RestrictEditing.prototype.updateUserInformation = function () {\n this.addedUser.uncheckAllItems();\n if (this.documentHelper.selection.checkSelectionIsAtEditRegion) {\n var editRange = this.documentHelper.selection.getEditRangeStartElement();\n if (editRange) {\n var index = this.addedUser.dataSource.indexOf(editRange.user);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n index = this.addedUser.dataSource.indexOf(editRange.group);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n RestrictEditing.prototype.destroy = function () {\n if (this.addUserDialog) {\n this.addUserDialog.destroy();\n }\n this.addUserDialog = undefined;\n if (this.enforceProtectionDialog) {\n this.enforceProtectionDialog.destroy();\n }\n this.enforceProtectionDialog = undefined;\n if (this.unProtectDialog) {\n this.unProtectDialog.destroy();\n }\n this.unProtectDialog = undefined;\n if (this.base64) {\n this.base64.destroy();\n }\n this.base64 = undefined;\n this.documentHelper = undefined;\n };\n return RestrictEditing;\n}());\nexport { RestrictEditing };\n","import { createElement, isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextFormField, DropDownFormField, CheckBoxFormField } from '../viewer/page';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { afterFormFieldFillEvent } from '../../base/index';\n/**\n * @private\n */\nvar FormFieldPopUp = /** @class */ (function () {\n /**\n * @param {DocumentEditor} owner - Specifies the document editor.\n * @private\n */\n function FormFieldPopUp(owner) {\n var _this = this;\n /**\n * @returns {void}\n */\n this.applyTextFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.textBoxInstance.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyNumberFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.numberInput.value.toString());\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyDateFormFieldValue = function () {\n if (!isNullOrUndefined(_this.datePickerInstance.value)) {\n _this.owner.editor.updateFormField(_this.formField, _this.dateInput.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n }\n };\n /**\n * @returns {void}\n */\n this.applyDropDownFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.ddlInstance.index);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.formFieldData.selectedIndex, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @param {ChangedEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.enableDisableDatePickerOkButton = function (args) {\n if (args.isInteracted) {\n _this.dataPickerOkButton.disabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeButton = function () {\n var field = _this.formField;\n _this.hidePopup();\n var eventArgs = { 'fieldName': field.formFieldData.name };\n if (field.formFieldData instanceof TextFormField) {\n eventArgs.value = field.resultText;\n }\n else if (field.formFieldData instanceof CheckBoxFormField) {\n eventArgs.value = field.formFieldData.checked;\n }\n else {\n eventArgs.value = field.formFieldData.selectedIndex;\n }\n eventArgs.isCanceled = true;\n _this.owner.trigger(afterFormFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hidePopup = function () {\n _this.owner.documentHelper.isFormFilling = false;\n _this.formField = undefined;\n if (_this.target) {\n _this.target.style.display = 'none';\n }\n if (_this.popupObject) {\n _this.popupObject.hide();\n _this.popupObject.destroy();\n _this.popupObject = undefined;\n }\n };\n this.owner = owner;\n }\n FormFieldPopUp.prototype.initPopup = function () {\n var popupElement = createElement('div', { className: 'e-de-form-popup' });\n this.textBoxContainer = this.initTextBoxInput();\n popupElement.appendChild(this.textBoxContainer);\n popupElement.appendChild(this.initNumericTextBox());\n popupElement.appendChild(this.initDatePicker());\n popupElement.appendChild(this.initDropDownList());\n this.target = popupElement;\n this.owner.documentHelper.viewerContainer.appendChild(popupElement);\n };\n FormFieldPopUp.prototype.initTextBoxInput = function () {\n var textBoxDiv = createElement('div', { className: 'e-de-txt-field' });\n var textBoxInput = createElement('input', { className: 'e-de-txt-form' });\n var textBox = new TextBox();\n this.textBoxInput = textBoxInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyTextFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n textBoxDiv.appendChild(textBoxInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n textBoxDiv.appendChild(textBoxButtonDiv);\n textBox.appendTo(textBoxInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.textBoxInstance = textBox;\n return textBoxDiv;\n };\n FormFieldPopUp.prototype.initNumericTextBox = function () {\n var numericDiv = createElement('div', { className: 'e-de-num-field' });\n var numberInput = createElement('input', { className: 'e-de-txt-form' });\n var numericTextBox = new NumericTextBox();\n this.numberInput = numberInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyNumberFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n numericDiv.appendChild(numberInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n numericDiv.appendChild(textBoxButtonDiv);\n numericTextBox.appendTo(numberInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.numericTextBoxInstance = numericTextBox;\n return numericDiv;\n };\n FormFieldPopUp.prototype.initDatePicker = function () {\n var dateDiv = createElement('div', { className: 'e-de-date-field' });\n var dateInput = createElement('input', { className: 'e-de-txt-form' });\n /* eslint-disable-next-line max-len */\n var datePicker = new DateTimePicker({ strictMode: true, change: this.enableDisableDatePickerOkButton });\n this.dateInput = dateInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDateFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dateDiv.appendChild(dateInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dateDiv.appendChild(textBoxButtonDiv);\n datePicker.appendTo(dateInput);\n this.dataPickerOkButton = new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.datePickerInstance = datePicker;\n return dateDiv;\n };\n FormFieldPopUp.prototype.initDropDownList = function () {\n var dropDownDiv = createElement('div', { className: 'e-de-ddl-field' });\n var dropDownInput = createElement('input', { className: 'e-de-txt-form' });\n var ddl = new DropDownList();\n this.dropDownInput = dropDownInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDropDownFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dropDownDiv.appendChild(dropDownInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dropDownDiv.appendChild(textBoxButtonDiv);\n ddl.appendTo(dropDownInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.ddlInstance = ddl;\n return dropDownDiv;\n };\n /**\n * @private\n * @param {FieldElementBox} formField - Specifies the field element.\n * @returns {void}\n */\n FormFieldPopUp.prototype.showPopUp = function (formField) {\n var _this = this;\n if (formField) {\n this.formField = formField;\n this.owner.selection.selectField();\n if (isNullOrUndefined(this.target)) {\n this.initPopup();\n }\n classList(this.target, [], ['e-de-txt-form', 'e-de-num-form', 'e-de-date-form', 'e-de-ddl-form']);\n var formFieldData = formField.formFieldData;\n if (formFieldData) {\n if (formFieldData instanceof TextFormField) {\n var resultText = formField.resultText;\n var rex = new RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n var maxLength = formFieldData.maxLength;\n var formFieldType = formFieldData.type;\n var inputElement_1;\n resultText = resultText ? resultText : '';\n if (formFieldType === 'Text') {\n classList(this.target, ['e-de-txt-form'], []);\n inputElement_1 = this.textBoxInput;\n this.textBoxInstance.value = resultText;\n }\n else if (formFieldData.type === 'Number') {\n classList(this.target, ['e-de-num-form'], []);\n inputElement_1 = this.numberInput;\n this.numericTextBoxInstance.format = formFieldData.format;\n this.numericTextBoxInstance.value = parseFloat(resultText.replace(/,/gi, ''));\n }\n else if (formFieldType === 'Date') {\n classList(this.target, ['e-de-date-form'], []);\n inputElement_1 = this.dateInput;\n var format = formFieldData.format;\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n this.datePickerInstance.format = format;\n this.datePickerInstance.value = new Date(resultText);\n this.dataPickerOkButton.disabled = true;\n }\n if (inputElement_1) {\n if (maxLength > 0) {\n inputElement_1.maxLength = maxLength;\n }\n else {\n inputElement_1.removeAttribute('maxlength');\n }\n setTimeout(function () {\n inputElement_1.focus();\n });\n }\n }\n else if (formFieldData instanceof DropDownFormField) {\n classList(this.target, ['e-de-ddl-form'], []);\n this.ddlInstance.dataSource = formFieldData.dropdownItems;\n this.ddlInstance.index = formFieldData.selectedIndex;\n setTimeout(function () {\n _this.ddlInstance.showPopup();\n });\n }\n var left = this.owner.selection.getLeftInternal(formField.line, formField, 0);\n var lineHeight = formField.line.height * this.owner.documentHelper.zoomFactor;\n var position = this.owner.selection.getTooltipPosition(formField.line, left, this.target, true);\n if (!this.popupObject) {\n this.popupObject = new Popup(this.target, {\n height: 'auto',\n width: 'auto',\n relateTo: this.owner.documentHelper.viewerContainer.parentElement,\n position: { X: position.x, Y: position.y + lineHeight }\n });\n }\n this.target.style.display = 'block';\n this.popupObject.show();\n }\n this.owner.documentHelper.isFormFilling = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormFieldPopUp.prototype.destroy = function () {\n if (this.formField) {\n this.formField.destroy();\n }\n this.formField = undefined;\n this.owner = undefined;\n };\n return FormFieldPopUp;\n}());\nexport { FormFieldPopUp };\n","import { createElement, L10n, isNullOrUndefined, select } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { TextElementBox, ElementBox, ImageElementBox, FieldElementBox, TextFormField, DropDownFormField, ParagraphWidget } from '../viewer/page';\nimport { WRowFormat, WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/index';\n/**\n * Track changes pane\n */\nvar TrackChangesPane = /** @class */ (function () {\n function TrackChangesPane(owner, commentReviewPane) {\n this.users = [];\n this.enableButtons = true;\n this.viewTypeitems = [];\n this.sortedRevisions = [];\n this.noChangesVisibleInternal = true;\n this.isTrackingPageBreak = false;\n /***\n * @private\n */\n this.tableRevisions = new Dictionary();\n this.owner = owner;\n this.commentReviewPane = commentReviewPane;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.selectedUser = this.locale.getConstant('All');\n this.selectedType = this.locale.getConstant('All');\n this.initTrackChangePane();\n this.commentReviewPane.reviewTab.items[1].content = this.trackChangeDiv;\n this.commentReviewPane.reviewTab.refresh();\n if (this.owner.enableRtl) {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;left:1px' }\n });\n }\n else {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;right:1px' }\n });\n }\n this.closeButton.title = this.locale.getConstant('Close');\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.commentReviewPane.reviewTab.element.appendChild(this.closeButton);\n this.closeButton.addEventListener('click', this.commentReviewPane.closePane.bind(this.commentReviewPane));\n }\n Object.defineProperty(TrackChangesPane.prototype, \"setNoChangesVisibility\", {\n get: function () {\n return this.noChangesVisibleInternal;\n },\n set: function (visible) {\n this.isChangesTabVisible = !visible;\n this.noChangeDivElement.style.display = visible ? 'block' : 'none';\n this.noChangesVisibleInternal = visible;\n this.enableDisableToolbarItem(!visible);\n this.commentReviewPane.reviewTab.hideTab(1, visible);\n this.owner.notify('reviewPane', { changes: !visible, comment: this.commentReviewPane.isCommentTabVisible });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TrackChangesPane.prototype, \"currentSelectedRevision\", {\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n var selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n }\n else if (value !== this.currentSelectedRevisionInternal || isNullOrUndefined(selectedElement)) {\n if (selectedElement) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n if (this.changes.length > 0 && this.changes.containsKey(value)) {\n var currentChangeView = this.changes.get(value);\n currentChangeView.singleInnerDiv.classList.add('e-de-trckchanges-inner-select');\n }\n }\n this.currentSelectedRevisionInternal = value;\n selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.parentElement.scrollIntoView({ block: 'nearest' });\n }\n },\n enumerable: true,\n configurable: true\n });\n TrackChangesPane.prototype.initTrackChangePane = function () {\n this.changes = new Dictionary();\n this.renderedChanges = new Dictionary();\n this.trackChangeDiv = createElement('div', { className: 'e-de-tc-pane' });\n this.trackChangeDiv.appendChild(this.initPaneHeader());\n this.changesInfoDiv = createElement('div', { id: 'e-de-tc-pane-revision', styles: 'overflow:auto' });\n this.trackChangeDiv.appendChild(this.changesInfoDiv);\n this.noChangeDivElement = createElement('div', { styles: 'display:none;', className: 'e-de-tc-no-chng' });\n this.noChangeDivElement.textContent = this.locale.getConstant('No changes');\n this.changesInfoDiv.appendChild(this.noChangeDivElement);\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.initPaneHeader = function () {\n var _this = this;\n this.toolbarElement = createElement('div', { className: 'e-de-track-toolbar' });\n this.toolbar = new Toolbar({\n enableRtl: this.owner.enableRtl,\n items: [\n {\n template: this.locale.getConstant('User') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-user-list' })\n },\n {\n type: 'Separator'\n },\n {\n template: this.locale.getConstant('View') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-revision-list' })\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-left',\n tooltipText: this.locale.getConstant('Previous Changes'), click: this.navigatePreviousChanges.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-right',\n tooltipText: this.locale.getConstant('Next Changes'), click: this.navigateNextChanges.bind(this)\n },\n {\n template: createElement('div', { id: 'e-de-menu-option' }), align: 'Right', cssClass: 'e-de-tc-tbr',\n tooltipText: this.locale.getConstant('More Options') + '...'\n }\n ]\n });\n this.toolbar.appendTo(this.toolbarElement);\n var navigateLeftButton = select('.e-de-nvgte-left', this.toolbarElement);\n navigateLeftButton.firstChild.classList.add('e-tc-nvgte');\n var navigateRightButton = select('.e-de-nvgte-right', this.toolbarElement);\n navigateRightButton.firstChild.classList.add('e-tc-nvgte');\n //User list drop down button\n var userButtonEle = select('#e-de-user-list', this.toolbarElement);\n this.userDropDownitems = [{ text: this.locale.getConstant('All') }];\n this.userDropDown = {\n items: this.userDropDownitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onUserSelect.bind(this),\n beforeOpen: this.onUserOpen.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedUser);\n }\n };\n this.userDropDownButton = new DropDownButton(this.userDropDown);\n this.userDropDownButton.appendTo(userButtonEle);\n this.userDropDownButton.content = this.getSpanView(this.userDropDown.items[0].text, 0);\n //Revision view type drop down button\n var viewTypeEle = select('#e-de-revision-list', this.toolbarElement);\n this.viewTypeitems = [{ text: this.locale.getConstant('All') }, { text: this.locale.getConstant('Inserted') }, { text: this.locale.getConstant('Deleted') }];\n this.viewTypeDropDownButton = new DropDownButton({\n items: this.viewTypeitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onTypeSelect.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedType);\n }\n });\n this.viewTypeDropDownButton.content = this.getSpanView(this.viewTypeitems[0].text, 1);\n this.viewTypeDropDownButton.appendTo(viewTypeEle);\n //More menu option drop down button\n this.menuoptionEle = select('#e-de-menu-option', this.toolbarElement);\n var menuOptions = [{ text: this.locale.getConstant('Accept all') }, { text: this.locale.getConstant('Reject all') }];\n var menuDropDown = {\n items: menuOptions,\n select: this.onMenuSelect.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide e-tc-btn-bg-clr'\n };\n this.menuDropDownButton = new DropDownButton(menuDropDown);\n this.menuDropDownButton.appendTo(this.menuoptionEle);\n return this.toolbarElement;\n };\n TrackChangesPane.prototype.beforeDropDownItemRender = function (args, content) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === content) {\n span.style.marginRight = '10px';\n span.style.alignSelf = 'center';\n span.setAttribute('class', 'e-de-selected-item e-icons');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n };\n TrackChangesPane.prototype.onUserOpen = function (arg) {\n var ele = arg.element;\n ele.style.maxHeight = '200px';\n ele.style.overflowY = 'auto';\n };\n TrackChangesPane.prototype.enableDisableToolbarItem = function (enable) {\n var elements = this.toolbar.element.querySelectorAll('.e-de-tc-tbr');\n if (this.owner && this.owner.viewer) {\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2], enable);\n }\n };\n TrackChangesPane.prototype.getSpanView = function (value, type) {\n return (type === 0 ? '' : '') + value + '';\n };\n TrackChangesPane.prototype.onMenuSelect = function (arg) {\n var _this = this;\n var selectedText = arg.item.text;\n if (selectedText.match(this.locale.getConstant('Accept all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(true, _this.sortedRevisions);\n }, 0);\n }\n else if (selectedText.match(this.locale.getConstant('Reject all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(false, _this.sortedRevisions);\n /* eslint-disable */\n }, 0);\n }\n this.updateUsers();\n };\n TrackChangesPane.prototype.onSelection = function (revision) {\n this.currentSelectedRevision = revision;\n };\n TrackChangesPane.prototype.onUserSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedUser = selectedText;\n this.userDropDownButton.content = this.getSpanView(selectedText, 0);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.onTypeSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedType = selectedText;\n this.viewTypeDropDownButton.content = this.getSpanView(selectedText, 1);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.updateMenuOptions = function () {\n var revisionType;\n if (this.selectedType !== this.locale.getConstant('All')) {\n revisionType = this.selectedType === this.locale.getConstant('Inserted') ? this.locale.getConstant('Insertion')\n : this.locale.getConstant('Deletion');\n }\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes');\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes');\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType;\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n else {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.menuDropDownButton.disabled = true;\n }\n };\n TrackChangesPane.prototype.sortCollectionToDisplay = function () {\n var isRevisionVisible = false;\n this.sortedRevisions = [];\n this.updateMenuOptions();\n for (var i = 0; i < this.changes.length; i++) {\n var changes = this.changes.get(this.revisions[i]);\n var singleChangesDiv = changes.outerSingleDiv;\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n if (changes.revisionType === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n if (changes.user === this.selectedUser) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else {\n if (changes.user === this.selectedUser && changes.revisionType === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n if (singleChangesDiv.style.display === 'block') {\n this.sortedRevisions.push(this.revisions[i]);\n }\n }\n this.setNoChangesVisibility = !isRevisionVisible;\n };\n TrackChangesPane.prototype.enableDisableButton = function (enableButton) {\n this.enableButtons = enableButton;\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.updateTrackChanges = function (show) {\n if (show || isNullOrUndefined(show)) {\n this.tableRevisions.clear();\n this.renderedChanges.clear();\n this.removeAllChanges();\n if (!this.enableButtons && !this.menuoptionEle.classList.contains('e-de-overlay')) {\n this.menuoptionEle.classList.add('e-de-overlay');\n }\n else if (this.menuoptionEle.classList.contains('e-de-overlay')) {\n this.menuoptionEle.classList.remove('e-de-overlay');\n }\n this.isChangesTabVisible = true;\n this.owner.notify('reviewPane', { comment: this.commentReviewPane.isCommentTabVisible, changes: this.isChangesTabVisible });\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var revision = this.owner.revisions.changes[i];\n var ranges = this.owner.revisions.changes[i].range[0];\n if (this.changes.containsKey(revision)) {\n continue;\n }\n if (ranges instanceof WRowFormat) {\n var groupedRevision = this.groupTableRevisions(this.owner.revisions.changes, i);\n if (groupedRevision.length > 1) {\n var changeView = void 0;\n for (var j = 0; j < groupedRevision.length; j++) {\n var nextRevision = groupedRevision[j];\n if (j === 0) {\n this.addChanges(nextRevision);\n changeView = this.changes.get(revision);\n }\n else {\n var nextRowFormat = nextRevision.range[0];\n changeView.appendRowToTable(nextRowFormat, j);\n this.revisions.push(revision);\n this.changes.add(nextRevision, changeView);\n }\n this.tableRevisions.add(nextRevision, groupedRevision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n this.sortCollectionToDisplay();\n this.updateUsers();\n if (show) {\n this.currentSelectedRevision = this.currentSelectedRevisionInternal;\n this.updateHeight();\n this.owner.resize();\n }\n }\n else {\n this.currentSelectedRevision = undefined;\n }\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.groupTableRevisions = function (revisions, startIndex) {\n var startRevision = revisions[startIndex];\n var groupedRevision = [startRevision];\n var currentRevisionType = startRevision.revisionType;\n var startRow = startRevision.range[0].ownerBase;\n var startTable = startRow.ownerTable;\n var rowIndex = startRow.index;\n var startParentTable = this.owner.documentHelper.layout.getParentTable(startTable);\n for (var i = startIndex + 1; i < revisions.length; i++) {\n var nextRevision = revisions[i];\n var nextRevisionType = nextRevision.revisionType;\n var change = nextRevision.range[0];\n if (change instanceof WRowFormat) {\n var nextRow = change.ownerBase;\n var nextTable = nextRow.ownerTable;\n var nextRowIndex = nextRow.index;\n if (!startTable.equals(nextTable) &&\n startParentTable.equals(this.owner.documentHelper.layout.getParentTable(nextTable))) {\n continue;\n }\n if (currentRevisionType === nextRevisionType && startRevision.author === nextRevision.author\n && startTable.equals(nextTable) && (rowIndex + 1 === nextRowIndex)) {\n groupedRevision.push(nextRevision);\n rowIndex = nextRowIndex;\n }\n else {\n break;\n }\n }\n else {\n var block = void 0;\n if (change instanceof WCharacterFormat) {\n block = change.ownerBase;\n }\n else if (change instanceof ElementBox) {\n block = change.line.paragraph;\n }\n if (block instanceof ParagraphWidget && block.isInsideTable) {\n var nextTable = block.associatedCell.ownerTable;\n var parentTable = this.owner.documentHelper.layout.getParentTable(nextTable);\n if (startTable.equals(nextTable) || (!startTable.equals(nextTable) &&\n startParentTable.equals(parentTable))) {\n continue;\n }\n }\n break;\n }\n }\n return groupedRevision;\n };\n TrackChangesPane.prototype.updateUsers = function () {\n if (this.users.length > 0) {\n this.userDropDownButton.removeItems(this.users);\n this.users = [];\n }\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.users.indexOf(this.revisions[i].author) === -1) {\n this.users.push(this.revisions[i].author);\n this.userDropDownButton.items.push({ text: this.revisions[i].author });\n }\n }\n };\n TrackChangesPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.commentReviewPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.changesInfoDiv.style.height = this.commentReviewPane.parentPaneElement.clientHeight - this.toolbarElement.clientHeight\n - tabHeaderHeight - 2 + 'px';\n };\n TrackChangesPane.prototype.removeAllChanges = function () {\n while (this.changesInfoDiv.childNodes.length > 1) {\n this.changesInfoDiv.removeChild(this.changesInfoDiv.lastChild);\n }\n this.revisions = [];\n this.changes.clear();\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.clear = function () {\n this.removeAllChanges();\n this.selectedUser = this.locale.getConstant('All');\n this.userDropDownButton.content = this.getSpanView(this.selectedUser, 0);\n this.selectedType = this.locale.getConstant('All');\n this.viewTypeDropDownButton.content = this.getSpanView(this.selectedType, 1);\n this.currentSelectedRevision = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.destroy = function () {\n this.removeAllChanges();\n if (this.toolbar) {\n this.toolbar.destroy();\n }\n if (this.closeButton && this.closeButton.parentElement) {\n this.closeButton.parentElement.removeChild(this.closeButton);\n }\n this.closeButton = undefined;\n if (this.userDropDownButton) {\n this.userDropDownButton.destroy();\n }\n if (this.menuDropDownButton) {\n this.menuDropDownButton.destroy();\n this.menuDropDownButton = undefined;\n }\n if (this.viewTypeDropDownButton) {\n this.viewTypeDropDownButton.destroy();\n }\n if (this.menuDropDownButton) {\n this.menuDropDownButton.destroy();\n this.menuDropDownButton = undefined;\n }\n if (this.userDropDown) {\n this.userDropDown = undefined;\n }\n if (this.users.length > 0) {\n this.users = [];\n }\n if (this.trackChangeDiv) {\n this.trackChangeDiv = undefined;\n }\n if (this.tableRevisions) {\n this.tableRevisions.destroy();\n this.tableRevisions = undefined;\n }\n };\n TrackChangesPane.prototype.addChanges = function (revision) {\n var currentChangeView = new ChangesSingleView(this.owner, this);\n this.changesInfoDiv.appendChild(currentChangeView.createSingleChangesDiv(revision));\n if (!this.enableButtons) {\n if (!(currentChangeView.acceptButtonElement.classList.contains('e-de-overlay'))) {\n currentChangeView.acceptButtonElement.classList.add('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.add('e-de-overlay');\n }\n }\n else if (currentChangeView.acceptButtonElement.classList.contains('e-de-overlay') && !this.owner.documentHelper.isTrackedOnlyMode) {\n currentChangeView.acceptButtonElement.classList.remove('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.remove('e-de-overlay');\n }\n this.revisions.push(revision);\n this.changes.add(revision, currentChangeView);\n this.renderedChanges.add(revision, currentChangeView);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigatePreviousChanges = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigateNextChanges = function () {\n this.revisionNavigateInternal(true);\n };\n TrackChangesPane.prototype.revisionNavigateInternal = function (next) {\n var changes = this.renderedChanges.keys;\n if (!this.currentSelectedRevisionInternal) {\n if (changes.length === 0) {\n return;\n }\n this.currentSelectedRevision = changes[0];\n }\n if (this.currentSelectedRevision) {\n var revisions = changes;\n var revision = this.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.owner.documentHelper.currentSelectedRevision = revision;\n var ranges = revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(revision));\n this.owner.selection.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selection.selectRevision(revision);\n }\n }\n this.currentSelectedRevision = this.currentSelectedRevision;\n };\n return TrackChangesPane;\n}());\nexport { TrackChangesPane };\nvar ChangesSingleView = /** @class */ (function () {\n function ChangesSingleView(owner, trackChangesPane) {\n this.owner = owner;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.trackChangesPane = trackChangesPane;\n }\n ChangesSingleView.prototype.createSingleChangesDiv = function (revision) {\n this.revision = revision;\n this.user = revision.author;\n this.outerSingleDiv = createElement('div', { className: 'e-de-tc-outer' });\n this.singleInnerDiv = createElement('div', { className: 'e-de-trckchanges-inner' });\n this.singleInnerDiv.addEventListener('click', this.selectRevision.bind(this));\n this.outerSingleDiv.appendChild(this.singleInnerDiv);\n var userNameTotalDiv = createElement('div', { className: 'e-de-track-usernme-div' });\n var userNameLabel = createElement('div', { innerHTML: revision.author, className: 'e-de-track-user-nme' });\n if (!isNullOrUndefined(revision.author)) {\n userNameTotalDiv.style.display = 'flex';\n this.owner.documentHelper.getAvatar(userNameTotalDiv, userNameLabel, undefined, revision);\n }\n var revisionTypeLabel = createElement('div');\n if (revision.revisionType === 'Insertion') {\n this.revisionType = 'Inserted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Inserted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n }\n else if (revision.revisionType === 'Deletion') {\n this.revisionType = 'Deleted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Deleted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n }\n else if (revision.revisionType === 'MoveFrom') {\n this.revisionType = 'MoveFrom';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move From').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n else if (revision.revisionType === 'MoveTo') {\n this.revisionType = 'MoveTo';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move To').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n userNameTotalDiv.appendChild(revisionTypeLabel);\n this.singleInnerDiv.appendChild(userNameTotalDiv);\n var dateView = createElement('div', {\n className: 'e-de-track-date',\n innerHTML: HelperMethods.getModifiedDate(revision.date)\n });\n this.singleInnerDiv.appendChild(dateView);\n var changesTextDiv = createElement('div', {\n className: 'e-de-track-chngs-text'\n });\n this.layoutElementText(revision.range, changesTextDiv);\n this.singleInnerDiv.appendChild(changesTextDiv);\n var buttonTotalDiv = createElement('div', {\n styles: 'display:inline-block;width:100%'\n });\n this.singleInnerDiv.appendChild(buttonTotalDiv);\n var buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.acceptButtonElement = createElement('button', { className: 'e-de-track-accept-button' });\n var acceptButton = new Button({ cssClass: 'e-outline e-success', content: this.locale.getConstant('Accept') });\n buttonDiv.appendChild(this.acceptButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n acceptButton.appendTo(this.acceptButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.acceptButtonElement.classList.add('e-de-overlay');\n }\n this.acceptButtonElement.addEventListener('click', this.acceptButtonClick.bind(this));\n buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.rejectButtonElement = createElement('button', { className: 'e-de-track-reject-button' });\n var rejectButton = new Button({ cssClass: 'e-outline e-danger', content: this.locale.getConstant('Reject') });\n buttonDiv.appendChild(this.rejectButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n rejectButton.appendTo(this.rejectButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.rejectButtonElement.classList.add('e-de-overlay');\n }\n this.rejectButtonElement.addEventListener('click', this.rejectButtonClick.bind(this));\n var changesCount = createElement('div', { className: 'e-de-track-chngs-count', styles: 'float:right;' });\n var currentCount = this.owner.revisions.changes.indexOf(revision) + 1;\n var totalCount = this.owner.revisions.changes.length;\n changesCount.innerHTML = this.locale.getConstant('Changes') + ' ' + currentCount.toString() +\n ' ' + this.locale.getConstant('of') + ' ' + totalCount.toString();\n buttonTotalDiv.appendChild(changesCount);\n return this.outerSingleDiv;\n };\n /**\n * @private\n */\n ChangesSingleView.prototype.appendRowToTable = function (rowFormat, insertIndex) {\n this.tableElement.insertRow();\n for (var k = 0; k < rowFormat.ownerBase.childWidgets.length; k++) {\n this.tableElement.rows[insertIndex].insertCell();\n this.tableElement.rows[insertIndex].cells[k].classList.add('e-de-tc-tble-cell');\n }\n };\n ChangesSingleView.prototype.selectRevision = function () {\n var ranges = this.revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.trackChangesPane.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(this.revision));\n this.owner.selection.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selection.selectRevision(this.revision);\n this.trackChangesPane.onSelection(this.revision);\n }\n };\n ChangesSingleView.prototype.layoutElementText = function (range, changesText) {\n changesText.style.width = '100%';\n var text = '';\n var toSkip = false;\n for (var i = 0; i < range.length; i++) {\n var element = range[i];\n if (element instanceof FieldElementBox && element.fieldType === 1) {\n toSkip = false;\n continue;\n }\n if (toSkip) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n toSkip = true;\n }\n if (element instanceof TextElementBox) {\n text += element.text;\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldCode = this.owner.selection.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n text += '';\n changesText.appendChild(this.addSpan(text));\n return;\n }\n else if (fieldCode.match('HYPERLINK ') || fieldCode.match('MERGEFIELD') || fieldCode.match('FORMTEXT') || fieldCode.match('PAGE ')) {\n text += this.owner.editor.retrieveFieldResultantText(element.fieldEnd);\n }\n else if (element.formFieldData) {\n var emptyChar = this.owner.documentHelper.textHelper.repeatChar(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n if (element.formFieldData instanceof TextFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.defaultValue === '' ? emptyChar : element.formFieldData.defaultValue, 'e-de-tc-field'));\n }\n else if (element.formFieldData instanceof DropDownFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.dropdownItems.length > 0 ? element.formFieldData.dropdownItems[0] : emptyChar, 'e-de-tc-field'));\n }\n else {\n changesText.appendChild(this.addSpan(element.formFieldData.checked ? String.fromCharCode(9745) : String.fromCharCode(9744), 'e-de-tc-field'));\n }\n }\n }\n else if (element instanceof ImageElementBox) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var imageEle = createElement('img');\n imageEle.setAttribute('src', element.imageString);\n imageEle.classList.add('e-de-tc-shrink-img');\n changesText.appendChild(imageEle);\n }\n else if (element instanceof WRowFormat) {\n this.tableElement = createElement('table');\n this.tableElement.classList.add('e-de-track-chng-table');\n this.tableElement.insertRow();\n for (var i_1 = 0; i_1 < element.ownerBase.childWidgets.length; i_1++) {\n this.tableElement.rows[0].insertCell();\n this.tableElement.rows[0].cells[i_1].classList.add('e-de-tc-tble-cell');\n }\n changesText.appendChild(this.tableElement);\n return;\n }\n else if (element instanceof WCharacterFormat) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var paraMark = '¶';\n if (element.ownerBase instanceof ParagraphWidget && element.ownerBase.isEndsWithPageBreak) {\n paraMark = '............Page Break............' + paraMark;\n }\n changesText.appendChild(this.addSpan(paraMark, 'e-de-tc-pmark'));\n changesText.appendChild(createElement('br'));\n }\n }\n changesText.appendChild(this.addSpan(text));\n };\n ChangesSingleView.prototype.addSpan = function (text, cssClass) {\n var span = createElement('span');\n span.textContent = text;\n if (cssClass) {\n span.classList.add(cssClass);\n }\n return span;\n };\n ChangesSingleView.prototype.acceptButtonClick = function () {\n this.trackChangesPane.changesInfoDiv.removeChild(this.outerSingleDiv);\n this.removeFromParentCollec();\n this.revision.accept();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.rejectButtonClick = function () {\n this.trackChangesPane.changesInfoDiv.removeChild(this.outerSingleDiv);\n this.removeFromParentCollec();\n this.revision.reject();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.removeFromParentCollec = function () {\n this.trackChangesPane.changes.remove(this.revision);\n this.trackChangesPane.revisions.splice(this.trackChangesPane.revisions.indexOf(this.revision), 1);\n if (this.trackChangesPane.changes.length === 0) {\n this.trackChangesPane.setNoChangesVisibility = true;\n }\n this.trackChangesPane.updateUsers();\n };\n return ChangesSingleView;\n}());\nexport { ChangesSingleView };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/* eslint-disable */\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WParagraphFormat, WStyles } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Page, Rect, Widget, ListTextElementBox, ParagraphWidget, HeaderFooterWidget, Padding, DropDownFormField, TextFormField, CheckBoxFormField, ShapeElementBox, TextFrame, Footnote, FootnoteElementBox, FootNoteWidget, TextElementBox, ShapeBase, ImageElementBox } from './page';\nimport { LineWidget, TableWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentReviewPane } from '../index';\nimport { Zoom } from './zooming';\nimport { Dialog, createSpinner } from '@syncfusion/ej2-popups';\nimport { beforePaneSwitchEvent, keyDownEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent } from '../../base/index';\nimport { RestrictEditing } from '../restrict-editing/restrict-editing-pane';\nimport { FormFieldPopUp } from '../dialogs/form-field-popup';\nimport { TrackChangesPane } from '../track-changes/track-changes-pane';\n/**\n * @private\n */\nvar DocumentHelper = /** @class */ (function () {\n //#endregion\n function DocumentHelper(owner) {\n var _this = this;\n /**\n * @private\n */\n this.scrollbarWidth = 0;\n /**\n * @private\n */\n this.isWebPrinting = false;\n /**\n * @private\n */\n this.isHeaderFooter = false;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.showRevision = false;\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n /**\n * @private\n */\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n // Event\n /**\n * @private\n */\n this.isMouseDown = false;\n this.isMouseEntered = false;\n this.scrollMoveTimer = 0;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.isTouchMoved = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isComposingIME = false;\n /**\n * @private\n */\n this.lastComposedText = '';\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.dontUseHtmlParagraphAutoSpacing = false;\n /**\n * @private\n */\n this.alignTablesRowByRow = false;\n /**\n * @private\n */\n this.compatibilityMode = 'Word2013';\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.comments = [];\n /**\n * @private\n */\n this.authors = new Dictionary();\n /**\n * @private\n */\n this.revisionsInternal = new Dictionary();\n /**\n * @private\n */\n this.commentUserOptionId = 1;\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n /**\n * @private\n */\n this.formFields = [];\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * If movecaretposition is 1, Home key is pressed\n * If moveCaretPosition is 2, End key is pressed\n *\n * @private\n */\n this.moveCaretPosition = 0;\n /**\n * @private\n */\n this.isTextInput = false;\n /**\n * @private\n */\n this.isScrollHandler = false;\n /**\n * @private\n */\n this.triggerElementsOnLoading = false;\n /**\n * @private\n */\n this.triggerSpellCheck = false;\n //Document Protection Properties Starts\n /**\n * preserve the format\n *\n * @private\n */\n this.restrictFormatting = false;\n /**\n * preserve the document protection type either readonly or no protection\n *\n * @private\n */\n this.protectionType = 'NoProtection';\n /**\n * Preserve the password protection is enforced or not\n *\n * @private\n */\n this.isDocumentProtected = false;\n /**\n * preserve the hash value of password\n *\n * @private\n */\n this.hashValue = '';\n /**\n * @private\n */\n this.saltValue = '';\n /**\n * @private\n */\n this.userCollection = [];\n /**\n * @private\n */\n this.cachedPages = [];\n /**\n * @private\n */\n this.skipScrollToPosition = false;\n /**\n * @private\n */\n this.isIosDevice = false;\n /**\n * @private\n */\n this.isMobileDevice = false;\n /**\n * @private\n */\n this.isFormFilling = false;\n /**\n * @private\n */\n this.footnotes = new Footnote();\n /**\n * @private\n */\n this.endnotes = new Footnote();\n /**\n * @private\n */\n this.isFootnoteWidget = false;\n /**\n * @private\n * @param {TextEvent} event - Specifies text event.\n * @returns {void}\n */\n this.onTextInput = function (event) {\n if (!_this.isComposingIME) {\n event.preventDefault();\n var text = event.data;\n _this.owner.editor.handleTextInput(text);\n }\n };\n //#region Composition Event\n /**\n * Fires when composition starts.\n *\n * @private\n * @returns {void}\n */\n this.compositionStart = function () {\n if (!Browser.isDevice && !_this.owner.isReadOnlyMode) {\n _this.isComposingIME = true;\n _this.positionEditableTarget();\n if (_this.owner.editorHistory) {\n _this.owner.editor.initComplexHistory('IMEInput');\n }\n }\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n *\n * @private\n * @returns {void}\n */\n this.compositionUpdated = function () {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n setTimeout(function () {\n _this.owner.editor.insertIMEText(_this.getEditableDivTextContent(), true);\n }, 0);\n }\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n *\n * @private\n * @param {CompositionEvent} event - Specifies text compisition event.\n * @returns {void}\n */\n this.compositionEnd = function (event) {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n var text = _this.getEditableDivTextContent();\n if (text !== '') {\n _this.owner.editor.insertIMEText(text, false);\n }\n _this.isComposingIME = false;\n _this.lastComposedText = '';\n _this.iframe.setAttribute('style', 'pointer-events:none;position:absolute;left:' + _this.owner.viewer.containerLeft + 'px;top:' + _this.owner.viewer.containerTop + 'px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden');\n _this.editableDiv.innerHTML = '';\n if (_this.owner.editorHistory) {\n _this.owner.editorHistory.updateComplexHistory();\n if (text === '') {\n //When the composition in live. The Undo operation will terminate the composition and empty text will be return from text box.\n //At that time the the history should be updated. Undo the operation and clear the redo stack. This undo operation will not be saved for redo operation.\n _this.owner.editorHistory.undo();\n _this.owner.editorHistory.redoStack.pop();\n }\n }\n }\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onKeyPressInternal = function (event) {\n var key = event.which || event.keyCode;\n _this.triggerElementsOnLoading = false;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection\n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (Browser.isIE && alt && ctrl) {\n ctrl = false;\n }\n // tslint:disable-next-line:max-line-length\n if (ctrl && event.key === 'v' || ctrl && event.key === 'a' || (ctrl || (_this.isControlPressed && Browser.isIE)) && event.key === 'p') {\n if (Browser.isIE) {\n _this.isControlPressed = false;\n }\n return;\n }\n if (!_this.owner.isReadOnlyMode || (_this.selection && _this.selection.isInlineFormFillMode())) {\n var key_1 = event.keyCode || event.charCode;\n var char = '';\n if (key_1) {\n char = String.fromCharCode(key_1);\n }\n else if (event.key) {\n char = event.key;\n }\n if (char !== ' ' && char !== '\\r' && char !== '\\b' && char !== String.fromCharCode(27) && !ctrl) {\n _this.owner.editorModule.handleTextInput(char);\n }\n else if (char === ' ') {\n _this.triggerSpellCheck = true;\n _this.owner.editorModule.handleTextInput(' ');\n _this.triggerSpellCheck = false;\n }\n event.preventDefault();\n }\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal();\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @private\n * @param {ClipboardEvent} event - Specifies clipboard event.\n * @returns {void}\n */\n this.onPaste = function (event) {\n if ((!_this.owner.isReadOnlyMode && _this.owner.editor.canEditContentControl) || _this.selection.isInlineFormFillMode()) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n *\n * @private\n * @returns {void}\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n *\n * @private\n * @returns {void}\n */\n this.updateFocus = function () {\n if (_this.selection && !(_this.isMobileDevice && _this.owner.isReadOnly)) {\n if (!Browser.isDevice && !Browser.isIE && !navigator.userAgent.match('Edge')\n && !isNullOrUndefined(_this.iframe)) {\n _this.iframe.focus();\n }\n if (!isNullOrUndefined(_this.editableDiv)) {\n _this.editableDiv.focus();\n }\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n *\n * @returns {void}\n */\n this.scrollHandler = function () {\n if (_this.scrollTimer) {\n clearTimeout(_this.scrollTimer);\n }\n _this.clearContent();\n _this.isScrollHandler = true;\n if (!Browser.isDevice && !_this.isComposingIME) {\n _this.iframe.style.top = _this.owner.viewer.containerTop + 'px';\n _this.iframe.style.left = _this.owner.viewer.containerLeft + 'px';\n }\n _this.owner.viewer.updateScrollBars();\n var vtHeight = _this.owner.viewer.containerTop + _this.visibleBounds.height - (_this.owner.viewer.padding.top + _this.owner.viewer.padding.bottom);\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.owner.viewer.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n if (_this.owner.viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n _this.isScrollHandler = false;\n _this.scrollTimer = setTimeout(function () {\n if (!_this.isScrollHandler && !isNullOrUndefined(_this.owner) && _this.owner.isSpellCheck) {\n _this.isScrollToSpellCheck = true;\n _this.owner.viewer.updateScrollBars();\n }\n }, 200);\n };\n /**\n * Fires when the window gets resized.\n *\n * @private\n * @returns {void}\n */\n this.onWindowResize = function () {\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n _this.resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.element)) {\n _this.updateViewerSize();\n _this.clearContent();\n _this.owner.viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n _this.updateTouchMarkPosition();\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n }\n }, 200);\n };\n /**\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n if (_this.isMouseDown) {\n _this.isMouseDown = false;\n }\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n * Called on mouse down.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onMouseDownInternal = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(target) && target !== _this.viewerContainer) || _this.isTouchInput ||\n event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n _this.isFootnoteWidget = false;\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n if (_this.formFillPopup) {\n _this.formFillPopup.hidePopup();\n }\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n if (_this.selection.isInShape) {\n var textFram = _this.owner.selection.getCurrentTextFrame();\n var shape = textFram.containerShape;\n _this.selection.selectShape(shape);\n }\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n if (event.which === 3 && !_this.owner.selection.isEmpty\n && _this.selection.checkCursorIsInSelection(_this.getLineWidget(touchPoint), touchPoint)) {\n event.preventDefault();\n return;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* eslint-disable @typescript-eslint/indent */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount > 1) {\n _this.tapCount = 1;\n }\n }, 100);\n }\n };\n /**\n * Called on mouse move.\n *\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onMouseMoveInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n var table = _this.owner.editorModule.tableResize.currentResizingTable;\n var startPosition = _this.selection.setPositionForBlock(table, true);\n var endPosition = _this.selection.setPositionForBlock(table, false);\n if (!(_this.owner.documentHelper.isDocumentProtected) || _this.selection.checkSelectionIsAtEditRegion(startPosition, endPosition)) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n }\n else {\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event)) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selection.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible\n || _this.owner.imageResizerModule.isShapeResize) {\n _this.owner.selection.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * @private\n * @param {MouseEvent} event - Specifies mouse event\n * @returns {void}\n */\n this.onMouseLeaveInternal = function (event) {\n event.preventDefault();\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.isMouseDown) {\n var viewerTop = _this.viewerContainer.scrollTop;\n if (event.offsetY + viewerTop > viewerTop) {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollForwardOnSelection(cursorPoint);\n }, 100);\n }\n else {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollBackwardOnSelection(cursorPoint);\n }, 100);\n }\n if (_this.isMouseEntered) {\n _this.isMouseEntered = false;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onMouseEnterInternal = function (event) {\n if (!_this.isMouseEntered) {\n _this.owner.viewer.updateScrollBars();\n }\n _this.isMouseEntered = true;\n if (_this.scrollMoveTimer) {\n clearInterval(_this.scrollMoveTimer);\n }\n if (!_this.isLeftButtonPressed(event)) {\n _this.onMouseUpInternal(event);\n }\n };\n /**\n * Fired on double tap.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onDoubleTap = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.owner.viewer.findFocusedPage(cursorPoint, true))) {\n return;\n }\n var widget = _this.getLineWidget(touchPoint);\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField();\n }\n if (!_this.isDocumentProtected && _this.owner.enableFormField) {\n var formatType = _this.selection.getFormFieldType(formField);\n if (formatType) {\n if (formatType.toString() !== '') {\n _this.selection.selectField(formField);\n }\n switch (formatType) {\n case 'Text':\n _this.owner.textFormFieldDialogModule.show();\n break;\n case 'CheckBox':\n _this.owner.checkBoxFormFieldDialogModule.show();\n break;\n case 'DropDown':\n _this.owner.dropDownFormFieldDialogModule.show();\n break;\n }\n }\n }\n else if (_this.isDocumentProtected && formField && formField.formFieldData instanceof TextFormField\n && formField.formFieldData.type === 'Text') {\n _this.selection.selectField();\n }\n var startPosition = _this.selection.start.clone();\n var endPosition = _this.selection.end.clone();\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, 0);\n var inline = inlineObj.element;\n if (_this.owner.layoutType === 'Pages') {\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n var footnotes = _this.currentPage.footnoteWidget;\n var i = void 0;\n for (i = 0; i <= footnotes.bodyWidgets.length; i++) {\n var footnoteText = (footnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === footnoteText.text) {\n break;\n }\n }\n startPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n else {\n var endnotes = _this.pages[_this.pages.length - 1].endnoteWidget;\n var i = void 0;\n if (!isNullOrUndefined(endnotes)) {\n for (i = 0; i <= endnotes.childWidgets.length; i++) {\n var endnoteText = (endnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === endnoteText.text) {\n break;\n }\n }\n }\n startPosition.setPositionParagraph(endnotes.childWidgets[i].childWidgets[0], 0);\n endPosition.setPositionParagraph(endnotes.childWidgets[i].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n }\n else {\n if (inline instanceof TextElementBox && (_this.selection.isinEndnote || _this.selection.isinFootnote)) {\n _this.selection.footnoteReferenceElement(startPosition, endPosition, inline);\n }\n }\n }\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n _this.owner.selection.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @return {void}\n */\n /* eslint-disable */\n this.onMouseUpInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n if (!isNullOrUndefined(_this.currentSelectedComment) && _this.owner.commentReviewPane\n && !_this.owner.commentReviewPane.commentPane.isEditMode) {\n _this.currentSelectedComment = undefined;\n }\n }\n var isCtrlkeyPressed = _this.isIosDevice ? event.metaKey : event.ctrlKey;\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (_this.owner.selection.isEmpty || _this.owner.selection.isImageSelected) &&\n (((isCtrlkeyPressed && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (_this.isMouseDown && _this.isLeftButtonPressed(event) && _this.isDocumentProtected\n && _this.protectionType === 'FormFieldsOnly' && _this.selection) {\n var widget = _this.getLineWidget(touchPoint);\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField(true);\n }\n if (formField && formField.formFieldData && formField.formFieldData.enabled && !_this.selection.isInlineFormFillMode(formField)) {\n var data = { 'fieldName': formField.formFieldData.name };\n if (formField.formFieldData instanceof TextFormField) {\n data.value = formField.resultText;\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n data.value = formField.formFieldData.checked;\n }\n else {\n data.value = formField.formFieldData.selectedIndex;\n }\n _this.owner.trigger(beforeFormFieldFillEvent, data);\n if (_this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Popup' && !(formField.formFieldData instanceof CheckBoxFormField)\n || (formField.formFieldData instanceof TextFormField && !(formField.formFieldData.type === 'Text'))\n || formField.formFieldData instanceof DropDownFormField) {\n _this.formFillPopup.showPopUp(formField);\n }\n else {\n _this.owner.editor.toggleCheckBoxFormField(formField);\n data.value = formField.formFieldData.checked;\n data.isCanceled = false;\n _this.owner.trigger(afterFormFieldFillEvent, data);\n }\n }\n if (!formField && _this.isFormFillProtectedMode) {\n _this.selection.navigateToNextFormField();\n }\n }\n else if (_this.isMouseDown) {\n if (_this.formFields.length > 0) {\n var formField = _this.selection.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof TextFormField) {\n _this.selection.selectField();\n }\n else if (_this.isLeftButtonPressed(event) && formField && formField.formFieldData instanceof DropDownFormField) {\n var offset = formField.line.getOffset(formField, 0);\n var point = _this.selection.getPhysicalPositionInternal(formField.line, offset, false);\n _this.selection.selectInternal(formField.line, formField, 0, point);\n }\n }\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n _this.isMouseDown = false;\n _this.isFootnoteWidget = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n _this.updateFocus();\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n };\n /**\n * Fired on touch start.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isTouchMoved = false;\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.owner.viewer.findFocusedPage(point, true, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n var x = _this.owner.selection.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selection.end, _this.owner.selection.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selection.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selection.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selection.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.longTouchTimer = setTimeout(_this.onLongTouch, 500, event);\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n }\n };\n /**\n * Fired on long touch\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onLongTouch = function (event) {\n if (isNullOrUndefined(_this.owner) || isNullOrUndefined(_this.viewerContainer) || _this.isTouchMoved || event.touches.length !== 1) {\n return;\n }\n var point = _this.getTouchOffsetValue(event);\n var pointRelToPage = _this.owner.viewer.findFocusedPage(point, true);\n var selStart = _this.selection.start;\n var selEnd = _this.selection.end;\n var updateSel = false;\n if (!_this.selection.isForward) {\n selStart = _this.selection.end;\n selEnd = _this.selection.start;\n }\n var selStartPt = selStart.location;\n var selEndPt = selEnd.location;\n if (selStart.currentWidget !== selEnd.currentWidget) {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n && !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n else {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n || !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n if (event.changedTouches.length === 1 && updateSel) {\n _this.updateSelectionOnTouch(point, pointRelToPage);\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.selection.isEmpty) {\n _this.selection.selectCurrentWord();\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchMoveInternal = function (event) {\n _this.isTouchMoved = true;\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selection.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selection.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n _this.updateTouchMarkPosition();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n };\n /**\n * Fired on touch up.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n if (!_this.isTouchMoved || (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing)) {\n _this.updateSelectionOnTouch(point, touchPoint);\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n };\n /**\n * Fired on keyup event.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice && event.target === _this.editableDiv) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyDownInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.editableDiv) {\n return;\n }\n var isHandled = false;\n var keyEventArgs = { 'event': event, 'isHandled': false, source: _this.owner };\n _this.owner.trigger(keyDownEvent, keyEventArgs);\n if (keyEventArgs.isHandled) {\n return;\n }\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (isHandled) {\n event.preventDefault();\n }\n };\n this.owner = owner;\n this.pages = [];\n this.lists = [];\n this.abstractLists = [];\n this.render = new Renderer(this);\n this.characterFormat = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.renderedLevelOverrides = [];\n this.headersFooters = [];\n this.styles = new WStyles();\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n this.editRanges = new Dictionary();\n this.isIosDevice = /Mac|iPad|iPod/i.test(navigator.userAgent);\n this.isMobileDevice = /Android|Windows Phone|webOS/i.test(navigator.userAgent);\n this.formFillPopup = new FormFieldPopUp(this.owner);\n this.customXmlData = new Dictionary();\n this.contentControlCollection = [];\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n }\n Object.defineProperty(DocumentHelper.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n *\n * @private\n * @returns {Rect} - Returns visible bounds.\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerCanvas\", {\n //Document Protection Properties Ends\n //#region Properties\n /**\n * Gets container canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns page canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns selection canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerContext\", {\n /**\n * Gets container context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns page canvas context.\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns selection canvas context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n *\n * @returns {Page} - Returns current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n *\n * @private\n * @returns {number} - Returns zoom factor value.\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor();\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selection\", {\n /**\n * Gets the selection.\n *\n * @private\n * @returns {Selection} - Returns selection module.\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n *\n * @private\n * @returns {Page} - Return selection start page.\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n *\n * @private\n * @returns {Page} - Return selection end page.\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog(this.owner.enableRtl);\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2(this.owner.enableRtl);\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog3\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal3) {\n this.initDialog3(this.owner.enableRtl);\n }\n return this.dialogInternal3;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedComment\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedCommentInternal;\n },\n set: function (value) {\n if (this.owner && this.owner.commentReviewPane) {\n this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n }\n this.currentSelectedCommentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedRevision\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n // if (this.owner && this.owner.commentReviewPane) {\n // this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n // }\n this.currentSelectedRevisionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isInlineFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isFormFillProtectedMode && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'FormFieldsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isCommentOnlyMode\", {\n /**\n * @private\n * @returns {Boolean}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'CommentsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isTrackedOnlyMode\", {\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'RevisionsOnly';\n },\n enumerable: true,\n configurable: true\n });\n DocumentHelper.prototype.initalizeStyles = function () {\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n this.preDefinedStyles.add('Toc1', '{\"type\":\"Paragraph\",\"name\":\"Toc1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc2', '{\"type\":\"Paragraph\",\"name\":\"Toc2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc3', '{\"type\":\"Paragraph\",\"name\":\"Toc3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc4', '{\"type\":\"Paragraph\",\"name\":\"Toc4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc5', '{\"type\":\"Paragraph\",\"name\":\"Toc5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc6', '{\"type\":\"Paragraph\",\"name\":\"Toc6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc7', '{\"type\":\"Paragraph\",\"name\":\"Toc7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc8', '{\"type\":\"Paragraph\",\"name\":\"Toc8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc9', '{\"type\":\"Paragraph\",\"name\":\"Toc9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearDocumentItems = function () {\n this.editRanges.clear();\n this.headersFooters = [];\n this.fields = [];\n this.formFields = [];\n this.currentSelectedComment = undefined;\n this.currentSelectedRevision = undefined;\n for (var i = 0; i < this.comments.length; i++) {\n var commentStart = this.comments[i].commentStart;\n if (commentStart) {\n commentStart.destroy();\n }\n }\n this.comments = [];\n this.bookmarks.clear();\n this.styles.clear();\n this.authors.clear();\n this.revisionsInternal.clear();\n this.owner.revisions.destroy();\n this.characterFormat.clearFormat();\n this.paragraphFormat.clearFormat();\n if (this.owner.trackChangesPane) {\n this.owner.trackChangesPane.clear();\n }\n this.setDefaultCharacterValue(this.characterFormat);\n this.setDefaultParagraphValue(this.paragraphFormat);\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.clear();\n }\n this.isHeaderFooter = false;\n this.defaultTabWidth = 36;\n this.isDocumentProtected = false;\n this.protectionType = 'NoProtection';\n this.restrictFormatting = false;\n this.hashValue = '';\n this.saltValue = '';\n this.userCollection = [];\n if (this.formFillPopup) {\n this.formFillPopup.hidePopup();\n }\n this.customXmlData.clear();\n this.contentControlCollection = [];\n this.endnotes.clear();\n this.footnotes.clear();\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n this.abstractLists = [];\n this.lists = [];\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.setDefaultDocumentFormat = function () {\n this.owner.parser.parseCharacterFormat(this.owner.characterFormat, this.characterFormat);\n this.owner.parser.parseParagraphFormat(this.owner.paragraphFormat, this.paragraphFormat);\n };\n DocumentHelper.prototype.setDefaultCharacterValue = function (characterFormat) {\n characterFormat.bold = false;\n characterFormat.italic = false;\n characterFormat.fontFamily = 'Calibri';\n characterFormat.fontSize = 11;\n characterFormat.underline = 'None';\n characterFormat.strikethrough = 'None';\n characterFormat.fontSizeBidi = 11;\n characterFormat.fontFamilyBidi = 'Calibri';\n characterFormat.baselineAlignment = 'Normal';\n characterFormat.highlightColor = 'NoColor';\n characterFormat.fontColor = '#00000000';\n characterFormat.allCaps = false;\n };\n DocumentHelper.prototype.setDefaultParagraphValue = function (paragraphFormat) {\n paragraphFormat.leftIndent = 0;\n paragraphFormat.rightIndent = 0;\n paragraphFormat.firstLineIndent = 0;\n paragraphFormat.textAlignment = 'Left';\n paragraphFormat.beforeSpacing = 0;\n paragraphFormat.afterSpacing = 0;\n paragraphFormat.lineSpacing = 1;\n paragraphFormat.lineSpacingType = 'Multiple';\n paragraphFormat.bidi = false;\n paragraphFormat.keepWithNext = false;\n paragraphFormat.keepLinesTogether = false;\n paragraphFormat.widowControl = true;\n };\n /**\n * @private\n * @param {number} id - Specfies abstract list id.\n * @returns {WAbstractList} - Returns abstract list.\n */\n DocumentHelper.prototype.getAbstractListById = function (id) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (abstractList instanceof WAbstractList && abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {number} id - Specfies list id.\n * @returns {WAbstractList} - Returns list.\n */\n DocumentHelper.prototype.getListById = function (id) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n if (!isNullOrUndefined(this.lists[i]) && this.lists[i].listId === id) {\n return this.lists[i];\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {WListLevel} listLevel - Specfies list level.\n * @returns {number} - Returns list level number.\n */\n DocumentHelper.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * Gets the bookmarks.\n *\n * @private\n * @param {boolean} includeHidden - Include hidden bookmark.\n * @returns {string[]} - Returns bookmars present in current document.\n */\n DocumentHelper.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n DocumentHelper.prototype.selectComment = function (comment) {\n var _this = this;\n if (this.owner.selection && this.owner.commentReviewPane) {\n this.owner.showComments = true;\n setTimeout(function () {\n if (_this.owner && _this.owner.selection) {\n _this.owner.selection.selectComment(comment);\n }\n });\n }\n };\n DocumentHelper.prototype.showComments = function (show) {\n if (this.owner && show && this.owner.enableComment) {\n var eventArgs = { type: 'Comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.reviewTab.hideTab(1, false);\n this.owner.commentReviewPane.showHidePane(show && this.owner.enableComment, 'Comments');\n };\n DocumentHelper.prototype.showRevisions = function (show) {\n var isCommentTabVisible = false;\n this.showRevision = show;\n if (this.owner && show) {\n var eventArgs = { type: 'comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n if (!show && this.owner.showComments) {\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.showHidePane(true, 'Comments');\n }\n else {\n this.owner.commentReviewPane.showHidePane(show, 'Changes');\n if (!this.owner.enableComment) {\n isCommentTabVisible = true;\n }\n // this.owner.commentReviewPane.reviewTab.hideTab(0, isCommentTabVisible);\n this.showRevision = false;\n }\n if (show) {\n this.owner.trackChangesPane.enableDisableButton(!this.owner.isReadOnly && !this.isDocumentProtected);\n }\n };\n /**\n * Initializes components.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.initializeComponents = function () {\n var element = this.owner.element;\n if (isNullOrUndefined(element)) {\n return;\n }\n //let viewer: LayoutViewer = this;\n this.optionsPaneContainer = createElement('div', {\n className: 'e-documenteditor-optionspane'\n });\n this.optionsPaneContainer.contentEditable = 'false';\n element.appendChild(this.optionsPaneContainer);\n var isRtl = this.owner.enableRtl;\n var viewerContainerStyle;\n if (isRtl) {\n viewerContainerStyle = 'direction:ltr;';\n }\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto;' + viewerContainerStyle;\n this.optionsPaneContainer.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = 0;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n if (Browser.isDevice) {\n this.createEditableDiv(element);\n }\n else {\n this.createEditableIFrame();\n }\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n this.initTouchEllipse();\n this.wireEvent();\n this.restrictEditingPane = new RestrictEditing(this);\n this.owner.commentReviewPane = new CommentReviewPane(this.owner);\n this.owner.trackChangesPane = new TrackChangesPane(this.owner, this.owner.commentReviewPane);\n createSpinner({ target: this.owner.element, cssClass: 'e-spin-overlay' });\n };\n DocumentHelper.prototype.measureScrollbarWidth = function (element) {\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'visibility:hidden;overflow:scroll');\n element.appendChild(parentDiv);\n var childDiv = document.createElement('div');\n parentDiv.appendChild(childDiv);\n this.scrollbarWidth = (parentDiv.getBoundingClientRect().width - childDiv.getBoundingClientRect().width);\n parentDiv.parentNode.removeChild(parentDiv);\n };\n DocumentHelper.prototype.createEditableDiv = function (element) {\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n };\n DocumentHelper.prototype.createEditableIFrame = function () {\n this.iframe = createElement('iframe', {\n attrs: {\n 'scrolling': 'no',\n 'style': 'pointer-events:none;position:absolute;left:0px;top:0px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden'\n },\n className: 'e-de-text-target'\n });\n this.viewerContainer.appendChild(this.iframe);\n this.initIframeContent();\n };\n DocumentHelper.prototype.initIframeContent = function () {\n var style = 'background-color:transparent;width:100%;height:100%;padding: 0px; margin: 0px;';\n var innerHtml = ''\n + ''\n + ''\n + '
'\n + ''\n + '';\n if (!isNullOrUndefined(this.iframe.contentDocument)) {\n this.iframe.contentDocument.open();\n this.iframe.contentDocument.write(innerHtml);\n this.iframe.contentDocument.close();\n this.editableDiv = this.iframe.contentDocument.body.children[0];\n }\n };\n /**\n * Wires events and methods.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.selection)) {\n this.selection.initCaret();\n }\n this.wireInputEvents();\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.addEventListener('load', this.onIframeLoad.bind(this));\n }\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('keydown', this.onKeyDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('mouseleave', this.onMouseLeaveInternal);\n this.viewerContainer.addEventListener('mouseenter', this.onMouseEnterInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer.bind(this));\n window.addEventListener('touchend', this.onImageResizer.bind(this));\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal.bind(this));\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal.bind(this));\n };\n DocumentHelper.prototype.wireInputEvents = function () {\n if (isNullOrUndefined(this.editableDiv)) {\n return;\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n if (!Browser.isDevice) {\n this.editableDiv.addEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.addEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n };\n DocumentHelper.prototype.onIframeLoad = function () {\n if (!isNullOrUndefined(this.iframe) && this.iframe.contentDocument.body.children.length === 0) {\n this.initIframeContent();\n this.wireInputEvents();\n }\n };\n DocumentHelper.prototype.getEditableDivTextContent = function () {\n return this.editableDiv.textContent;\n };\n DocumentHelper.prototype.updateAuthorIdentity = function () {\n var revisions = this.owner.revisions.changes;\n for (var i = 0; i < revisions.length; i++) {\n this.getAuthorColor(revisions[i].author);\n }\n };\n DocumentHelper.prototype.getAvatar = function (userInfo, userName, comment, revision) {\n var author;\n var userinitial;\n if (!isNullOrUndefined(comment)) {\n author = comment.author;\n userinitial = comment.initial;\n }\n else {\n author = revision.author;\n }\n if (!isNullOrUndefined(author)) {\n var avatarDiv = createElement('div', { className: 'e-de-cmt-avatar' });\n var avatar = createElement('div', { className: 'e-de-ff-cmt-avatar' });\n avatar.style.backgroundColor = this.owner.documentHelper.getAuthorColor(author);\n if (userinitial === '' || isNullOrUndefined(userinitial)) {\n var authorName = author.split(' ');\n var initial = authorName[0].charAt(0);\n if (authorName.length > 1) {\n initial += authorName[authorName.length - 1][0];\n }\n avatar.innerText = initial.toUpperCase();\n }\n else {\n if (userinitial.length > 2) {\n avatar.innerText = userinitial.substring(0, 2);\n }\n else {\n avatar.innerText = userinitial;\n }\n }\n avatarDiv.appendChild(avatar);\n avatarDiv.appendChild(userName);\n userInfo.appendChild(avatarDiv);\n }\n };\n /**\n * @private\n * @param {string} author - Specifies author name.\n * @returns {string} - Return autor color.\n */\n DocumentHelper.prototype.getAuthorColor = function (author) {\n if (this.authors.containsKey(author)) {\n return this.authors.get(author);\n }\n var color;\n if (this.authors.length === 0) {\n color = '#b5082e'; //dark red\n }\n else {\n color = this.generateRandomColor();\n }\n this.authors.add(author, color);\n return color;\n };\n DocumentHelper.prototype.generateRandomColor = function () {\n var userColors = ['#b5082e',\n '#2e97d3',\n '#bb00ff',\n '#f37e43',\n '#03a60b',\n '#881824',\n '#e09a2b',\n '#50565e']; //dark grey\n return userColors[(this.authors.length % 8)];\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.positionEditableTarget = function () {\n var point = this.selection.getRect(this.selection.start);\n var page = this.selection.getSelectionPage(this.selection.start);\n // const caretInfo: CaretHeightInfo = this.selection.updateCaretSize(this.owner.selection.start);\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var left = page.boundingRectangle.x + (HelperMethods.convertPointToPixel(sectionFormat.leftMargin) * this.zoomFactor);\n var top = point.y;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n var iframeStyle = 'left:' + left + 'px;';\n iframeStyle += 'top:' + top + 'px;';\n iframeStyle += 'width:' + (HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor) + 'px;';\n iframeStyle += 'height:250px;outline-style:none;position:absolute';\n this.iframe.setAttribute('style', iframeStyle);\n var style = 'background-color:transparent;width:100%;height:250px;padding: 0px; margin: 0px;';\n style += 'text-indent:' + (point.x - left) + 'px;';\n style += 'color:transparent;pointer-events:none;outline-style:none;';\n style += 'font-size:' + (HelperMethods.convertPointToPixel(this.selection.characterFormat.fontSize) * this.zoomFactor) + 'px;';\n style += 'font-family' + this.selection.characterFormat.fontFamily + ';';\n style += 'overflow:hidden;text-decoration:none;white-space:normal;';\n this.editableDiv.setAttribute('style', style);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n DocumentHelper.prototype.onImageResizer = function (args) {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.imageResizerModule) &&\n this.owner.imageResizerModule.isImageResizerVisible && this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n this.onTouchUpInternal(args);\n }\n }\n if (this.scrollMoveTimer) {\n this.isMouseEntered = true;\n clearInterval(this.scrollMoveTimer);\n }\n };\n DocumentHelper.prototype.initDialog = function (isRtl) {\n if (!this.dialogInternal) {\n this.dialogTarget1 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget1.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget1);\n if (isRtl) {\n this.dialogTarget1.classList.add('e-de-rtl');\n }\n this.dialogInternal = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex + 20,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal.isStringTemplate = true;\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget1);\n }\n };\n DocumentHelper.prototype.initDialog3 = function (isRtl) {\n if (!this.dialogInternal3) {\n this.dialogTarget3 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget3.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget3);\n if (isRtl) {\n this.dialogTarget3.classList.add('e-de-rtl');\n }\n this.dialogInternal3 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal3.isStringTemplate = true;\n this.dialogInternal3.open = this.selection.hideCaret;\n this.dialogInternal3.beforeClose = this.updateFocus;\n this.dialogInternal3.appendTo(this.dialogTarget3);\n }\n };\n DocumentHelper.prototype.hideDialog = function () {\n this.dialog.hide();\n this.updateFocus();\n };\n DocumentHelper.prototype.initDialog2 = function (isRtl) {\n if (!this.dialogInternal2) {\n this.dialogTarget2 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget2.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget2);\n if (isRtl) {\n this.dialogTarget2.classList.add('e-de-rtl');\n }\n this.dialogInternal2 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: this.owner.zIndex + 10\n });\n this.dialogInternal2.isStringTemplate = true;\n this.dialogInternal2.appendTo(this.dialogTarget2);\n }\n };\n /**\n * Clears the context.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // Hide comment mark\n if (this.pageContainer) {\n var commentMarkElement = this.pageContainer.getElementsByClassName('e-de-cmt-mark');\n for (var i = 0; i < commentMarkElement.length; i++) {\n commentMarkElement[i].style.display = 'none';\n }\n }\n if (this.pageContainer) {\n var editRangeStart = this.pageContainer.getElementsByClassName('e-de-lock-mark');\n for (var i = 0; i < editRangeStart.length; i++) {\n editRangeStart[i].style.display = 'none';\n }\n }\n };\n /**\n * Fired when the document gets changed.\n *\n * @private\n * @param {BodyWidget[]} sections - Specified document content.\n * @returns {void}\n */\n DocumentHelper.prototype.onDocumentChanged = function (sections) {\n var _this = this;\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n this.layout.isDocumentContainsRtl = false;\n this.updateAuthorIdentity();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].bodyWidgets[0].destroy();\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.renderedLevelOverrides)) {\n this.renderedLevelOverrides = [];\n }\n if (!isNullOrUndefined(this.owner.editorHistory)) {\n this.owner.editorHistory.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.layout.isInitialLoad = true;\n this.layout.layoutItems(sections, false);\n if (this.owner.selection) {\n this.selection.previousSelectedFormField = undefined;\n if (this.formFields.length > 0) {\n this.owner.selection.highlightFormFields();\n }\n this.owner.selection.editRangeCollection = [];\n this.owner.selection.selectRange(this.owner.documentStart, this.owner.documentStart);\n if (this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(true);\n }\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.restrictEditingPane.restrictPane && !this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(false);\n }\n if (!isNullOrUndefined(this.owner.selection) && this.owner.selection.isViewPasteOptions) {\n this.owner.selection.isViewPasteOptions = false;\n this.owner.selection.showHidePasteOptions(undefined, undefined);\n }\n this.owner.fireDocumentChange();\n setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && _this.owner.showRevisions) {\n _this.showRevisions(true);\n }\n });\n };\n /**\n * Initialize touch ellipse.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;box-sizing: unset;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var pageTop = (page.boundingRectangle.y - (this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1));\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n DocumentHelper.prototype.scrollForwardOnSelection = function (cursorPoint) {\n if (this.viewerContainer) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop + 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selection.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.owner.selection.moveTextPosition(touchPoint, textPosition, true);\n }\n }\n };\n DocumentHelper.prototype.scrollBackwardOnSelection = function (cursorPoint) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop - 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selection.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.owner.selection.moveTextPosition(touchPoint, textPosition, true);\n }\n };\n DocumentHelper.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInShapeBorder = function (floatElement, cursorPoint) {\n if (!isNullOrUndefined(floatElement)) {\n var width = floatElement.width;\n var height = floatElement.height;\n if (this.isInsideRect(floatElement.x - floatElement.margin.left, floatElement.y - floatElement.margin.top, width, height, cursorPoint)) {\n // this.selectionLineWidget = this.getLineWidget(cursorPoint);\n if (floatElement instanceof ImageElementBox) {\n return true;\n }\n else if (floatElement instanceof ShapeElementBox) {\n var lineWidth = floatElement.lineFormat.weight;\n if (!(this.isInsideRect(floatElement.x + lineWidth, floatElement.y + lineWidth + floatElement.textFrame.marginTop, width - (lineWidth * 2), height - ((lineWidth * 2) + floatElement.textFrame.marginTop + floatElement.textFrame.marginBottom), cursorPoint))) {\n return true;\n }\n }\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n *\n * @private\n * @param {number} x - Specifies left position.\n * @param {number} y - Specifies top position.\n * @param {number} width - Specifies width.\n * @param {number} height - Specifies height\n * @param {Point} touchPoint - Specifies the point to check.\n * @returns {boolean} - Return true if points intersect.\n */\n DocumentHelper.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n DocumentHelper.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n *\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {boolean} - Returns true if left mouse button is clicked.\n */\n DocumentHelper.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n DocumentHelper.prototype.updateSelectionOnTouch = function (point, touchPoint) {\n this.zoomX = undefined;\n this.zoomY = undefined;\n if (this.isMouseDown && !this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (this.touchDownOnSelectionMark === 0) {\n this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), this.tapCount);\n if (this.tapCount === 2) {\n this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (this.owner.selection.isEmpty) {\n this.selection.updateCaretPosition();\n }\n this.selection.checkForCursorVisibility();\n if (!isNullOrUndefined(this.currentSelectedComment) && this.owner.commentReviewPane\n && !this.owner.commentReviewPane.commentPane.isEditMode) {\n this.currentSelectedComment = undefined;\n }\n }\n };\n /**\n * Gets touch offset value.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {Point} - Returns modified touch offset\n */\n DocumentHelper.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.pageX - offset.left;\n var offsetY = touchOffsetValues.pageY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {void}\n */\n DocumentHelper.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * @private\n */\n DocumentHelper.prototype.linkPageToHeaderFooter = function (currentPage) {\n if (currentPage.headerWidgetIn && currentPage.footerWidgetIn\n && isNullOrUndefined(currentPage.headerWidgetIn.parentHeaderFooter)\n && isNullOrUndefined(currentPage.footerWidgetIn.parentHeaderFooter)) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n if (page != currentPage) {\n if (page.headerWidgetIn.parentHeaderFooter === currentPage.headerWidgetIn) {\n page.headerWidgetIn = currentPage.headerWidget;\n page.headerWidgetIn.page = page;\n page.footerWidgetIn = currentPage.footerWidget;\n page.footerWidgetIn.page = page;\n break;\n }\n }\n }\n }\n };\n /**\n * Removes specified page.\n * @private\n * @param {Page} page - Specifies page to remove\n * @returns {void}\n */\n DocumentHelper.prototype.removePage = function (page, updateHeaderFooterPage) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n if (page.headerWidgetIn) {\n page.headerWidgetIn.page = undefined;\n }\n if (page.footerWidgetIn) {\n page.footerWidgetIn.page = undefined;\n }\n this.linkPageToHeaderFooter(page);\n var index = this.pages.indexOf(page);\n // if (index > -1) {\n this.pages.splice(index, 1);\n // } \n //this.removeRenderedPages();\n if (!isNullOrUndefined(this.owner.viewer.visiblePages)) {\n if ((this.owner.viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (this.owner.viewer.visiblePages).indexOf(page);\n (this.owner.viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n page.repeatHeaderRowTableWidget = false;\n }\n }\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var currentPage = start.paragraph.containerWidget.page;\n if (updateHeaderFooterPage) {\n this.owner.viewer.findFocusedPage(start.location, true, true, currentPage);\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateViewerSize = function () {\n var _this = this;\n var element = this.owner.getDocumentEditorElement();\n this.updateViewerSizeInternal(element);\n this.owner.viewer.updateScrollBars();\n if (this.owner.viewer instanceof WebLayoutViewer && (!isNullOrUndefined(this.owner)) && (!isNullOrUndefined(element))) {\n if (this.resizerTimer) {\n clearTimeout(this.resizerTimer);\n }\n /* eslint-disable @typescript-eslint/indent */\n this.resizerTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner)) {\n var currentVisibleWidth = void 0;\n if (!isNullOrUndefined(_this.visibleBounds)) {\n currentVisibleWidth = _this.visibleBounds.width;\n }\n else {\n currentVisibleWidth = 0;\n }\n if (isNullOrUndefined(_this.owner.viewer.preVisibleWidth)) {\n _this.owner.viewer.preVisibleWidth = 0;\n }\n if ((!isNullOrUndefined(_this.visibleBounds) && (currentVisibleWidth !== _this.owner.viewer.preVisibleWidth))) {\n _this.owner.editorModule.layoutWholeDocument();\n _this.owner.viewer.preVisibleWidth = currentVisibleWidth;\n }\n if (_this.resizerTimer) {\n clearTimeout(_this.resizerTimer);\n }\n }\n }, 50);\n }\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n };\n DocumentHelper.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var rect = element.getBoundingClientRect();\n var width = 0;\n var height = 0;\n height = rect.height > 0 ? rect.height : 200;\n var restrictPaneRect = this.restrictEditingPane && this.restrictEditingPane.isShowRestrictPane ?\n this.restrictEditingPane.restrictPane.getBoundingClientRect() : undefined;\n var optionsRect = this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow ?\n this.owner.optionsPaneModule.optionsPane.getBoundingClientRect() : undefined;\n var commentPane = this.owner.commentReviewPane && this.owner.commentReviewPane.parentPaneElement ?\n this.owner.commentReviewPane.parentPaneElement.getBoundingClientRect() : undefined;\n if (restrictPaneRect || optionsRect || commentPane) {\n var paneWidth = restrictPaneRect ? restrictPaneRect.width : 0;\n paneWidth += optionsRect ? optionsRect.width : 0;\n paneWidth += commentPane ? commentPane.width : 0;\n width = (rect.width - paneWidth) > 0 ? (rect.width - paneWidth) : 200;\n }\n else {\n width = rect.width > 0 ? rect.width : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n this.measureScrollbarWidth(element);\n }\n };\n /**\n * Inserts page in specified index.\n *\n * @private\n * @param {number} index - Specifes index to insert page\n * @param {Page} page - Page to insert.\n * @returns {void}\n */\n DocumentHelper.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(index, 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n DocumentHelper.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selection.selectCurrentWord();\n }\n else {\n this.owner.selection.selectParagraph();\n }\n }\n }\n };\n DocumentHelper.prototype.scrollToPosition = function (startPosition, endPosition, skipCursorUpdate) {\n if (this.skipScrollToPosition || this.isWebPrinting) {\n this.skipScrollToPosition = false;\n return;\n }\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var horizontalWidth = 0;\n var isPageLayout = this.owner.viewer instanceof PageLayoutViewer;\n var pageLayout = this.owner.viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * this.owner.viewer.pageGap * (1 - this.zoomFactor);\n var scrollTop = this.owner.viewer.containerTop;\n var scrollLeft = this.owner.viewer.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n if (!skipCursorUpdate) {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (this.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (this.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n }\n };\n DocumentHelper.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n DocumentHelper.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n var shapeElementInfo = this.checkFloatingItems(childWidgets, cursorPoint, isMouseDragged);\n if (shapeElementInfo.isShapeSelected) {\n if (shapeElementInfo.isInShapeBorder) {\n return shapeElementInfo.element.line;\n }\n return this.selection.getLineWidgetBodyWidget(shapeElementInfo.element.textFrame, cursorPoint);\n }\n else {\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n }\n else {\n var shapeInfo = this.checkFloatingItems(this.currentPage.bodyWidgets[0], cursorPoint, isMouseDragged, false);\n var behindShapeInfo = this.checkFloatingItems(this.currentPage.bodyWidgets[0], cursorPoint, isMouseDragged, true);\n if (shapeInfo.isShapeSelected && !this.isEmptyShape(shapeInfo)) {\n if (shapeInfo.isInShapeBorder) {\n return shapeInfo.element.line;\n }\n if (shapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(shapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (isMouseDragged && this.isFootnoteWidget) {\n if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined && this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n }\n else if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined &&\n this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget\n && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Endnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n }\n }\n else {\n if (!isMouseDragged && this.currentPage.footnoteWidget && this.isInFootnoteWidget(this.currentPage.footnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else if (!isMouseDragged && this.currentPage.endnoteWidget &&\n this.isInFootnoteWidget(this.currentPage.endnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else {\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidgets = this.currentPage.bodyWidgets[i];\n widget = this.selection.getLineWidgetBodyWidget(bodyWidgets, cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n }\n }\n var inlineShapeInfo = this.checkInlineShapeItems(widget, cursorPoint, isMouseDragged);\n if (inlineShapeInfo.isShapeSelected) {\n if (inlineShapeInfo.isInShapeBorder) {\n return inlineShapeInfo.element.line;\n }\n if (inlineShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(inlineShapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (!this.checkPointIsInLine(widget, cursorPoint) && behindShapeInfo.isShapeSelected) {\n if (behindShapeInfo.isInShapeBorder) {\n return behindShapeInfo.element.line;\n }\n if (behindShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(behindShapeInfo.element.textFrame, cursorPoint);\n }\n }\n }\n }\n return widget;\n };\n DocumentHelper.prototype.checkInlineShapeItems = function (widget, cursorPoint, isMouseDragged) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatingElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selection.getCurrentTextFrame();\n if (textFrame) {\n floatingElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = 0; i < widget.children.length; i++) {\n if (!(widget.children[i] instanceof ShapeElementBox && widget.children[i].textWrappingStyle === 'Inline')) {\n continue;\n }\n floatingElement = widget.children[i];\n if (cursorPoint.x < floatingElement.x + floatingElement.margin.left + floatingElement.width &&\n cursorPoint.x > floatingElement.x && cursorPoint.y < floatingElement.y + floatingElement.margin.top +\n floatingElement.height && cursorPoint.y > floatingElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatingElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatingElement,\n 'caretPosition': cursorPoint,\n 'isInShapeBorder': isInShapeBorder,\n 'isShapeSelected': isInShape\n };\n };\n /**\n * @private\n */\n DocumentHelper.prototype.checkPointIsInLine = function (widget, cursorPoint) {\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n var element = void 0;\n var left = widget.paragraph.x;\n var top_1 = this.selection.getTop(widget);\n for (var i = widget.children.indexOf(widget.children[0]); i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (cursorPoint.x < left + element.margin.left + element.width + element.padding.left\n && cursorPoint.x > left && cursorPoint.y < top_1 + widget.height && cursorPoint.y > top_1) {\n return true;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInFootnoteWidget = function (footnoteWidget, point) {\n for (var i = 0; i < footnoteWidget.bodyWidgets.length; i++) {\n for (var j = 0; j < footnoteWidget.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnoteWidget.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n return true;\n }\n }\n }\n return false;\n };\n DocumentHelper.prototype.checkFloatingItems = function (blockContainer, cursorPoint, isMouseDragged, isBehind) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (blockContainer.floatingElements.length > 0) {\n var page = this.currentPage;\n /* eslint-disable */\n blockContainer.floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selection.getCurrentTextFrame();\n if (textFrame) {\n floatElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = 0; i < blockContainer.floatingElements.length; i++) {\n if (blockContainer.floatingElements[i] instanceof TableWidget\n || (!isNullOrUndefined(isBehind) && isBehind ? blockContainer.floatingElements[i].textWrappingStyle !== 'Behind' : blockContainer.floatingElements[i].textWrappingStyle === 'Behind')) {\n continue;\n }\n floatElement = blockContainer.floatingElements[i];\n if (cursorPoint.x < floatElement.x + floatElement.margin.left + floatElement.width &&\n cursorPoint.x > floatElement.x && cursorPoint.y < floatElement.y + floatElement.margin.top +\n floatElement.height && cursorPoint.y > floatElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': cursorPoint,\n 'isShapeSelected': isInShape,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n DocumentHelper.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n if (block instanceof TextFrame) {\n block = block.containerShape.paragraph;\n }\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n DocumentHelper.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selection.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[0].childWidgets.length === 0) {\n if (j === this.pages.length - 1 && this.owner.viewer instanceof PageLayoutViewer && this.owner.viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n DocumentHelper.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = '';\n if (fieldCodes.length > 1) {\n if (fieldCodes[1] !== ' MERGEFORMAT') {\n fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n }\n }\n if (fieldPattern == '') {\n fieldPattern = page.bodyWidgets[0].sectionFormat.pageNumberStyle;\n }\n fieldCategory = (!fieldCategory.match('numpages') && !fieldCategory.match('sectionpages') &&\n fieldCategory.match('page')) ? 'page' : fieldCategory;\n switch (fieldCategory) {\n case 'page':\n if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex !== 0) {\n var currentSectionIndex_1 = page.sectionIndex;\n var previousPage = page.previousPage;\n if (currentSectionIndex_1 !== previousPage.sectionIndex) {\n page.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n if (previousPage.currentPageNum === 1) {\n previousPage.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n }\n page.currentPageNum = previousPage.currentPageNum + 1;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n else if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex === 0) {\n page.currentPageNum = page.bodyWidgets[0].sectionFormat.pageStartingNumber + page.index;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n page.currentPageNum = (!isNullOrUndefined(page.previousPage)) ? page.previousPage.currentPageNum + 1 : page.index + 1;\n page.currentPageNum = page.index + 1;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n case 'numpages':\n return this.getFieldText(fieldPattern, page.documentHelper.pages.length);\n case 'sectionpages':\n var currentSectionIndex = page.sectionIndex;\n var currentPageCount = 0;\n for (var i = 0; i < page.documentHelper.pages.length; i++) {\n if (page.documentHelper.pages[i].sectionIndex === currentSectionIndex) {\n currentPageCount++;\n }\n else if (currentPageCount !== 0) {\n break;\n }\n }\n return this.getFieldText(fieldPattern, currentPageCount);\n default:\n break;\n }\n }\n return '';\n };\n DocumentHelper.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanUpper':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanLower':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'LetterUpper':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'LetterLower':\n return this.layout.getAsLetter(value).toLowerCase();\n default:\n return value.toString();\n }\n };\n DocumentHelper.prototype.isEmptyShape = function (shape) {\n var isEmpty = true;\n if (shape.element instanceof ImageElementBox) {\n return isEmpty;\n }\n var textFrame = shape.element.textFrame;\n if (textFrame.childWidgets.length === 0) {\n return isEmpty;\n }\n else if (textFrame.childWidgets.length === 1 && textFrame.childWidgets[0] instanceof ParagraphWidget && (textFrame.childWidgets[0].childWidgets.length === 0 ||\n (textFrame.childWidgets[0].childWidgets.length === 1 && textFrame.childWidgets[0].childWidgets[0].children.length === 0))) {\n return isEmpty;\n }\n else {\n return false;\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n this.pages = [];\n this.pages = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n this.abstractLists = [];\n this.abstractLists = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.renderedLists.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.authors.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.revisionsInternal.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.preDefinedStyles.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.bookmarks.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.editRanges.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.customXmlData.destroy();\n }\n this.blockToShift = undefined;\n this.cachedPages = [];\n this.cachedPages = undefined;\n this.characterFormat = undefined;\n this.comments = [];\n this.comments = undefined;\n this.compositionEnd = undefined;\n this.compositionStart = undefined;\n this.compositionUpdated = undefined;\n this.contentControlCollection = [];\n this.contentControlCollection = undefined;\n this.fieldCollection = [];\n this.fieldCollection = undefined;\n this.renderedLevelOverrides = [];\n this.renderedLevelOverrides = undefined;\n this.headersFooters = [];\n this.headersFooters = undefined;\n this.lists = [];\n this.lists = undefined;\n this.comments = [];\n this.comments = undefined;\n this.listParagraphs = [];\n this.listParagraphs = undefined;\n this.formFields = [];\n this.formFields = undefined;\n this.fieldCollection = [];\n this.fieldCollection = undefined;\n this.userCollection = [];\n this.userCollection = undefined;\n this.cachedPages = [];\n this.cachedPages = undefined;\n this.footnoteCollection = [];\n this.footnoteCollection = undefined;\n this.endnoteCollection = [];\n this.endnoteCollection = undefined;\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogInternal2) {\n this.dialogInternal2.destroy();\n this.dialogInternal2 = undefined;\n }\n if (this.dialogInternal3) {\n this.dialogInternal3.destroy();\n this.dialogInternal3 = undefined;\n }\n if (this.dialogTarget1 && this.dialogTarget1.parentElement) {\n this.dialogTarget1.parentElement.removeChild(this.dialogTarget1);\n }\n this.dialogTarget1 = undefined;\n if (this.dialogTarget2 && this.dialogTarget2.parentElement) {\n this.dialogTarget2.parentElement.removeChild(this.dialogTarget2);\n }\n this.dialogTarget2 = undefined;\n if (this.dialogTarget3 && this.dialogTarget3.parentElement) {\n this.dialogTarget3.parentElement.removeChild(this.dialogTarget3);\n }\n this.dialogTarget3 = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n }\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n this.touchStart = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n this.editableDiv.parentElement.removeChild(this.editableDiv);\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n }\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.innerHTML = '';\n this.iframe = undefined;\n }\n this.viewerContainer = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n };\n /**\n * Un-Wires events and methods\n *\n * @returns {void}\n */\n DocumentHelper.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n if (!Browser.isDevice) {\n this.editableDiv.removeEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.removeEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.removeEventListener('load', this.onIframeLoad);\n }\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer.bind(this));\n window.removeEventListener('touchend', this.onImageResizer.bind(this));\n };\n DocumentHelper.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var footnoteElement = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.owner.viewer.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var floatItemInfo = this.selection.checkAllFloatingElements(widget, touchPoint);\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n var formField = undefined;\n var referenceField = undefined;\n var isInInline = this.checkPointIsInLine(widget, touchPoint);\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n if (isNullOrUndefined(hyperlinkField)) {\n formField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n }\n if (!isNullOrUndefined(hyperlinkField)) {\n var code = this.selection.getFieldCode(hyperlinkField);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n hyperlinkField = undefined;\n }\n }\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n if (isNullOrUndefined(hyperlinkField) && !isNullOrUndefined(formField) && this.isDocumentProtected &&\n this.protectionType === 'FormFieldsOnly' && !this.isFormFilling) {\n this.selection.setHyperlinkContentToToolTip(formField, widget, touchPoint.x, true);\n }\n else {\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x, false);\n }\n if (formField) {\n var isInlineFormFillMode = (formField.formFieldData instanceof TextFormField) && formField.formFieldData.type === 'Text';\n if (this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline' && isInlineFormFillMode) {\n //Update text cursor in text form field.\n formField = undefined;\n }\n }\n if (this.owner.enableLockAndEdit) {\n var isLocked = false;\n var block = widget.paragraph;\n if (block.isInsideTable) {\n block = this.layout.getParentTable(block);\n }\n if (block.locked && block.lockedBy !== this.owner.currentUser) {\n isLocked = true;\n }\n var sectionFormat = widget.paragraph.bodyWidget.sectionFormat;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor;\n if (this.viewer instanceof WebLayoutViewer) {\n pageWidth = (this.visibleBounds.width - (this.viewer.padding.right * 5)) / this.zoomFactor;\n }\n if (isLocked && touchPoint.x >= lineLeft && touchPoint.x < lineLeft + pageWidth) {\n this.selection.setLockInfoTooptip(widget, touchPoint.x, block.lockedBy);\n }\n else {\n this.selection.setLockInfoTooptip(undefined, touchPoint.x, '');\n }\n }\n }\n if (!isNullOrUndefined(widget)) {\n if (isNullOrUndefined(footnoteElement) && this.owner.layoutType == 'Pages') {\n footnoteElement = this.selection.getFootNoteElementInCurrentSelection(widget, touchPoint);\n if (footnoteElement instanceof FootnoteElementBox) {\n this.selection.setFootnoteContentToToolTip(footnoteElement, widget, touchPoint.x);\n }\n }\n }\n var isCtrlkeyPressed = this.isIosDevice ? event.metaKey : event.ctrlKey;\n if ((!isNullOrUndefined(hyperlinkField) && (isCtrlkeyPressed &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) || formField) {\n if (!isNullOrUndefined(formField)) {\n if (this.isFormFillProtectedMode) {\n div.style.cursor = 'default';\n }\n }\n else {\n div.style.cursor = 'pointer';\n }\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n if (!this.owner.imageResizerModule.isShapeResize || this.owner.imageResizerModule.isShapeResize && resizePosition !== 'move') {\n div.style.cursor = resizePosition;\n }\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n if (floatItemInfo.isInShapeBorder && !isInInline) {\n div.style.cursor = 'all-scroll';\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.updateDialogTabHeight = function (dialogElement, targetElement) {\n var header = dialogElement.getElementsByClassName('e-dlg-header-content')[0];\n var contentElement = dialogElement.getElementsByClassName('e-dlg-content')[0];\n var footer = dialogElement.getElementsByClassName('e-footer-content')[0];\n var contentStyle = getComputedStyle(contentElement);\n var dialogStyle = getComputedStyle(dialogElement);\n var paddingTop = parseInt(contentStyle.paddingTop, 10);\n var paddingBottom = parseInt(contentStyle.paddingBottom, 10);\n var paddingVertical = (isNaN(paddingTop) ? 0 : paddingTop) + (isNaN(paddingBottom) ? 0 : paddingBottom);\n var borderTop = parseInt(dialogStyle.borderTop, 10);\n var borderBottom = parseInt(dialogStyle.borderBottom, 10);\n var borderVertical = (isNaN(borderTop) ? 0 : borderTop) + (isNaN(borderBottom) ? 0 : borderBottom);\n var contentHeight = dialogElement.offsetHeight - (header.offsetHeight + footer.offsetHeight + paddingVertical + borderVertical);\n targetElement.style.height = contentHeight + 'px';\n var paddingLeft = parseInt(contentStyle.paddingLeft, 10);\n var paddingRight = parseInt(contentStyle.paddingRight, 10);\n var paddingHorizontal = (isNaN(paddingLeft) ? 0 : paddingLeft) + (isNaN(paddingRight) ? 0 : paddingRight);\n var borderLeft = parseInt(dialogStyle.borderLeft, 10);\n var borderRight = parseInt(dialogStyle.borderRight, 10);\n var borderHorizontal = (isNaN(borderLeft) ? 0 : borderLeft) + (isNaN(borderRight) ? 0 : borderRight);\n var contentWidth = dialogElement.offsetWidth - (paddingHorizontal + borderHorizontal);\n return contentWidth;\n };\n /**\n *\n * @private\n */\n DocumentHelper.prototype.canRenderBorder = function (paragraph) {\n var skipTopBorder = false;\n var skipBottomBorder = false;\n var isSamePreviousBorder;\n var isSameNextBorder;\n var isSameTopBorder;\n var isSameBottomBorder;\n var isSameLeftBorder;\n var isSameRightBorder;\n var previousBlock = paragraph.previousRenderedWidget;\n var nextBlock = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(previousBlock) && previousBlock instanceof ParagraphWidget && paragraph.x === previousBlock.x) {\n isSamePreviousBorder = paragraph.paragraphFormat.borders.top.isEqualFormat(previousBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = paragraph.paragraphFormat.borders.left.isEqualFormat(previousBlock.paragraphFormat.borders.left, true);\n isSameRightBorder = paragraph.paragraphFormat.borders.right.isEqualFormat(previousBlock.paragraphFormat.borders.right, true);\n if (isSamePreviousBorder && isSameLeftBorder && isSameRightBorder\n && previousBlock.paragraphFormat.borders.horizontal.lineStyle === 'None') {\n skipTopBorder = true;\n }\n }\n if (!isNullOrUndefined(nextBlock) && nextBlock instanceof ParagraphWidget && paragraph.x === nextBlock.x) {\n isSameNextBorder = paragraph.paragraphFormat.borders.bottom.isEqualFormat(nextBlock.paragraphFormat.borders.top);\n isSameTopBorder = paragraph.paragraphFormat.borders.top.isEqualFormat(nextBlock.paragraphFormat.borders.top);\n isSameBottomBorder = paragraph.paragraphFormat.borders.bottom.isEqualFormat(nextBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = paragraph.paragraphFormat.borders.left.isEqualFormat(nextBlock.paragraphFormat.borders.left, true);\n isSameRightBorder = paragraph.paragraphFormat.borders.right.isEqualFormat(nextBlock.paragraphFormat.borders.right, true);\n if (isSameNextBorder && isSameBottomBorder && isSameTopBorder && isSameLeftBorder && isSameRightBorder) {\n skipBottomBorder = true;\n }\n }\n return {\n 'skipTopBorder': skipTopBorder,\n 'skipBottomBorder': skipBottomBorder\n };\n };\n return DocumentHelper;\n}());\nexport { DocumentHelper };\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n function LayoutViewer(owner) {\n /**\n * @private\n */\n this.visiblePages = [];\n /**\n * @private\n */\n this.padding = new Padding(10, 10, 10, 10);\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n this.owner = owner;\n }\n Object.defineProperty(LayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.updateClientArea = function (sectionFormat, page, isReLayout) {\n var width = 0;\n var height = 0;\n if (this instanceof WebLayoutViewer) {\n var top_2 = 0;\n width = (this.documentHelper.visibleBounds.width - (this.padding.right * 4) - (this.padding.left * 2)) / this.documentHelper.zoomFactor;\n if (width < 0) {\n width = 0;\n }\n height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(this.padding.left / this.documentHelper.zoomFactor, top_2, width, height);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n else {\n var top_3 = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(sectionFormat)) {\n top_3 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n var isEmptyWidget = false;\n if (!isNullOrUndefined(page.headerWidget)) {\n isEmptyWidget = page.headerWidget.isEmpty;\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n top_3 = Math.min(Math.max(headerDistance + page.headerWidget.height, top_3), pageHeight / 100 * 40);\n }\n }\n var bottom = 0.667 + bottomMargin;\n if (!isNullOrUndefined(page.footerWidget)) {\n isEmptyWidget = page.footerWidget.isEmpty;\n var footnoteHeight = !isNullOrUndefined(page.footnoteWidget) ? page.footnoteWidget.height : 0;\n footnoteHeight = Math.min(footnoteHeight, ((pageHeight - top_3 - bottom) / 100 * 90));\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n bottom = 0.667 + Math.min(pageHeight / 100 * 40, Math.max(footerDistance + page.footerWidget.height, bottomMargin));\n }\n bottom += footnoteHeight;\n }\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = pageHeight - top_3 - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top_3, width, pageHeight - top_3 - bottom);\n if (page.footnoteWidget && isReLayout && !this.documentHelper.owner.editor.isFootNote) {\n if (page.footnoteWidget.y !== 0 && this.clientArea.y + this.clientArea.height > page.footnoteWidget.y) {\n var sub = (this.clientArea.y + this.clientArea.height - page.footnoteWidget.y);\n this.clientArea.height -= sub / 2;\n }\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForTextBoxShape = function (textBox, beforeLayout) {\n if (textBox.textWrappingStyle === 'Inline') {\n textBox.y = this.clientActiveArea.y;\n textBox.x = this.clientActiveArea.x;\n }\n if (beforeLayout) {\n var marginLeft = HelperMethods.convertPointToPixel(textBox.textFrame.marginLeft);\n var marginRight = HelperMethods.convertPointToPixel(textBox.textFrame.marginRight);\n var marginTop = HelperMethods.convertPointToPixel(textBox.textFrame.marginTop);\n var marginBottom = HelperMethods.convertPointToPixel(textBox.textFrame.marginBottom);\n var width = textBox.width;\n var height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(textBox.x + marginLeft, textBox.y + marginTop, width - marginLeft - marginRight, height - marginTop - marginBottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaByWidgetFootNote = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTextWrap = function (area) {\n this.clientActiveArea = new Rect(area.x, area.y, area.width, area.height);\n };\n LayoutViewer.prototype.updateClientAreaByWidget = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n var bidi = block.bidi;\n var width = 0;\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n }\n else {\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (tableAlignment !== 'Left') {\n var tableWidth = 0;\n // If the grid is calculated, we can direclty get the width from the grid.\n // Otherwise, calculate the width.\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.getTotalWidth(0));\n tableWidth = tableWidth === 0 ? block.tableHolder.tableWidth === 0 ?\n block.getTableClientWidth(block.getOwnerWidth(false)) : block.tableHolder.tableWidth : tableWidth;\n // Fore resizing table, the tableholder table width taken for updated width. \n // Since, the columns will be cleared if we performed resizing.\n if (this.owner.editor && this.owner.editor.tableResize.currentResizingTable === block\n && this.owner.editor.tableResize.resizerPosition === 0) {\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.tableWidth);\n }\n if (tableAlignment === 'Center') {\n tableWidth = block.getTableCellWidth();\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n if (bidi) {\n leftIndent = leftIndent - HelperMethods.convertPointToPixel(block.leftIndent);\n rightIndent = leftIndent;\n }\n if (!block.isInsideTable) {\n //leftIndent = (block.tableFormat.horizontalPositionAbs === 'Left') ? block.tableFormat.horizontalPosition : leftIndent;\n }\n this.documentHelper.tableLefts.push(leftIndent);\n }\n }\n width = this.clientArea.width - (leftIndent + HelperMethods.convertPointToPixel(block.rightIndent));\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x + (bidi ? rightIndent : leftIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n }\n }\n else {\n // Clears table left for table with right or center alignment.\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n if (tableAlignment !== 'Left' && this.documentHelper.tableLefts.length > 0) {\n leftIndent = this.documentHelper.tableLefts.pop();\n if (bidi) {\n rightIndent = leftIndent;\n }\n }\n }\n width = this.clientArea.width + leftIndent + HelperMethods.convertPointToPixel(block.rightIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x - (bidi ? rightIndent : leftIndent);\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n };\n LayoutViewer.prototype.tableAlignmentForBidi = function (block, bidi) {\n var tableAlignment = block.tableFormat.tableAlignment;\n if (bidi) {\n if (tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n return tableAlignment;\n };\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n LayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage, updateHeaderFooterPage, updatePage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.documentHelper.viewerContainer.scrollLeft;\n point.y += this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.documentHelper.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = void 0;\n if (this instanceof PageLayoutViewer) {\n pageRight = ((page.boundingRectangle.right - pageLeft) * this.documentHelper.zoomFactor) + pageLeft;\n }\n else {\n pageRight = page.boundingRectangle.right + pageLeft;\n }\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.documentHelper.currentPage = page;\n if (updateHeaderFooterPage) {\n this.updateHeaderFooterPageInstance(page);\n }\n }\n point.y = (point.y - (pageTop)) / this.documentHelper.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.documentHelper.zoomFactor;\n }\n return point;\n }\n if (!isNullOrUndefined(updatePage)) {\n this.updateHeaderFooterPageInstance(updatePage);\n }\n }\n if (!isNullOrUndefined(updatePage)) {\n this.updateHeaderFooterPageInstance(updatePage);\n }\n return point;\n };\n LayoutViewer.prototype.updateHeaderFooterPageInstance = function (page) {\n if (!isNullOrUndefined(page.headerWidget)) {\n page.headerWidget.page = page;\n }\n if (!isNullOrUndefined(page.footerWidget)) {\n page.footerWidget.page = page;\n }\n };\n LayoutViewer.prototype.getPageHeightAndWidth = function (height, width, viewerWidth, viewerHeight) {\n height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n height = height + this.documentHelper.pages[i].boundingRectangle.height;\n }\n width = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (width < this.documentHelper.pages[i].boundingRectangle.width) {\n width = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n //this.documentHelper.visibleBoundsIn = new Rect(0, 0, width, height);\n viewerWidth = this.documentHelper.visibleBounds.width;\n viewerHeight = this.documentHelper.visibleBounds.height;\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight\n };\n };\n LayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.documentHelper.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n this.owner.viewer.renderPage(page, x, y, width, height);\n }\n };\n /* eslint-disable */\n LayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.documentHelper.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.documentHelper.selection && isNullOrUndefined(this.documentHelper.zoomX && isNullOrUndefined(this.documentHelper.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.documentHelper.selection.getPage(this.documentHelper.selection.end.currentWidget.paragraph);\n x = (this.documentHelper.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.documentHelper.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.documentHelper.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.documentHelper.selection.end.location.x) * prevScaleFactor;\n y += (this.documentHelper.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.documentHelper.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.documentHelper.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n verticalHeight = verticalHeight + this.documentHelper.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (horizontalWidth < this.documentHelper.pages[i].boundingRectangle.width) {\n horizontalWidth = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n var height = (verticalHeight * this.documentHelper.zoomFactor + (this.documentHelper.pages.length + 1) * this.pageGap * (1 - this.documentHelper.zoomFactor)) - this.documentHelper.visibleBounds.height;\n var horWidth = horizontalWidth * this.documentHelper.zoomFactor - this.documentHelper.visibleBounds.width;\n if (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.documentHelper.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.documentHelper.pages.length) {\n break;\n }\n page = this.documentHelper.pages[pageIndex];\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.documentHelper.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.documentHelper.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n this.documentHelper.viewerContainer.scrollTop = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.documentHelper.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.documentHelper.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n this.documentHelper.viewerContainer.scrollLeft = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.documentHelper.scrollToPosition(this.documentHelper.selection.start, this.documentHelper.selection.end);\n }\n if (this instanceof WebLayoutViewer) {\n this.owner.editorModule.layoutWholeDocument();\n }\n };\n LayoutViewer.prototype.updateCanvasWidthAndHeight = function (viewerWidth, viewerHeight, containerHeight, containerWidth, width, height) {\n if (this instanceof PageLayoutViewer) {\n if (this.documentHelper.visibleBounds.width !== this.documentHelper.viewerContainer.clientWidth) {\n viewerWidth -= (this.documentHelper.visibleBounds.width - this.documentHelper.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.viewerContainer.offsetWidth - this.documentHelper.viewerContainer.clientWidth;\n }\n }\n else {\n if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.scrollbarWidth;\n containerWidth -= this.documentHelper.scrollbarWidth;\n }\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= this.documentHelper.scrollbarWidth;\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.documentHelper.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.documentHelper.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.documentHelper.pageContainer.style.width = width.toString() + 'px';\n this.documentHelper.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.documentHelper.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.documentHelper.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.documentHelper.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.containerCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.containerCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.documentHelper.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.selectionCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.selectionCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight,\n 'containerHeight': containerHeight,\n 'containerWidth': containerWidth\n };\n };\n LayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n this.owner.viewer.containerTop = this.documentHelper.viewerContainer.scrollTop;\n this.documentHelper.containerCanvas.style.position = 'absolute';\n this.documentHelper.containerCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.documentHelper.selectionCanvas.style.position = 'absolute';\n this.documentHelper.selectionCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.owner.viewer.containerLeft = this.documentHelper.viewerContainer.scrollLeft;\n this.documentHelper.containerCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n this.documentHelper.selectionCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n };\n LayoutViewer.prototype.destroy = function () {\n this.clientArea = undefined;\n this.clientActiveArea = undefined;\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n // if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n // return;\n // }\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(PageLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.pageGap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page(this.documentHelper);\n this.updatePageBoundingRectangle(section, page, yPos);\n if (isNullOrUndefined(index)) {\n this.documentHelper.pages.push(page);\n }\n else {\n this.documentHelper.pages.splice(index, 0, page);\n }\n this.updateClientArea(section.sectionFormat, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n if (this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo && this.owner.editorHistory.currentHistoryInfo.action === 'Paste') {\n this.documentHelper.layout.layoutHeaderFooter(page.previousPage.bodyWidgets[0], viewer, page.previousPage);\n }\n this.documentHelper.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section.sectionFormat, page);\n return page;\n };\n PageLayoutViewer.prototype.updatePageBoundingRectangle = function (section, page, yPosition) {\n //page.viewer = this;\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.documentHelper.visibleBounds.width - pageWidth * this.documentHelper.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPosition, pageWidth, pageHeight);\n };\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.documentHelper.visibleBounds.width;\n var height = this.documentHelper.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.documentHelper.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.documentHelper.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(this.owner.selection.start) &&\n !isNullOrUndefined(this.owner.selection.end)) {\n this.documentHelper.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n }\n else {\n this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.documentHelper.zoomFactor = (this.documentHelper.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.documentHelper.zoomFactor = 100 / 100;\n break;\n }\n };\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n var page = section.page;\n if (section.sectionFormat.differentFirstPage && (isNullOrUndefined(page.previousPage) || page.sectionIndex !== page.previousPage.sectionIndex)) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && this.documentHelper.pages.length % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.documentHelper.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n var currentSecIndex = sectionIndex > 0 ? sectionIndex - 1 : sectionIndex;\n while (!headerFooter && currentSecIndex !== -1 && this.documentHelper.headersFooters[currentSecIndex][index]) {\n headerFooter = this.documentHelper.headersFooters[currentSecIndex][index];\n currentSecIndex--;\n }\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n headerFooter.isEmpty = true;\n }\n this.documentHelper.headersFooters[sectionIndex][index] = headerFooter;\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n return headerFooter;\n };\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, Number.POSITIVE_INFINITY);\n }\n else {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, Number.POSITIVE_INFINITY);\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n PageLayoutViewer.prototype.updateHeaderFooterClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n };\n PageLayoutViewer.prototype.updateFootnoteClientArea = function (sectionFormat, footnote, footNoteType, para) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n var left = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var top = HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - Math.max(footerDistance + footnote.page.footerWidget.height, bottomMargin);\n this.clientArea = new Rect(left, top, width, Number.POSITIVE_INFINITY);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, Number.POSITIVE_INFINITY);\n };\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n top = this.documentHelper.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.documentHelper.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = (updatePositionObj.width * this.documentHelper.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (updatePositionObj.height * this.documentHelper.zoomFactor) + (this.documentHelper.pages.length + 1) * this.pageGap;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n containerHeight = updateObj.containerHeight;\n containerWidth = updateObj.containerWidth;\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var left = (updateObj.width - this.documentHelper.pages[i].boundingRectangle.width * this.documentHelper.zoomFactor) / 2;\n if (left > this.pageLeft) {\n this.documentHelper.pages[i].boundingRectangle = new Rect(left, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n else {\n this.documentHelper.pages[i].boundingRectangle = new Rect(this.pageLeft, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n // Clears the container first.\n this.visiblePages = [];\n var height = this.documentHelper.visibleBounds.height;\n var vertical = this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var pageH = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var left = page.boundingRectangle.x;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, left, y);\n }\n }\n };\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.owner.isSpellCheck && this.owner.spellChecker.enableOptimizedSpellCheck && (this.documentHelper.triggerElementsOnLoading || this.documentHelper.isScrollHandler) && this.documentHelper.cachedPages.indexOf(page.index) < 0) {\n this.documentHelper.cachedPages.push(page.index);\n var content = this.owner.spellChecker.getPageContent(page);\n if (content.trim().length > 0) {\n page.allowNextPageRendering = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellChecker.callSpellChecker(this.owner.spellChecker.languageID, content, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n _this.owner.spellChecker.updateUniqueWords(jsonObject.SpellCollection);\n page.allowNextPageRendering = true;\n _this.documentHelper.triggerSpellCheck = true;\n _this.renderPage(page, x, y, width, height);\n _this.documentHelper.triggerSpellCheck = false;\n _this.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\nvar WebLayoutViewer = /** @class */ (function (_super) {\n __extends(WebLayoutViewer, _super);\n function WebLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n /**\n * @private\n */\n _this.visiblePages = [];\n /* if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return;\n }*/\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(WebLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WebLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates new page.\n * @private\n */\n WebLayoutViewer.prototype.createNewPage = function (section, index) {\n var page;\n var yPos = 0;\n var x = 10;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom;\n }\n page = new Page(this.documentHelper);\n if (this.documentHelper.pages.length === 0) {\n page.boundingRectangle = new Rect(x, yPos, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n else {\n page.boundingRectangle = new Rect(x, yPos - 20, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n this.documentHelper.pages.push(page);\n this.updateClientArea(undefined, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n return page;\n };\n WebLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n this.documentHelper.zoomFactor = 1;\n };\n WebLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n this.updateScrollBars();\n };\n WebLayoutViewer.prototype.getContentHeight = function () {\n var height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if (i === 0) {\n height += this.padding.top;\n page.boundingRectangle.y = this.padding.top;\n }\n else {\n page.boundingRectangle.y = this.documentHelper.pages[i - 1].boundingRectangle.bottom;\n }\n page.boundingRectangle.height = page.bodyWidgets[0].height;\n height += page.bodyWidgets[0].height;\n if (i === this.documentHelper.pages.length - 1) {\n height += this.padding.bottom;\n }\n }\n return height;\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.getContentWidth = function () {\n var width = this.documentHelper.visibleBounds.width;\n var currentWidth = width;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets[0].childWidgets.length; j++) {\n if (page.bodyWidgets[0].childWidgets[j] instanceof TableWidget) {\n var tableWidget = page.bodyWidgets[0].childWidgets[j];\n var tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth()) *\n this.documentHelper.zoomFactor + this.padding.left * 4 + this.padding.right * 4\n + page.boundingRectangle.x;\n if (currentWidth < tableWidth) {\n width = tableWidth;\n currentWidth = tableWidth;\n }\n }\n }\n page.boundingRectangle.width = width;\n }\n return width;\n };\n WebLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = this.getContentWidth() * this.documentHelper.zoomFactor + this.padding.left + this.padding.right;\n var containerHeight = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n WebLayoutViewer.prototype.updateVisiblePages = function () {\n this.visiblePages = [];\n var page;\n var y;\n var height = this.documentHelper.visibleBounds.height;\n var vertical = this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n page = this.documentHelper.pages[i];\n y = (page.boundingRectangle.y) * this.documentHelper.zoomFactor;\n var pageH = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, this.padding.left, y);\n }\n }\n };\n WebLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = this.getContentWidth();\n var height = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.documentHelper.owner.isSpellCheck && this.documentHelper.owner.spellChecker.enableOptimizedSpellCheck && (this.owner.documentHelper.triggerElementsOnLoading || this.owner.documentHelper.isScrollHandler) && this.documentHelper.cachedPages.indexOf(page.index) < 0) {\n this.owner.documentHelper.cachedPages.push(page.index);\n var contentlen = this.documentHelper.owner.spellChecker.getPageContent(page);\n if (contentlen.trim().length > 0) {\n page.allowNextPageRendering = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellChecker.callSpellChecker(this.owner.spellChecker.languageID, contentlen, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObj = JSON.parse(data);\n _this.owner.spellChecker.updateUniqueWords(jsonObj.SpellCollection);\n page.allowNextPageRendering = true;\n _this.owner.documentHelper.triggerSpellCheck = true;\n _this.renderPage(page, x, y, width, height);\n _this.owner.documentHelper.triggerSpellCheck = false;\n _this.owner.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return WebLayoutViewer;\n}(LayoutViewer));\nexport { WebLayoutViewer };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/* eslint-disable */\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CharacterRangeType } from '../../base/types';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { WebLayoutViewer } from './viewer';\nimport { Revision } from '../track-changes/track-changes';\n/**\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param currentBound\n * @private\n */\n Rect.prototype.isIntersecting = function (currentBound) {\n if (currentBound.y > this.bottom || this.y > currentBound.bottom ||\n currentBound.x > this.right || this.x > currentBound.right) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Rect.prototype.clone = function () {\n return new Rect(this.x, this.y, this.width, this.height);\n };\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Padding = /** @class */ (function () {\n function Padding(right, left, top, bottom) {\n this.right = 10;\n this.left = 10;\n this.top = 10;\n this.bottom = 10;\n this.right = right;\n this.left = left;\n this.top = top;\n this.bottom = bottom;\n }\n return Padding;\n}());\nexport { Padding };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n if (this.containerWidget instanceof FootNoteWidget) {\n return this.containerWidget.bodyWidgets.indexOf(this);\n }\n else {\n return this.page.bodyWidgets.indexOf(this);\n }\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof FootNoteWidget) {\n return 0;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n get: function () {\n if (this.childWidgets) {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else if ((widget.containerWidget instanceof FootNoteWidget) && !widget.page.documentHelper.owner.editor.removeEditRange) {\n if (index <= 0) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.previousPage) {\n page = page.previousPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n previousContainer = widget.containerWidget.previousWidget ? widget.containerWidget.previousWidget : widget.containerWidget.previousRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else if (widget.containerWidget instanceof FootNoteWidget) {\n if (index >= widget.containerWidget.bodyWidgets.length - 1 && !widget.page.documentHelper.owner.editor.removeEditRange) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index + 1];\n }\n else if (widget.page.allowNextPageRendering) {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n else {\n widget = undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.allowNextPageRendering && page.nextPage) {\n page = page.nextPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n nextContainer = widget.containerWidget.nextWidget ? widget.containerWidget.nextWidget : widget.containerWidget.nextRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0 && !(nextContainer instanceof TableCellWidget)) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (widget instanceof BodyWidget && previous instanceof BodyWidget && widget.equals(previous)) {\n return previous;\n }\n else if (previous instanceof BlockWidget && widget.index === previous.index && widget.equals(previous)) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (widget instanceof BodyWidget && next instanceof BodyWidget && widget.equals(next)) {\n return next;\n }\n else if (next instanceof BlockWidget && widget.index === next.index && widget.equals(next)) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n }\n return widgets;\n };\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n this.childWidgets.push(widget);\n }\n };\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.floatingElements = [];\n /**\n * @private\n */\n _this.footNoteReference = undefined;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (!isNullOrUndefined(container.page.bodyWidgets) && container.page) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockContainer.prototype, \"sectionIndex\", {\n get: function () {\n var container = this;\n var index = 0;\n if (container instanceof BodyWidget) {\n index = container.index;\n }\n else if (container.page) {\n index = container.page.bodyWidgets[0].index;\n }\n return index;\n },\n enumerable: true,\n configurable: true\n });\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else if (node instanceof FootNoteWidget) {\n if (node.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node.containerWidget instanceof FootNoteWidget) {\n hierarchicalIndex = node.containerWidget.bodyWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.containerWidget.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var childWidget = this.childWidgets[i];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= touchPoint.x && (childWidget.x + tableWidth) >= touchPoint.x &&\n childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y))) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormat) {\n // this.sectionFormat.destroy();\n // }\n this.sectionFormat = undefined;\n if (this.page && this.page.headerWidgetIn) {\n this.page.headerWidgetIn.page = undefined;\n }\n if (this.page && this.page.footerWidgetIn) {\n this.page.footerWidgetIn.page = undefined;\n }\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isEmpty = false;\n _this.headerFooterType = type;\n return _this;\n }\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var child = this.childWidgets[i];\n var tableWidth = 0;\n if (child.wrapTextAround) {\n tableWidth = child.getTableCellWidth();\n }\n if (!(child.wrapTextAround) && child.y <= point.y && (child.y + child.height) >= point.y) {\n return child.getTableCellWidget(point);\n }\n if ((child.wrapTextAround &&\n (child.x <= point.x && (child.x + tableWidth) >= point.x &&\n child.y <= point.y && (child.y + child.height) >= point.y))) {\n return child.getTableCellWidget(point);\n }\n }\n }\n var tableCell = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCell = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCell = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCell;\n };\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.isEmpty = this.isEmpty;\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isLayouted = false;\n /**\n * @private\n */\n _this.locked = false;\n /**\n * @private\n */\n _this.lockedBy = '';\n return _this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof TextFrame) {\n var paragraph = widget.containerWidget.containerShape.line.paragraph;\n if (paragraph) {\n return paragraph.bodyWidget;\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Check whether the paragraph contains only page break.\n *\n * @private\n * @returns {boolean}: Returns true if paragraph contains page break alone.\n */\n BlockWidget.prototype.isPageBreak = function () {\n var isPageBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var pageBreak = paragraph.firstChild.children[0];\n isPageBreak = pageBreak.isPageBreak;\n }\n }\n return isPageBreak;\n };\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof TextFrame) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n var block = this;\n if ((block instanceof TableWidget) && block.tableFormat.preferredWidthType === 'Auto' && this.associatedCell.ownerTable.isGridUpdated) {\n var containerWidth = 0;\n var columnSpan = this.associatedCell.cellFormat.columnSpan;\n var columnIndex = this.associatedCell.columnIndex;\n for (var i = 0; i < columnSpan; i++) {\n containerWidth += this.associatedCell.ownerTable.tableHolder.columns[columnIndex].preferredWidth;\n columnIndex++;\n }\n if (containerWidth > 0) {\n return containerWidth;\n }\n }\n return this.associatedCell.getCellWidth(this);\n }\n if (this.containerWidget instanceof TextFrame) {\n var shape = this.containerWidget.containerShape;\n return HelperMethods.convertPixelToPoint(shape.width) - HelperMethods.convertPixelToPoint(shape.textFrame.marginLeft)\n - HelperMethods.convertPixelToPoint(shape.textFrame.marginRight);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n }\n };\n Object.defineProperty(BlockWidget.prototype, \"bidi\", {\n get: function () {\n if (this instanceof ParagraphWidget && this.paragraphFormat instanceof WParagraphFormat) {\n return this.paragraphFormat.bidi;\n }\n if (this instanceof TableWidget && this.tableFormat instanceof WTableFormat) {\n return this.tableFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar FootNoteWidget = /** @class */ (function (_super) {\n __extends(FootNoteWidget, _super);\n function FootNoteWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.bodyWidgets = [];\n return _this;\n }\n FootNoteWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n throw new Error('Method not implemented.');\n };\n FootNoteWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n FootNoteWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof FootNoteWidget\n && widget.containerWidget === this.containerWidget;\n };\n FootNoteWidget.prototype.clone = function () {\n var footNote = new FootNoteWidget();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n footNote.childWidgets.push(block);\n block.index = i;\n block.containerWidget = footNote;\n }\n footNote.block = this.block;\n return footNote;\n };\n FootNoteWidget.prototype.destroyInternal = function (viewer) {\n this.block = undefined;\n _super.prototype.destroy.call(this);\n };\n return FootNoteWidget;\n}(BlockContainer));\nexport { FootNoteWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isChangeDetected = false;\n /**\n * @private\n */\n _this.floatingElements = [];\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithPageBreak\", {\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithPageBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n ParagraphWidget.prototype.isContainsShapeAlone = function () {\n var containsShape = false;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var lineWidget = this.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (!(inline instanceof ShapeBase) || (inline instanceof ShapeBase && inline.textWrappingStyle === 'Inline')) {\n return false;\n }\n else {\n containsShape = true;\n }\n }\n }\n return containsShape ? true : false;\n };\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof ChartElementBox || inline instanceof ShapeElementBox\n || inline instanceof ContentControl\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof ShapeElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ChartElementBox) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n ParagraphWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n minimumWordWidth = HelperMethods.convertPointToPixel(minimumWordWidth);\n maximumWordWidth = HelperMethods.convertPointToPixel(maximumWordWidth);\n if (this.childWidgets.length > 0) {\n var element = this.childWidgets[0].children[0];\n var text = '';\n var elements = new Dictionary();\n var imageWidths = [];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n elements.add(element, text.length);\n text += (element.text);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n imageWidths.push(element.width);\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n var pattern = new RegExp('\\\\b\\\\w+\\\\b', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(text))) {\n matches.push(matchInfo);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var width = 0;\n text = '';\n var matchedValue = '';\n var wordStartIndex = 0;\n var wordEndIndex = match.index;\n var index = match.index;\n for (var j = 0; j < elements.keys.length; j++) {\n var span = elements.keys[j];\n var startIndex = elements.get(span);\n var spanLength = span.length;\n if (index <= startIndex + spanLength) {\n wordStartIndex = index - startIndex;\n if (match.index + match[0].length <= startIndex + spanLength) {\n wordEndIndex = (match.index + match[0].length) - (startIndex + wordStartIndex);\n }\n else {\n wordEndIndex = spanLength - wordStartIndex;\n index += wordEndIndex;\n }\n text = span.text.substring(wordStartIndex, wordStartIndex + wordEndIndex);\n matchedValue = matchedValue + text;\n }\n if (text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(text, span.characterFormat);\n }\n if (matchedValue === match[0]) {\n break;\n }\n }\n if (width !== 0) {\n if (minimumWordWidth === 0 || width > minimumWordWidth) {\n minimumWordWidth = width;\n }\n }\n }\n // Check the image widths present in the paragraph. Consider the maximum image width as minimum word width.\n var imageWidth = 0;\n if (imageWidths.length > 0) {\n imageWidth = Math.max.apply(null, imageWidths);\n }\n if (minimumWordWidth === 0 || imageWidth > minimumWordWidth) {\n minimumWordWidth = imageWidth;\n }\n var maximum = this.measureParagraph();\n if (maximumWordWidth === 0 || maximum > maximumWordWidth) {\n maximumWordWidth = maximum;\n }\n }\n return {\n 'maximumWordWidth': HelperMethods.convertPixelToPoint(maximumWordWidth),\n 'minimumWordWidth': HelperMethods.convertPixelToPoint(minimumWordWidth)\n };\n };\n ParagraphWidget.prototype.measureParagraph = function () {\n var width = 0;\n var element = this.childWidgets[0].children[0];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(element.text, element.characterFormat);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (fieldBegin.fieldEnd != null) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n width += element.width;\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n // Considered the left and right indent.\n if (this.leftIndent > 0) {\n width += this.leftIndent;\n }\n if (this.rightIndent > 0) {\n width += this.rightIndent;\n }\n return width;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.splitLtrAndRtlText = function (lineIndex) {\n var isPrevLTRText = null;\n var iIncrementer = 1;\n var hasRTLCharacter = false;\n var characterRangeTypes = [];\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n if (this.childWidgets.length > 0) {\n var lineWidget = this.childWidgets[lineIndex];\n for (var i = lineIndex + 1; i < this.childWidgets.length; i++) {\n var nextLineWidget = this.childWidgets[i];\n for (var m = 0; m < nextLineWidget.children.length; m++) {\n var element = nextLineWidget.children[m];\n lineWidget.children.push(element);\n element.line = lineWidget;\n }\n this.childWidgets.splice(i, 1);\n i--;\n }\n for (var i = 0; i < lineWidget.children.length; i += iIncrementer) {\n var elementBox = lineWidget.children[i];\n iIncrementer = 1;\n ////Gets the span to split.\n var textElement = undefined;\n if (elementBox instanceof TextElementBox) {\n textElement = elementBox;\n }\n if (elementBox instanceof FieldElementBox && elementBox.fieldType == 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (textElement != undefined && !isField) {\n var text = textElement.text;\n var isTextBidi = textElement.characterFormat.bidi;\n var isRTLLang = false;\n var charTypeIndex = characterRangeTypes.length;\n if (isTextBidi) {\n isRTLLang = textHelper.isRightToLeftLanguage(elementBox.characterFormat.localeIdBidi);\n }\n ////Split the text as consicutive LTR and RTL\n var splitedTextCollection = textHelper.splitTextByConsecutiveLtrAndRtl(text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter);\n if (splitedTextCollection.length > 1) {\n for (var j = 0; j < splitedTextCollection.length; j++) {\n text = splitedTextCollection[j];\n if (j > 0) {\n ////Clone the source span.\n var clonedTextElement = textElement.clone();\n clonedTextElement.text = text;\n clonedTextElement.characterRange = characterRangeTypes[j + charTypeIndex];\n ////Inert the splitted span in order.\n lineWidget.children.splice(i + j, 0, clonedTextElement);\n clonedTextElement.line = lineWidget;\n iIncrementer++;\n if (textElement.revisions.length > 0) {\n this.updateTextElementInRevisionRange(textElement, clonedTextElement);\n }\n }\n else {\n ////Replace the source span with splitted text.\n textElement.text = text;\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n else if (splitedTextCollection.length > 0) {\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n characterRangeTypes.length = 0;\n }\n };\n ParagraphWidget.prototype.updateTextElementInRevisionRange = function (inline, splittedElementBox) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n var inlineIndex = revision.range.indexOf(inline);\n revision.range.splice(inlineIndex + 1, 0, splittedElementBox);\n splittedElementBox.revisions.push(revision);\n splittedElementBox.removedIds = [];\n }\n };\n /**\n * Combine the spans by consecutive LTR and RTL texts.\n * @private\n */\n ParagraphWidget.prototype.combineconsecutiveRTL = function (lineIndex) {\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n for (var j = lineIndex; j < this.childWidgets.length; j++) {\n var lineWidget = this.childWidgets[j];\n for (var i = 0; i <= lineWidget.children.length - 2; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox && elementBox.fieldType === 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (!isField && elementBox instanceof TextElementBox && lineWidget.children[i + 1] instanceof TextElementBox) {\n var currentTxtRange = elementBox;\n var nextTxtRange = lineWidget.children[i + 1];\n if (currentTxtRange.characterRange == CharacterRangeType.RightToLeft && nextTxtRange.characterRange == CharacterRangeType.RightToLeft &&\n currentTxtRange.text.length > 0 && nextTxtRange.text.length > 0 &&\n textHelper.isWordSplitChar(currentTxtRange.text[currentTxtRange.text.length - 1]) && textHelper.isWordSplitChar(nextTxtRange.text[0])\n && currentTxtRange.characterFormat.isEqualFormat(nextTxtRange.characterFormat)) {\n currentTxtRange.text = currentTxtRange.text + nextTxtRange.text;\n lineWidget.children.splice(i + 1, 1);\n i--;\n }\n }\n }\n }\n };\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n for (var j = 0; j < cloneLine.children.length; j++) {\n var element = cloneLine.children[j];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(element);\n }\n }\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n if (this.contentControlProperties) {\n paragraph.contentControlProperties = this.contentControlProperties;\n }\n return paragraph;\n };\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TablePosition = /** @class */ (function () {\n function TablePosition() {\n }\n /**\n * @private\n */\n TablePosition.prototype.clone = function () {\n var positioning = new TablePosition();\n positioning.allowOverlap = this.allowOverlap;\n positioning.distanceTop = this.distanceTop;\n positioning.distanceRight = this.distanceRight;\n positioning.distanceLeft = this.distanceLeft;\n positioning.distanceBottom = this.distanceBottom;\n positioning.verticalAlignment = this.verticalAlignment;\n positioning.verticalOrigin = this.verticalOrigin;\n positioning.verticalPosition = this.verticalPosition;\n positioning.horizontalAlignment = this.horizontalAlignment;\n positioning.horizontalOrigin = this.horizontalOrigin;\n positioning.horizontalPosition = this.horizontalPosition;\n return positioning;\n };\n return TablePosition;\n}());\nexport { TablePosition };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n /**\n * @private\n */\n _this.isDefaultFormatUpdated = false;\n /**\n * @private\n */\n _this.isContainInsideTable = false;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"isBidiTable\", {\n get: function () {\n return ((this.flags & 0x10) >> 4) !== 0;\n },\n set: function (value) {\n this.flags = ((this.flags & 0xEF) | ((value ? 1 : 0) << 4));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidth = function () {\n var width = 0;\n for (var k = 0; k < this.childWidgets.length; k++) {\n var rowWidth = 0;\n var rowWidget = this.childWidgets[k];\n for (var m = 0; m < rowWidget.childWidgets.length; m++) {\n var cellWidget = rowWidget.childWidgets[m];\n var cellWidth = cellWidget.width;\n if (cellWidth === 0) {\n cellWidth = cellWidget.cellFormat.cellWidth;\n if (cellWidth > cellWidget.cellFormat.preferredWidth &&\n cellWidget.cellFormat.preferredWidth !== 0 && cellWidget.cellFormat.preferredWidthType !== 'Percent') {\n cellWidth = cellWidget.cellFormat.preferredWidth;\n }\n cellWidth = HelperMethods.convertPointToPixel(cellWidth - (cellWidget.margin.left + cellWidget.margin.right));\n }\n rowWidth += (cellWidth + cellWidget.margin.left + cellWidget.margin.right);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n else if (!isNullOrUndefined(cell)) {\n cellWidth = this.getMinimumPreferredWidth(cell);\n }\n return cellWidth;\n };\n TableWidget.prototype.getMinimumPreferredWidth = function (cell) {\n var defaultWidth = 0;\n ////For fixed table, cell width (grid column width) should be considered as default width, When the preferred cell width is zero.\n if (cell.cellFormat.preferredWidth === 0 && cell.cellFormat.cellWidth !== 0) {\n defaultWidth = cell.cellFormat.cellWidth;\n }\n else {\n defaultWidth = cell.getMinimumPreferredWidth();\n }\n return defaultWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n row.childWidgets[j].cellFormat.preferredWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n /* eslint-disable */\n TableWidget.prototype.calculateGrid = function () {\n var tempGrid = [];\n var tempSpanDecimal = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n this.tableCellInfo = new Dictionary();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowCellInfo = new Dictionary();\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n tempSpanDecimal.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n tempSpanDecimal.push(currOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n columnSpan = spannedCells[k].columnIndex + spannedCells[k].cellFormat.columnSpan;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n // Add start offset of each cell based on its index\n if (!rowCellInfo.containsKey(cell.cellIndex)) {\n rowCellInfo.add(cell.cellIndex, parseFloat((currOffset - startOffset).toFixed(2)));\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n tempSpanDecimal.push(currOffset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(parseFloat(currOffset.toFixed(2))) < 0) {\n tempGrid.push(parseFloat(currOffset.toFixed(2)));\n tempSpanDecimal.push(currOffset);\n }\n columnSpan += rowFormat.gridAfter;\n }\n // Add rowindex and its cells info for each row\n if (!this.tableCellInfo.containsKey(row.rowIndex)) {\n this.tableCellInfo.add(row.rowIndex, rowCellInfo);\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n tempSpanDecimal.sort(function (a, b) { return a - b; });\n if (this.tableHolder.columns.length > 0 && tempGrid.length - 1 !== this.tableHolder.columns.length) {\n this.updateColumnSpans(tempGrid, tableWidth, tempSpanDecimal);\n }\n this.tableCellInfo.clear();\n this.tableCellInfo = undefined;\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth, tempSpan) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, undefined, -1, containerWidth, tempSpan);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell, cell.getIndex(), containerWidth, tempSpan);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, undefined, row.childWidgets.length, containerWidth, tempSpan);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n this.checkTableColumns();\n var tableWidth = this.tableHolder.getTotalWidth(1);\n if (tableWidth > minimumWordWidth) {\n minimumWordWidth = tableWidth;\n }\n tableWidth = this.tableHolder.getTotalWidth(2);\n if (tableWidth > maximumWordWidth) {\n maximumWordWidth = tableWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableWidget.prototype.checkTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n var isAutoFit = this.isAutoFit();\n if (isAutoFit || this.tableHolder.columns.length === 0) {\n this.buildTableColumns();\n }\n this.isGridUpdated = false;\n };\n /**\n * @private\n */\n TableWidget.prototype.isAutoFit = function () {\n var bodyWidget = this.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page)) {\n return bodyWidget.page.documentHelper.layout.getParentTable(this).tableFormat.allowAutoFit;\n }\n return false;\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n var isAutoFit = this.tableFormat.allowAutoFit;\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n if (((!isNullOrUndefined(this.bodyWidget.page)) && this.bodyWidget.page.viewer instanceof WebLayoutViewer && isAutoFit && !this.isInsideTable && !(this.containerWidget instanceof TextFrame))) {\n containerWidth = HelperMethods.convertPixelToPoint(this.bodyWidget.page.viewer.clientArea.width - this.bodyWidget.page.viewer.padding.right * 3);\n }\n else {\n containerWidth = this.getOwnerWidth(true);\n }\n containerWidth = (this.tableFormat.preferredWidth > containerWidth) ? this.tableFormat.preferredWidth : containerWidth;\n var isZeroWidth = (isAutoWidth && this.tableFormat.preferredWidth === 0 && !isAutoFit);\n tableWidth = this.getTableClientWidth(containerWidth);\n if (isZeroWidth && !this.isDefaultFormatUpdated && isAutoFit) {\n this.splitWidthToTableCells(tableWidth, isZeroWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var sizeInfo = new ColumnSizeInfo();\n var offset = 0;\n if (rowFormat.gridBefore > 0 && (row.rowFormat.beforeWidth !== 0 || row.rowFormat.gridBeforeWidth !== 0) && ((this.bodyWidget.page.documentHelper.alignTablesRowByRow) ? row.ownerTable.tableFormat.tableAlignment === 'Left' : true)) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, sizeInfo, offset = cellWidth, 'Point');\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n sizeInfo = rowSpannedCell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n // If the table gird alone calculated then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level operations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n else {\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n var insertIndex = 0;\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n insertIndex = m - 1;\n }\n }\n rowSpannedCells.splice(insertIndex, 0, cell);\n }\n }\n sizeInfo = cell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n sizeInfo.minimumWordWidth = sizeInfo.maximumWordWidth = sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, sizeInfo, offset += cellWidth, 'Point');\n }\n }\n }\n if (isZeroWidth && !this.isDefaultFormatUpdated) {\n this.isDefaultFormatUpdated = true;\n }\n this.tableHolder.validateColumnWidths();\n if (isAutoFit) {\n // Fits the column width automatically based on contents.\n this.tableHolder.autoFitColumn(containerWidth, tableWidth, isAutoWidth, this.isInsideTable, this.leftIndent + this.rightIndent);\n }\n else {\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth, this.leftIndent + this.rightIndent);\n }\n // if (!isAutoFit && isAutoWidth) {\n // tableWidth = this.tableHolder.tableWidth;\n // }\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.updateProperties = function (updateAllowAutoFit, currentSelectedTable, autoFitBehavior) {\n if (updateAllowAutoFit) {\n this.tableFormat.allowAutoFit = autoFitBehavior !== 'FixedColumnWidth';\n }\n if (this !== currentSelectedTable) {\n currentSelectedTable.updateProperties(false, currentSelectedTable, autoFitBehavior);\n return;\n }\n if (autoFitBehavior === 'FixedColumnWidth') {\n // Clear the table widths and set the preferred width for cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.preferredWidthType = 'Point';\n cellWidget.cellFormat.preferredWidth = cellWidget.cellFormat.cellWidth;\n }\n }\n }\n else if (autoFitBehavior === 'FitToWindow') {\n // Set the preferred width for table and cells in percentage.\n var tableWidth = this.tableHolder.getTotalWidth(0);\n this.tableFormat.leftIndent = 0;\n this.tableFormat.preferredWidth = 100;\n this.tableFormat.preferredWidthType = 'Percent';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var z = 0; z < row.childWidgets.length; z++) {\n var cell = row.childWidgets[z];\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidthType = 'Percent';\n cell.cellFormat.preferredWidth = (cell.cellFormat.cellWidth / tableWidth) * 100;\n }\n }\n }\n }\n else {\n // Clear the preferred width for table and cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.beforeWidth = 0;\n row.rowFormat.gridBefore = 0;\n row.rowFormat.gridBeforeWidth = 0;\n row.rowFormat.gridBeforeWidthType = 'Auto';\n row.rowFormat.afterWidth = 0;\n row.rowFormat.gridAfter = 0;\n row.rowFormat.gridAfterWidth = 0;\n row.rowFormat.gridAfterWidthType = 'Auto';\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.cellFormat.preferredWidth = 0;\n cell.cellFormat.preferredWidthType = 'Auto';\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth(0);\n var ownerWidth = this.getOwnerWidth(true);\n var containerWidth = this.getTableClientWidth(ownerWidth);\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n else { //ToDo:Need to analyze more the Percentage calculation for table width.\n var value = (totalPreferredWidth / ownerWidth) * 100;\n this.tableFormat.preferredWidth = value;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n TableWidget.prototype.updateChildWidgetLeft = function (left) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n rowWidget.x = left;\n rowWidget.updateChildWidgetLeft(left);\n }\n };\n /**\n * Shift the widgets for right to left aligned table.\n * @private\n */\n TableWidget.prototype.shiftWidgetsForRtlTable = function (clientArea, tableWidget) {\n var clientAreaX = tableWidget.x;\n var clientAreaRight = clientArea.right;\n var cellSpace = 0;\n if (tableWidget.tableFormat && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n var rowX = rowWidget.x;\n var left = clientAreaRight - (rowX - clientAreaX);\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n left = left -\n (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.rightBorderWidth + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n if (this.wrapTextAround) {\n table.wrapTextAround = this.wrapTextAround;\n table.positioning = this.positioning.clone();\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.containerWidget = this.containerWidget;\n if (this.contentControlProperties) {\n table.contentControlProperties = this.contentControlProperties;\n }\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth, isZeroWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth, isZeroWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex, isInsertRow) {\n for (var i = tableRows.length - 1; i >= 0; i--) {\n var row = tableRows.splice(i, 1)[0];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, row);\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n if (isInsertRow) {\n this.buildTableColumns();\n }\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellStartOffset = function (cell) {\n var offset = 0;\n if (cell && this.tableCellInfo) {\n if (this.tableCellInfo.containsKey(cell.ownerRow.rowIndex)) {\n var rowCellInfo = this.tableCellInfo.get(cell.ownerRow.rowIndex);\n if (rowCellInfo.containsKey(cell.cellIndex)) {\n offset = rowCellInfo.get(cell.cellIndex);\n }\n }\n }\n return offset;\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (this.containerWidget instanceof BodyWidget) {\n if (this.containerWidget.floatingElements.indexOf(this) !== -1) {\n this.containerWidget.floatingElements.splice(this.containerWidget.floatingElements.indexOf(this), 1);\n }\n }\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n if (this.spannedRowCollection) {\n this.spannedRowCollection.destroy();\n }\n this.spannedRowCollection = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.description = undefined;\n this.title = undefined;\n this.isDefaultFormatUpdated = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.index === cellIndex) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth, isZeroWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n if (isZeroWidth && cells[cell].cellFormat.preferredWidth === 0) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n this.ownerTable.isDefaultFormatUpdated = false;\n }\n else if (isZeroWidth) {\n this.ownerTable.isDefaultFormatUpdated = true;\n break;\n }\n else {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, cell, index, containerWidth, tempSpan) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index >= 0) {\n prevOffset += ownerTable.getCellStartOffset(cell);\n }\n if (index < this.childWidgets.length) {\n var preferredWidth = cell.cellFormat.cellWidth;\n if (preferredWidth === 0) {\n preferredWidth = cell.cellFormat.preferredWidth;\n }\n width = ownerTable.getCellWidth(preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var tabIndex = tableGrid.indexOf(prevOffset);\n var tabGrid = tempSpan[tabIndex];\n var gridEndIndex;\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridWidth = parseFloat((width + prevOffset).toFixed(2));\n var gridDecimalWidth = parseFloat((width + tabGrid).toFixed(2));\n if (gridDecimalWidth !== gridWidth && !isNullOrUndefined(tabGrid)) {\n gridEndIndex = this.getOffsetIndex(tableGrid, tabGrid + width);\n }\n else {\n gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n }\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = parseFloat(offset.toFixed(2));\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n if (this.contentControlProperties) {\n row.contentControlProperties = this.contentControlProperties;\n }\n return row;\n };\n /**\n * Updates the child widgets left.\n * @param left\n * @private\n */\n TableRowWidget.prototype.updateChildWidgetLeft = function (left) {\n // TODO: Cell spacing calculation.\n var spacing = 0;\n if (this.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = this.ownerTable.tableFormat.cellSpacing;\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellWidget = this.childWidgets[i];\n left += spacing + cellWidget.margin.left;\n cellWidget.x = left;\n cellWidget.updateChildWidgetLeft(cellWidget.x);\n left += cellWidget.width + cellWidget.margin.right;\n }\n };\n /**\n * Shift the widgets for RTL table.\n * @param tableWidget\n * @private\n */\n TableRowWidget.prototype.shiftWidgetForRtlTable = function () {\n var tableWidget = this.ownerTable;\n var clientAreaX = tableWidget.x;\n var cellSpace = 0;\n var tableWidth = 0;\n if (tableWidget.tableFormat != null && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth());\n var rowX = this.x;\n var clientAreaRight = clientAreaX + tableWidth;\n var left = clientAreaRight - (rowX - clientAreaX);\n for (var j = 0; j < this.childWidgets.length; j++) {\n var cellWidget = this.childWidgets[j];\n left = left - (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.rightBorderWidth + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left);\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.rowFormat = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.sizeInfoInternal = new ColumnSizeInfo();\n /**\n * @private\n */\n _this.updatedTopBorders = [];\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('leftMargin')) {\n return this.ownerRow.rowFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('topMargin')) {\n return this.ownerRow.rowFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('rightMargin')) {\n return this.ownerRow.rowFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('bottomMargin')) {\n return this.ownerRow.rowFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"sizeInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.sizeInfoInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.index);\n if (previousCell && this.equals(previousCell)) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.index);\n if (nextCell && this.equals(nextCell)) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellWidth = function (block) {\n var ownerTable = this.ownerTable;\n var containerWidth = ownerTable ? ownerTable.getTableClientWidth(ownerTable.getOwnerWidth(true)) : 0;\n var cellWidth = containerWidth;\n var leftMargin = !isNullOrUndefined(this.leftMargin) ? this.leftMargin : 0;\n var rightMargin = !isNullOrUndefined(this.rightMargin) ? this.rightMargin : 0;\n if (ownerTable && ownerTable.tableFormat.preferredWidthType === 'Auto' && ownerTable.tableFormat.allowAutoFit) {\n if (this.cellFormat.preferredWidth === 0) {\n cellWidth = containerWidth;\n }\n else {\n // If cell has prefferd width, we need to consider prefferd width.\n cellWidth = this.cellFormat.preferredWidth;\n }\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n cellWidth = (this.cellFormat.preferredWidth * containerWidth) / 100 - leftMargin - rightMargin;\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Percent') {\n cellWidth = this.cellFormat.cellWidth - leftMargin - rightMargin;\n }\n else {\n cellWidth = this.cellFormat.preferredWidth - leftMargin - rightMargin;\n }\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n return cellWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n prevCell = tableCell.previousWidget;\n }\n else if ((tableCell.cellFormat.columnSpan > 1 || tableCell.columnIndex >= 1) && tableCell.ownerRow.rowIndex > 0) {\n var previousRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(previousRow) && previousRow.childWidgets.length > 0) {\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var prevRowCell = previousRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = previousRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevCell)) {\n break;\n }\n previousRow = previousRow.previousWidget;\n }\n }\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n // Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n // For normal table cells only left border is rendered. for last cell left and right border is rendered.\n // this border widths are not included in margins.\n borderWidth = TableCellWidget.getCellLeftBorder(this).getLineWidth();\n // need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n borderWidth = TableCellWidget.getCellRightBorder(this).getLineWidth();\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSizeInfo = function (isAutoFit) {\n var isSetWidth = true;\n var layout = undefined;\n if (!isNullOrUndefined(this.bodyWidget) && !isNullOrUndefined(this.bodyWidget.page)) {\n if (!isNullOrUndefined(this.bodyWidget.page.documentHelper)) {\n layout = this.bodyWidget.page.documentHelper.layout;\n }\n }\n if (!isNullOrUndefined(layout) && !isNullOrUndefined(layout.currentCell)) {\n isSetWidth = false;\n if (this === layout.currentCell) {\n isSetWidth = true;\n }\n }\n // Gets the minimum preferred width for the table cell.\n if (isSetWidth && !this.sizeInfo.hasMinimumWidth) {\n this.sizeInfo.minimumWidth = this.getMinimumPreferredWidth();\n }\n // Gets the minimum and maximum word widths.\n if (isAutoFit) {\n if (isSetWidth && !this.sizeInfo.hasMinimumWordWidth) {\n var size = this.getMinimumAndMaximumWordWidth(0, 0);\n this.sizeInfo.minimumWordWidth = size.minimumWordWidth + this.sizeInfo.minimumWidth;\n this.sizeInfo.maximumWordWidth = size.maximumWordWidth + this.sizeInfo.minimumWidth;\n // if minimum and maximum width values are equal, set value as zero.\n // later, preferred width value is considered for all width values.\n // if (this.sizeInfo.minimumWidth === this.sizeInfo.minimumWordWidth\n // && this.sizeInfo.minimumWordWidth === this.sizeInfo.maximumWordWidth) {\n // this.sizeInfo.minimumWordWidth = 0;\n // this.sizeInfo.maximumWordWidth = 0;\n // this.sizeInfo.minimumWidth = 0;\n // }\n }\n }\n var sizeInfo = new ColumnSizeInfo();\n sizeInfo.minimumWidth = this.sizeInfo.minimumWidth;\n sizeInfo.minimumWordWidth = this.sizeInfo.minimumWordWidth;\n sizeInfo.maximumWordWidth = this.sizeInfo.maximumWordWidth;\n return sizeInfo;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n leftBorder = this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousCell)) {\n return leftBorder;\n }\n else {\n var prevCellRightBorder = undefined;\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = HelperMethods.convertHexToRgb(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = HelperMethods.convertHexToRgb(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(leftBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstCell = false;\n if (ownerCell.columnIndex === 0 || (ownerCell.cellIndex === 0 && ownerCell.ownerRow.rowFormat.gridBefore > 0)) {\n isFirstCell = true;\n }\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None' && !leftBorder.isBorderDefined) || isNullOrUndefined(leftBorder)) {\n if (isFirstCell) {\n leftBorder = rowBorders.left;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.left;\n }\n }\n else {\n leftBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.vertical;\n }\n }\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = undefined;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n nextCell = tableCell.nextWidget;\n }\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n rightBorder = this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextCell)) {\n return rightBorder;\n }\n else {\n var nextCellLeftBorder = undefined;\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(rightBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastCell = false;\n //Have to check lastcell logic\n if ((ownerCell.columnIndex + ownerCell.cellFormat.columnSpan) === ownerCell.ownerTable.tableHolder.columns.length\n || (ownerCell.cellIndex === ownerCell.ownerRow.childWidgets.length - 1)) {\n isLastCell = true;\n }\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None' && !rightBorder.isBorderDefined) || isNullOrUndefined(rightBorder)) {\n if (isLastCell) {\n rightBorder = rowBorders.right;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.right;\n }\n }\n else {\n rightBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.vertical;\n }\n }\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = undefined;\n //ToDo: Need to analyze more to get the previous cell.\n var prevRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(prevRow) && prevRow.childWidgets.length > 0) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan - 1 >= tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevTopCell)) {\n break;\n }\n prevRow = prevRow.previousWidget;\n //If all the previous rows checked and the previous top cell is null\n // then TableCell previus row matched column index cell is taken for border calculation.\n if (isNullOrUndefined(prevRow) && isNullOrUndefined(prevTopCell)) {\n prevRow = tableCell.ownerRow.previousWidget;\n if (tableCell.columnIndex < prevRow.childWidgets.length) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex === tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n //If table cell Column index is greater than previous row cells count then last cell is taken as previous top cell.\n }\n else {\n prevTopCell = tableCell.ownerRow.previousWidget.childWidgets[tableCell.ownerRow.previousWidget.childWidgets.length - 1];\n }\n }\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n topBorder = this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousTopCell)) {\n return topBorder;\n }\n else {\n var prevTopCellBottomBorder = undefined;\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom)) {\n prevTopCellBottomBorder = this.getBottomBorderToRenderByHierarchy(previousTopCell.cellFormat.borders.bottom, previousTopCell.ownerRow.rowFormat.borders, previousTopCell.ownerTable.tableFormat.borders);\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(topBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstRow = isNullOrUndefined(ownerCell.ownerRow.previousWidget);\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None' && !topBorder.isBorderDefined) || isNullOrUndefined(topBorder)) {\n if (isFirstRow) {\n topBorder = rowBorders.top;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.top;\n }\n }\n else {\n topBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = tableCell.ownerRow.nextWidget;\n if (!isNullOrUndefined(nextRow) && tableCell.columnIndex < nextRow.childWidgets.length) {\n nextBottomCell = nextRow.childWidgets[tableCell.columnIndex];\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n bottomBorder = this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextBottomCell)) {\n return bottomBorder;\n }\n else {\n var prevBottomCellTopBorder = undefined;\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(bottomBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastRow = isNullOrUndefined(ownerCell.ownerRow.nextWidget);\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None' && !bottomBorder.isBorderDefined) || isNullOrUndefined(bottomBorder)) {\n if (isLastRow) {\n bottomBorder = rowBorders.bottom;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.bottom;\n }\n }\n else {\n bottomBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * Updates the Widget left.\n * @private\n */\n TableCellWidget.prototype.updateWidgetLeft = function (x) {\n this.x = x;\n this.updateChildWidgetLeft(x);\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateChildWidgetLeft = function (left) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n this.childWidgets[i].x = left;\n if (this.childWidgets[i] instanceof TableWidget) {\n var tableWidget = this.childWidgets[i];\n tableWidget.updateChildWidgetLeft(left);\n if (tableWidget.isBidiTable) {\n var clientArea = new Rect(tableWidget.x, tableWidget.y, tableWidget.width, tableWidget.height);\n tableWidget.shiftWidgetsForRtlTable(clientArea, tableWidget);\n }\n }\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i];\n var widthInfo = block.getMinimumAndMaximumWordWidth(minimumWordWidth, maximumWordWidth);\n minimumWordWidth = widthInfo.minimumWordWidth;\n maximumWordWidth = widthInfo.maximumWordWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n if (this.contentControlProperties) {\n cell.contentControlProperties = this.contentControlProperties;\n }\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.marginTop = 0;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"renderedElements\", {\n /**\n * Rendered elements contains reordered element for RTL layout\n */\n get: function () {\n if (!isNullOrUndefined(this.layoutedElements)) {\n return this.layoutedElements;\n }\n return this.children;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isPageBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithLineBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.text === '\\v';\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && (this.paragraph.previousSplitWidget === undefined || (this.paragraph.previousSplitWidget instanceof ParagraphWidget && this.paragraph.previousSplitWidget.isEndsWithPageBreak))) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof EditRangeEndElementBox || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof ContentControl || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline, bidi, isInsert) {\n bidi = isNullOrUndefined(bidi) ? this.paragraph.bidi : bidi;\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof ShapeElementBox || inlineElement instanceof ContentControl\n || inlineElement instanceof BookmarkElementBox || inlineElement instanceof EditRangeEndElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n //if (inlineElement instanceof BookmarkElementBox) {\n // offset += inlineElement.length;\n // count += inlineElement.length;\n // continue;\n //}\n if (inlineElement instanceof TextElementBox && (inlineElement.text === ' ' && inlineElement.revisions.length === 0 && isInsert)) {\n var currentElement = this.getNextTextElement(this, i + 1);\n inlineElement = !isNullOrUndefined(currentElement) ? currentElement : inlineElement;\n indexInInline = isNullOrUndefined(currentElement) ? (offset - count) : 0;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n else if (offset === count + inlineElement.length && this.children[i + 1] instanceof FootnoteElementBox) {\n return { 'element': this.children[i + 1], 'index': indexInInline };\n }\n else {\n indexInInline = (offset - count);\n }\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * Method to retrieve next element\n * @param line\n * @param index\n */\n LineWidget.prototype.getNextTextElement = function (line, index) {\n if (index < line.children.length - 1 && line.children[index]) {\n return line.children[index];\n }\n return null;\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.padding = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.isRightToLeft = false;\n /**\n * @private\n */\n this.canTrigger = false;\n /**\n * @private\n */\n this.ischangeDetected = false;\n /**\n * @private\n */\n this.isVisible = false;\n /**\n * @private\n */\n this.isSpellChecked = false;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.canTrack = false;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.isMarkedForRevision = false;\n /**\n * @private\n */\n this.characterRange = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n Object.defineProperty(ElementBox.prototype, \"isPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === '\\f';\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isValidNodeForTracking\", {\n /**\n * @private\n * Method to indicate whether current element is trackable.\n */\n get: function () {\n if (this instanceof BookmarkElementBox || this instanceof CommentCharacterElementBox || this instanceof EditRangeStartElementBox || this instanceof EditRangeEndElementBox || this instanceof ContentControl) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isCheckBoxElement\", {\n /**\n * @private\n */\n get: function () {\n var element = this;\n if (element instanceof TextElementBox && !isNullOrUndefined(element.text)) {\n return element.text === String.fromCharCode(9745) || element.text === String.fromCharCode(9744);\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (documentHelper) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (documentHelper.fields.indexOf(fieldBegin) === -1) {\n documentHelper.fields.push(fieldBegin);\n }\n if (!isNullOrUndefined(fieldBegin.formFieldData) &&\n documentHelper.formFields.indexOf(fieldBegin) === -1) {\n documentHelper.formFields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n //Links to field end traversing from field separator.\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isNullOrUndefined(fieldSeparator.fieldEnd) && isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (fieldBegin.fieldSeparator && isNullOrUndefined(fieldBegin.fieldSeparator.fieldBegin)) {\n fieldBegin.fieldSeparator.fieldBegin = fieldBegin;\n }\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n fieldBegin.fieldSeparator.fieldEnd = fieldBegin.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget\n && line.paragraph.nextRenderedWidget.childWidgets.length > 0) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.nextNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.previousNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.fieldCodeType = '';\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n /**\n * @private\n */\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"resultText\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.formFieldData) && this.fieldType === 0 &&\n !isNullOrUndefined(this.fieldSeparator) && !isNullOrUndefined(this.fieldEnd)) {\n var textElement = this.fieldSeparator.nextElement;\n var text = '';\n do {\n if (textElement instanceof TextElementBox) {\n text += textElement.text;\n }\n textElement = textElement.nextNode;\n if (textElement === this.fieldEnd) {\n break;\n }\n } while (textElement);\n return text;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n if (this.fieldType === 0 && !isNullOrUndefined(this.formFieldData)) {\n field.formFieldData = this.formFieldData.clone();\n }\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n field.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n field.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n field.removedIds = this.removedIds.slice();\n }\n }\n field.fieldCodeType = this.fieldCodeType;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar FormField = /** @class */ (function () {\n function FormField() {\n /*\n * @private\n */\n this.name = '';\n /**\n * @private\n */\n this.enabled = true;\n /**\n * @private\n */\n this.helpText = '';\n /**\n * @private\n */\n this.statusText = '';\n }\n return FormField;\n}());\nexport { FormField };\n/**\n * @private\n */\nvar TextFormField = /** @class */ (function (_super) {\n __extends(TextFormField, _super);\n function TextFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.type = 'Text';\n /**\n * @private\n */\n _this.maxLength = 0;\n /**\n * @private\n */\n _this.defaultValue = '';\n /**\n * @private\n */\n _this.format = '';\n return _this;\n }\n /**\n * @private\n */\n TextFormField.prototype.clone = function () {\n var textForm = new TextFormField();\n textForm.type = this.type;\n textForm.name = this.name;\n textForm.enabled = this.enabled;\n textForm.helpText = this.helpText;\n textForm.statusText = this.statusText;\n textForm.maxLength = this.maxLength;\n textForm.defaultValue = this.defaultValue;\n textForm.format = this.format;\n return textForm;\n };\n /**\n * @private\n */\n TextFormField.prototype.getFormFieldInfo = function () {\n var textFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n format: this.format,\n helpText: this.helpText,\n maxLength: this.maxLength,\n type: this.type\n };\n return textFormField;\n };\n /**\n * @private\n */\n TextFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.format)) {\n this.format = info.format;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.maxLength)) {\n this.maxLength = info.maxLength;\n }\n if (!isNullOrUndefined(info.type)) {\n this.type = info.type;\n }\n };\n return TextFormField;\n}(FormField));\nexport { TextFormField };\n/**\n * @private\n */\nvar CheckBoxFormField = /** @class */ (function (_super) {\n __extends(CheckBoxFormField, _super);\n function CheckBoxFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sizeType = 'Auto';\n /**\n * @private\n */\n _this.size = 11;\n /**\n * @private\n */\n _this.defaultValue = false;\n /**\n * @private\n */\n _this.checked = false;\n return _this;\n }\n /**\n * @private\n */\n CheckBoxFormField.prototype.clone = function () {\n var checkBoxForm = new CheckBoxFormField();\n checkBoxForm.name = this.name;\n checkBoxForm.enabled = this.enabled;\n checkBoxForm.helpText = this.helpText;\n checkBoxForm.statusText = this.statusText;\n checkBoxForm.sizeType = this.sizeType;\n checkBoxForm.size = this.size;\n checkBoxForm.defaultValue = this.defaultValue;\n checkBoxForm.checked = this.checked;\n return checkBoxForm;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.getFormFieldInfo = function () {\n var checkBoxFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n helpText: this.helpText,\n size: this.size,\n sizeType: this.sizeType\n };\n return checkBoxFormField;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n this.checked = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.size)) {\n this.size = info.size;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.sizeType)) {\n this.sizeType = info.sizeType;\n }\n };\n return CheckBoxFormField;\n}(FormField));\nexport { CheckBoxFormField };\n/**\n * @private\n */\nvar DropDownFormField = /** @class */ (function (_super) {\n __extends(DropDownFormField, _super);\n function DropDownFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.dropdownItems = [];\n /**\n * @private\n */\n _this.selectedIndex = 0;\n return _this;\n }\n /**\n * @private\n */\n DropDownFormField.prototype.clone = function () {\n var dropDown = new DropDownFormField();\n dropDown.name = this.name;\n dropDown.enabled = this.enabled;\n dropDown.helpText = this.helpText;\n dropDown.statusText = this.statusText;\n dropDown.dropdownItems = this.dropdownItems.slice();\n dropDown.selectedIndex = this.selectedIndex;\n return dropDown;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.getFormFieldInfo = function () {\n var dropDownFormField = {\n dropdownItems: this.dropdownItems.slice(),\n enabled: this.enabled,\n helpText: this.helpText\n };\n return dropDownFormField;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.dropdownItems)) {\n this.dropdownItems = info.dropdownItems;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n };\n return DropDownFormField;\n}(FormField));\nexport { DropDownFormField };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.ignoreOnceItems = [];\n /**\n * @private\n */\n _this.istextCombined = false;\n _this.errorCollection = [];\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var textEle = new TextElementBox();\n textEle.characterFormat.copyFormat(this.characterFormat);\n textEle.text = this.text;\n if (this.margin) {\n textEle.margin = this.margin.clone();\n }\n textEle.baselineOffset = this.baselineOffset;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n textEle.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n textEle.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n textEle.removedIds = this.removedIds.slice();\n }\n }\n textEle.width = this.width;\n textEle.height = this.height;\n if (this.contentControlProperties) {\n textEle.contentControlProperties = this.contentControlProperties;\n }\n return textEle;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar Footnote = /** @class */ (function () {\n function Footnote() {\n this.separator = [];\n this.continuationNotice = [];\n this.continuationSeparator = [];\n }\n /**\n * @private\n */\n Footnote.prototype.clear = function () {\n this.separator = [];\n this.continuationSeparator = [];\n this.continuationNotice = [];\n };\n Footnote.prototype.destroy = function () {\n this.separator = [];\n this.continuationSeparator = [];\n this.continuationNotice = [];\n };\n return Footnote;\n}());\nexport { Footnote };\n/**\n * @private\n */\nvar FootnoteElementBox = /** @class */ (function (_super) {\n __extends(FootnoteElementBox, _super);\n function FootnoteElementBox() {\n var _this = _super.call(this) || this;\n _this.isLayout = false;\n _this.bodyWidget = new BodyWidget();\n _this.bodyWidget.footNoteReference = _this;\n return _this;\n }\n FootnoteElementBox.prototype.clone = function () {\n var span = new FootnoteElementBox();\n span.text = this.text;\n span.characterFormat.copyFormat(this.characterFormat);\n span.height = this.height;\n span.footnoteType = this.footnoteType;\n span.width = this.width;\n span.symbolCode = this.symbolCode;\n span.bodyWidget.childWidgets = this.bodyWidget.childWidgets;\n span.bodyWidget.page = this.bodyWidget.page;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n return span;\n };\n FootnoteElementBox.prototype.getLength = function () {\n return 1;\n };\n FootnoteElementBox.prototype.destroy = function () {\n this.symbolCode = '';\n this.symbolFontName = '';\n this.customMarker = '';\n this.bodyWidget = undefined;\n };\n return FootnoteElementBox;\n}(TextElementBox));\nexport { FootnoteElementBox };\n/**\n * @private\n */\nvar ErrorTextElementBox = /** @class */ (function (_super) {\n __extends(ErrorTextElementBox, _super);\n function ErrorTextElementBox() {\n var _this = _super.call(this) || this;\n _this.startIn = undefined;\n _this.endIn = undefined;\n return _this;\n }\n Object.defineProperty(ErrorTextElementBox.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ErrorTextElementBox.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ErrorTextElementBox.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return ErrorTextElementBox;\n}(TextElementBox));\nexport { ErrorTextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var fieldSpan = new FieldTextElementBox();\n fieldSpan.characterFormat.copyFormat(this.characterFormat);\n fieldSpan.fieldBegin = this.fieldBegin;\n fieldSpan.text = this.text;\n if (this.margin) {\n fieldSpan.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChanges = this.revisions[i];\n fieldSpan.revisions.push(revisionChanges.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n fieldSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n fieldSpan.removedIds = this.removedIds.slice();\n }\n }\n fieldSpan.width = this.width;\n fieldSpan.height = this.height;\n return fieldSpan;\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var tabSpan = new TabElementBox();\n tabSpan.characterFormat.copyFormat(this.characterFormat);\n tabSpan.tabText = this.tabText;\n tabSpan.tabLeader = this.tabLeader;\n tabSpan.text = this.text;\n if (this.margin) {\n tabSpan.margin = this.margin.clone();\n }\n tabSpan.width = this.width;\n tabSpan.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n tabSpan.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n tabSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n tabSpan.removedIds = this.removedIds.slice();\n }\n }\n return tabSpan;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n if (this.contentControlProperties) {\n span.contentControlProperties = this.contentControlProperties;\n }\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ContentControl = /** @class */ (function (_super) {\n __extends(ContentControl, _super);\n function ContentControl(widgetType) {\n var _this = _super.call(this) || this;\n _this.contentControlWidgetType = widgetType;\n _this.contentControlProperties = new ContentControlProperties(widgetType);\n return _this;\n }\n /**\n * @private\n */\n ContentControl.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ContentControl.prototype.clone = function () {\n var span = new ContentControl(this.contentControlWidgetType);\n span.characterFormat.copyFormat(this.characterFormat);\n span.contentControlProperties = this.contentControlProperties;\n span.contentControlWidgetType = this.contentControlWidgetType;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChange = this.revisions[i];\n span.revisions.push(revisionChange.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n span.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n span.removedIds = this.removedIds.slice();\n }\n }\n span.type = this.type;\n span.width = this.width;\n span.height = this.height;\n span.reference = this.reference;\n return span;\n };\n /**\n * @private\n */\n ContentControl.prototype.destroy = function () {\n this.contentControlProperties = undefined;\n this.contentControlWidgetType = undefined;\n _super.prototype.destroy.call(this);\n };\n return ContentControl;\n}(ElementBox));\nexport { ContentControl };\n/**\n * @private\n */\n/**\n * @private\n */\nvar ContentControlProperties = /** @class */ (function () {\n function ContentControlProperties(widgetType) {\n /**\n * @private\n */\n this.contentControlListItems = [];\n this.contentControlWidgetType = widgetType;\n this.characterFormat = new WCharacterFormat();\n }\n /**\n * @private\n */\n ContentControlProperties.prototype.destroy = function () {\n this.lockContentControl = undefined;\n this.lockContents = undefined;\n this.tag = undefined;\n this.color = undefined;\n this.title = undefined;\n this.appearance = undefined;\n this.type = undefined;\n this.hasPlaceHolderText = undefined;\n this.multiline = undefined;\n this.isTemporary = undefined;\n this.isChecked = undefined;\n this.dateCalendarType = undefined;\n this.dateStorageFormat = undefined;\n this.dateDisplayLocale = undefined;\n this.dateDisplayFormat = undefined;\n };\n /**\n * @private\n */\n ContentControlProperties.prototype.clone = function () {\n var span = new ContentControlProperties(this.contentControlWidgetType);\n span.lockContentControl = this.lockContentControl;\n span.lockContents = this.lockContents;\n span.tag = this.tag;\n span.color = this.color;\n span.title = this.title;\n span.appearance = this.appearance;\n span.type = this.type;\n span.hasPlaceHolderText = this.hasPlaceHolderText;\n span.multiline = this.multiline;\n span.isTemporary = this.isTemporary;\n span.isChecked = this.isChecked;\n span.dateCalendarType = this.dateCalendarType;\n span.dateStorageFormat = this.dateStorageFormat;\n span.dateDisplayLocale = this.dateDisplayLocale;\n span.dateDisplayFormat = this.dateDisplayFormat;\n if (this.contentControlListItems.length > 0) {\n for (var i = 0; i < this.contentControlListItems.length; i++) {\n span.contentControlListItems.push(this.contentControlListItems[i].clone());\n }\n }\n if (this.checkedState) {\n span.checkedState = this.checkedState.clone();\n }\n if (this.uncheckedState) {\n span.uncheckedState = this.uncheckedState.clone();\n }\n if (this.xmlMapping) {\n span.xmlMapping = this.xmlMapping.clone();\n }\n return span;\n };\n return ContentControlProperties;\n}());\nexport { ContentControlProperties };\n/**\n * @private\n */\nvar ContentControlListItems = /** @class */ (function () {\n function ContentControlListItems() {\n }\n /**\n * @private\n */\n ContentControlListItems.prototype.destroy = function () {\n this.displayText = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n ContentControlListItems.prototype.clone = function () {\n var span = new ContentControlListItems();\n span.displayText = this.displayText;\n span.value = this.value;\n return span;\n };\n return ContentControlListItems;\n}());\nexport { ContentControlListItems };\n/**\n * @private\n */\nvar CheckBoxState = /** @class */ (function () {\n function CheckBoxState() {\n }\n /**\n * @private\n */\n CheckBoxState.prototype.destroy = function () {\n this.font = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n CheckBoxState.prototype.clone = function () {\n var span = new CheckBoxState();\n span.font = this.font;\n span.value = this.value;\n return span;\n };\n return CheckBoxState;\n}());\nexport { CheckBoxState };\n/**\n * @private\n */\nvar XmlMapping = /** @class */ (function () {\n function XmlMapping() {\n }\n /**\n * @private\n */\n XmlMapping.prototype.destroy = function () {\n this.isMapped = undefined;\n this.isWordMl = undefined;\n this.prefixMapping = undefined;\n this.xPath = undefined;\n this.storeItemId = undefined;\n this.customXmlPart = undefined;\n };\n /**\n * @private\n */\n XmlMapping.prototype.clone = function () {\n var span = new XmlMapping();\n span.isMapped = this.isMapped;\n span.isWordMl = this.isWordMl;\n span.prefixMapping = this.prefixMapping;\n span.xPath = this.xPath;\n span.storeItemId = this.storeItemId;\n if (this.customXmlPart) {\n span.customXmlPart = this.customXmlPart.clone();\n }\n return span;\n };\n return XmlMapping;\n}());\nexport { XmlMapping };\n/**\n * @private\n */\nvar CustomXmlPart = /** @class */ (function () {\n function CustomXmlPart() {\n }\n /**\n * @private\n */\n CustomXmlPart.prototype.destroy = function () {\n this.id = undefined;\n this.xml = undefined;\n };\n /**\n * @private\n */\n CustomXmlPart.prototype.clone = function () {\n var span = new CustomXmlPart();\n span.id = this.id;\n span.xml = this.xml;\n return span;\n };\n return CustomXmlPart;\n}());\nexport { CustomXmlPart };\n/**\n * @private\n */\nvar ShapeCommon = /** @class */ (function (_super) {\n __extends(ShapeCommon, _super);\n function ShapeCommon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.name = '';\n /**\n * @private\n */\n _this.alternativeText = '';\n /**\n * @private\n */\n _this.title = '';\n return _this;\n }\n /**\n *\n * @private\n */\n ShapeCommon.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ShapeCommon.prototype.clone = function () {\n var shape = new ShapeElementBox();\n return shape;\n };\n return ShapeCommon;\n}(ElementBox));\nexport { ShapeCommon };\n/**\n * @private\n */\nvar ShapeBase = /** @class */ (function (_super) {\n __extends(ShapeBase, _super);\n function ShapeBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.verticalPosition = 0;\n /**\n * @private\n */\n _this.horizontalPosition = 0;\n /**\n * @private\n */\n _this.textWrappingStyle = 'Inline';\n /**\n * @private\n */\n _this.distanceBottom = 0;\n /**\n * @private\n */\n _this.distanceLeft = 0;\n /**\n * @private\n */\n _this.distanceRight = 0;\n /**\n * @private\n */\n _this.distanceTop = 0;\n return _this;\n }\n return ShapeBase;\n}(ShapeCommon));\nexport { ShapeBase };\n/**\n * @private\n */\nvar ShapeElementBox = /** @class */ (function (_super) {\n __extends(ShapeElementBox, _super);\n function ShapeElementBox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @private\n */\n ShapeElementBox.prototype.clone = function () {\n var shape = new ShapeElementBox();\n shape.characterFormat.copyFormat(this.characterFormat);\n shape.x = this.x;\n shape.y = this.y;\n shape.width = this.width;\n shape.height = this.height;\n shape.shapeId = this.shapeId;\n shape.name = this.name;\n shape.alternativeText = this.alternativeText;\n shape.title = this.title;\n shape.widthScale = this.widthScale;\n shape.heightScale = this.heightScale;\n shape.visible = this.visible;\n shape.verticalPosition = this.verticalPosition;\n shape.verticalAlignment = this.verticalAlignment;\n shape.verticalOrigin = this.verticalOrigin;\n shape.verticalRelativePercent = this.verticalRelativePercent;\n shape.horizontalPosition = this.horizontalPosition;\n shape.horizontalAlignment = this.horizontalAlignment;\n shape.horizontalOrigin = this.horizontalOrigin;\n shape.horizontalRelativePercent = this.horizontalRelativePercent;\n shape.zOrderPosition = this.zOrderPosition;\n shape.allowOverlap = this.allowOverlap;\n shape.textWrappingStyle = this.textWrappingStyle;\n shape.textWrappingType = this.textWrappingType;\n shape.distanceBottom = this.distanceBottom;\n shape.distanceLeft = this.distanceLeft;\n shape.distanceRight = this.distanceRight;\n shape.distanceTop = this.distanceTop;\n shape.layoutInCell = this.layoutInCell;\n shape.lockAnchor = this.lockAnchor;\n shape.autoShapeType = this.autoShapeType;\n if (this.lineFormat) {\n shape.lineFormat = this.lineFormat.clone();\n }\n if (this.fillFormat) {\n shape.fillFormat = this.fillFormat.clone();\n }\n if (this.textFrame) {\n shape.textFrame = this.textFrame.clone();\n shape.textFrame.containerShape = shape;\n }\n if (this.margin) {\n shape.margin = this.margin.clone();\n }\n return shape;\n };\n return ShapeElementBox;\n}(ShapeBase));\nexport { ShapeElementBox };\n/**\n * @private\n */\nvar TextFrame = /** @class */ (function (_super) {\n __extends(TextFrame, _super);\n function TextFrame() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.marginLeft = 0;\n /**\n * @private\n */\n _this.marginRight = 0;\n /**\n * @private\n */\n _this.marginTop = 0;\n /**\n * @private\n */\n _this.marginBottom = 0;\n return _this;\n }\n TextFrame.prototype.equals = function () {\n return false;\n };\n TextFrame.prototype.destroyInternal = function () {\n //return;\n };\n TextFrame.prototype.getHierarchicalIndex = function (index) {\n var line = this.containerShape.line;\n var offset = line.getOffset(this.containerShape, 0).toString();\n return line.getHierarchicalIndex(offset);\n };\n TextFrame.prototype.getTableCellWidget = function () {\n return undefined;\n };\n /**\n * @private\n */\n TextFrame.prototype.clone = function () {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = this.textVerticalAlignment;\n textFrame.marginBottom = this.marginBottom;\n textFrame.marginLeft = this.marginLeft;\n textFrame.marginRight = this.marginRight;\n textFrame.marginTop = this.marginTop;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n textFrame.childWidgets.push(block);\n block.index = i;\n block.containerWidget = textFrame;\n }\n return textFrame;\n };\n return TextFrame;\n}(Widget));\nexport { TextFrame };\n/**\n * @private\n */\nvar LineFormat = /** @class */ (function () {\n function LineFormat() {\n }\n /**\n * @private\n */\n LineFormat.prototype.clone = function () {\n var lineFormat = new LineFormat();\n lineFormat.lineFormatType = this.lineFormatType;\n lineFormat.color = this.color;\n lineFormat.weight = this.weight;\n lineFormat.dashStyle = this.dashStyle;\n lineFormat.line = this.line;\n return lineFormat;\n };\n return LineFormat;\n}());\nexport { LineFormat };\n/**\n * @private\n */\nvar FillFormat = /** @class */ (function () {\n function FillFormat() {\n }\n /**\n * @private\n */\n FillFormat.prototype.clone = function () {\n var fillFormat = new FillFormat();\n fillFormat.color = this.color;\n fillFormat.fill = this.fill;\n return fillFormat;\n };\n return FillFormat;\n}());\nexport { FillFormat };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n _this.crop = false;\n /**\n * @private\n */\n _this.left = 0;\n /**\n * @private\n */\n _this.top = 0;\n /**\n * @private\n */\n _this.right = 0;\n /**\n * @private\n */\n _this.bottom = 0;\n /**\n * @private\n */\n _this.isMetaFile = false;\n /**\n * @private\n */\n _this.isCompressed = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isCrop\", {\n /**\n * @private\n */\n get: function () {\n return this.crop;\n },\n set: function (value) {\n this.crop = value;\n if (value) {\n var right = 0;\n var bottom = 0;\n if (this.left !== 0) {\n this.cropX = (this.left * this.cropWidthScale) / 100;\n }\n else {\n this.cropX = 0;\n }\n if (this.top !== 0) {\n this.cropY = (this.top * this.cropHeightScale) / 100;\n }\n else {\n this.cropY = 0;\n }\n if (this.right !== 0) {\n right = (this.right * this.cropWidthScale) / 100;\n }\n if (this.bottom !== 0) {\n bottom = (this.bottom * this.cropHeightScale) / 100;\n }\n this.cropWidth = (this.cropWidthScale - (this.cropX + right));\n this.cropHeight = (this.cropHeightScale - (this.cropY + bottom));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n if (!isNullOrUndefined(value)) {\n this.element.src = this.imageStr;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.isMetaFile = this.isMetaFile;\n image.isCompressed = this.isCompressed;\n image.metaFileImageString = this.metaFileImageString;\n image.width = this.width;\n image.height = this.height;\n image.top = this.top;\n image.left = this.left;\n image.bottom = this.bottom;\n image.right = this.right;\n image.cropHeightScale = this.cropHeightScale;\n image.cropWidthScale = this.cropWidthScale;\n image.cropX = this.cropX;\n image.cropY = this.cropY;\n image.isCrop = this.isCrop;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n image.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n image.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n image.removedIds = this.removedIds.slice();\n }\n }\n image.name = this.name;\n image.alternativeText = this.alternativeText;\n image.title = this.title;\n image.visible = this.visible;\n image.widthScale = this.widthScale;\n image.heightScale = this.heightScale;\n image.verticalPosition = this.verticalPosition;\n image.verticalOrigin = this.verticalOrigin;\n image.verticalAlignment = this.verticalAlignment;\n image.horizontalPosition = this.horizontalPosition;\n image.horizontalOrigin = this.horizontalOrigin;\n image.horizontalAlignment = this.horizontalAlignment;\n image.allowOverlap = this.allowOverlap;\n image.textWrappingStyle = this.textWrappingStyle;\n image.textWrappingType = this.textWrappingType;\n image.layoutInCell = this.layoutInCell;\n image.zOrderPosition = this.zOrderPosition;\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ShapeBase));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar EditRangeEndElementBox = /** @class */ (function (_super) {\n __extends(EditRangeEndElementBox, _super);\n function EditRangeEndElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.editRangeStart = undefined;\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.destroy = function () {\n this.editRangeStart = undefined;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.clone = function () {\n var end = new EditRangeEndElementBox();\n end.editRangeStart = this.editRangeStart;\n end.editRangeId = this.editRangeId;\n return end;\n };\n return EditRangeEndElementBox;\n}(ElementBox));\nexport { EditRangeEndElementBox };\n/**\n * @private\n */\nvar EditRangeStartElementBox = /** @class */ (function (_super) {\n __extends(EditRangeStartElementBox, _super);\n function EditRangeStartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.columnFirst = -1;\n /**\n * @private\n */\n _this.columnLast = -1;\n /**\n * @private\n */\n _this.user = '';\n /**\n * @private\n */\n _this.group = '';\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.renderLockMark = function (currentUser, locale) {\n if (isNullOrUndefined(this.editRangeMark)) {\n var user = currentUser === this.user ? 'you' : this.user;\n this.editRangeMark = document.createElement('div');\n this.editRangeMark.style.display = 'none';\n this.editRangeMark.classList.add('e-de-lock-mark');\n var span = document.createElement('span');\n span.className = 'e-icons e-de-ctnr-lock';\n this.editRangeMark.appendChild(span);\n this.editRangeMark.title = locale.getConstant('This region is locked by') + ' ' + user;\n }\n if (this.line && isNullOrUndefined(this.editRangeMark.parentElement)) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n documentHelper.pageContainer.appendChild(this.editRangeMark);\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.removeEditRangeMark = function () {\n if (this.editRangeMark) {\n this.editRangeMark.parentElement.removeChild(this.editRangeMark);\n this.editRangeMark = undefined;\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.destroy = function () {\n this.user = undefined;\n this.columnFirst = undefined;\n this.columnLast = undefined;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.clone = function () {\n var start = new EditRangeStartElementBox();\n start.columnFirst = this.columnFirst;\n start.columnLast = this.columnLast;\n start.user = this.user;\n start.group = this.group;\n start.editRangeEnd = this.editRangeEnd;\n start.editRangeId = this.editRangeId;\n return start;\n };\n return EditRangeStartElementBox;\n}(ElementBox));\nexport { EditRangeStartElementBox };\n/**\n * @private\n */\nvar ChartElementBox = /** @class */ (function (_super) {\n __extends(ChartElementBox, _super);\n /**\n * @private\n */\n function ChartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.chartTitle = '';\n /**\n * @private\n */\n _this.chartType = '';\n /**\n * @private\n */\n _this.chartElement = undefined;\n /**\n * @private\n */\n _this.chartCategory = [];\n /**\n * @private\n */\n _this.chartSeries = [];\n _this.chartArea = new ChartArea();\n _this.chartPlotArea = new ChartArea();\n _this.chartTitleArea = new ChartTitleArea();\n _this.chartLegend = new ChartLegend();\n _this.chartPrimaryCategoryAxis = new ChartCategoryAxis();\n _this.chartPrimaryValueAxis = new ChartCategoryAxis();\n _this.chartDataTable = new ChartDataTable();\n return _this;\n }\n /**\n * @private\n */\n ChartElementBox.prototype.getLength = function () {\n return 1;\n };\n Object.defineProperty(ChartElementBox.prototype, \"title\", {\n /**\n * @private\n */\n get: function () {\n return this.chartTitle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartTitle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"type\", {\n /**\n * @private\n */\n get: function () {\n return this.chartType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartGapWidth\", {\n /**\n * @private\n */\n get: function () {\n return this.gapWidth;\n },\n /**\n * @private\n */\n set: function (value) {\n this.gapWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartOverlap\", {\n /**\n * @private\n */\n get: function () {\n return this.overlap;\n },\n /**\n * @private\n */\n set: function (value) {\n this.overlap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"targetElement\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.div)) {\n this.div = createElement('div');\n }\n return this.div;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"officeChart\", {\n /**\n * @private\n */\n get: function () {\n return this.officeChartInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n if (value) {\n this.officeChartInternal = value;\n this.officeChartInternal.chart.loaded = this.onChartLoaded.bind(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n ChartElementBox.prototype.onChartLoaded = function () {\n var _this = this;\n this.officeChart.convertChartToImage(this.officeChart.chart, this.width, this.height).then(function (dataURL) {\n _this.imageString = dataURL;\n });\n };\n /**\n * @private\n */\n ChartElementBox.prototype.clone = function () {\n var chart = new ChartElementBox();\n chart.chartTitle = this.chartTitle;\n chart.chartType = this.chartType;\n chart.height = this.height;\n chart.width = this.width;\n chart.gapWidth = this.gapWidth;\n chart.overlap = this.overlap;\n for (var i = 0; i < this.chartCategory.length; i++) {\n var chartCategory = this.chartCategory[i].clone();\n chart.chartCategory.push(chartCategory);\n }\n for (var i = 0; i < this.chartSeries.length; i++) {\n var series = this.chartSeries[i].clone();\n chart.chartSeries.push(series);\n }\n chart.chartArea = this.chartArea.clone();\n chart.chartPlotArea = this.chartPlotArea.clone();\n chart.chartLegend = this.chartLegend.clone();\n chart.chartTitleArea = this.chartTitleArea.clone();\n chart.chartPrimaryCategoryAxis = this.chartPrimaryCategoryAxis.clone();\n chart.chartPrimaryValueAxis = this.chartPrimaryValueAxis.clone();\n chart.chartDataTable = this.chartDataTable.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartElementBox.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.officeChartInternal) {\n this.officeChartInternal.chart.loaded = undefined;\n this.officeChartInternal.destroy();\n this.officeChartInternal = undefined;\n }\n if (this.div) {\n this.div = undefined;\n }\n this.chartTitle = undefined;\n this.chartType = undefined;\n this.chartArea = undefined;\n this.chartPlotArea = undefined;\n this.chartCategory = [];\n this.chartSeries = [];\n this.chartTitleArea = undefined;\n this.chartLegend = undefined;\n this.chartPrimaryCategoryAxis = undefined;\n this.chartPrimaryValueAxis = undefined;\n this.chartDataTable = undefined;\n this.chartElement = undefined;\n };\n return ChartElementBox;\n}(ImageElementBox));\nexport { ChartElementBox };\n/**\n * @private\n */\nvar ChartArea = /** @class */ (function () {\n function ChartArea() {\n }\n Object.defineProperty(ChartArea.prototype, \"chartForeColor\", {\n /**\n * @private\n */\n get: function () {\n return this.foreColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.foreColor = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartArea.prototype.clone = function () {\n var chart = new ChartArea();\n chart.foreColor = this.foreColor;\n return chart;\n };\n /**\n * @private\n */\n ChartArea.prototype.destroy = function () {\n this.foreColor = undefined;\n };\n return ChartArea;\n}());\nexport { ChartArea };\n/**\n * @private\n */\nvar ChartCategory = /** @class */ (function () {\n function ChartCategory() {\n /**\n * @private\n */\n this.categoryXName = '';\n /**\n * @private\n */\n this.chartData = [];\n }\n Object.defineProperty(ChartCategory.prototype, \"xName\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryXName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryXName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategory.prototype.clone = function () {\n var chart = new ChartCategory();\n chart.categoryXName = this.categoryXName;\n for (var i = 0; i < this.chartData.length; i++) {\n var chartData = this.chartData[i].clone();\n chart.chartData.push(chartData);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartCategory.prototype.destroy = function () {\n this.categoryXName = undefined;\n this.chartData = [];\n };\n return ChartCategory;\n}());\nexport { ChartCategory };\n/**\n * @private\n */\nvar ChartData = /** @class */ (function () {\n function ChartData() {\n }\n Object.defineProperty(ChartData.prototype, \"yAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.yValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.yValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"xAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.xValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.xValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"bubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartData.prototype.clone = function () {\n var chart = new ChartData();\n chart.yValue = this.yValue;\n chart.xValue = this.xValue;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartData.prototype.destroy = function () {\n this.xValue = undefined;\n this.yValue = undefined;\n this.size = undefined;\n };\n return ChartData;\n}());\nexport { ChartData };\n/**\n * @private\n */\nvar ChartLegend = /** @class */ (function () {\n /**\n * @private\n */\n function ChartLegend() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartLegend.prototype, \"chartLegendPostion\", {\n /**\n * @private\n */\n get: function () {\n return this.legendPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.legendPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLegend.prototype.clone = function () {\n var chart = new ChartLegend();\n chart.legendPostion = this.legendPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartLegend.prototype.destroy = function () {\n this.legendPostion = undefined;\n this.chartTitleArea = undefined;\n };\n return ChartLegend;\n}());\nexport { ChartLegend };\n/**\n * @private\n */\nvar ChartSeries = /** @class */ (function () {\n function ChartSeries() {\n /**\n * @private\n */\n this.chartDataFormat = [];\n /**\n * @private\n */\n this.trendLines = [];\n this.errorBar = new ChartErrorBar();\n this.dataLabels = new ChartDataLabels();\n this.seriesFormat = new ChartSeriesFormat();\n }\n Object.defineProperty(ChartSeries.prototype, \"seriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"firstSliceAngle\", {\n /**\n * @private\n */\n get: function () {\n return this.sliceAngle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.sliceAngle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"doughnutHoleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.holeSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.holeSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeries.prototype.clone = function () {\n var chart = new ChartSeries();\n chart.name = this.name;\n chart.sliceAngle = this.sliceAngle;\n chart.holeSize = this.holeSize;\n chart.errorBar = this.errorBar.clone();\n chart.dataLabels = this.dataLabels.clone();\n chart.seriesFormat = this.seriesFormat.clone();\n for (var i = 0; i < this.chartDataFormat.length; i++) {\n var format = (this.chartDataFormat[i].clone());\n chart.chartDataFormat.push(format);\n }\n for (var i = 0; i < this.trendLines.length; i++) {\n var trendLine = (this.trendLines[i].clone());\n chart.trendLines.push(trendLine);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartSeries.prototype.destroy = function () {\n this.name = undefined;\n this.errorBar = undefined;\n this.trendLines = undefined;\n this.chartDataFormat = [];\n };\n return ChartSeries;\n}());\nexport { ChartSeries };\n/**\n * @private\n */\nvar ChartErrorBar = /** @class */ (function () {\n function ChartErrorBar() {\n }\n Object.defineProperty(ChartErrorBar.prototype, \"errorType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorDirection\", {\n /**\n * @private\n */\n get: function () {\n return this.direction;\n },\n /**\n * @private\n */\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorEndStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.endStyle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.endStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"numberValue\", {\n get: function () {\n return this.errorValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.errorValue = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartErrorBar.prototype.clone = function () {\n var chart = new ChartErrorBar();\n chart.type = this.type;\n chart.errorDirection = this.errorDirection;\n chart.endStyle = this.endStyle;\n chart.errorValue = this.errorValue;\n return chart;\n };\n /**\n * @private\n */\n ChartErrorBar.prototype.destroy = function () {\n this.type = undefined;\n this.errorDirection = undefined;\n this.endStyle = undefined;\n };\n return ChartErrorBar;\n}());\nexport { ChartErrorBar };\n/**\n * @private\n */\nvar ChartSeriesFormat = /** @class */ (function () {\n function ChartSeriesFormat() {\n }\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.style;\n },\n /**\n * @private\n */\n set: function (value) {\n this.style = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"numberValue\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeriesFormat.prototype.clone = function () {\n var chart = new ChartSeriesFormat();\n chart.style = this.style;\n chart.color = this.color;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartSeriesFormat.prototype.destroy = function () {\n this.style = undefined;\n this.color = undefined;\n this.size = undefined;\n };\n return ChartSeriesFormat;\n}());\nexport { ChartSeriesFormat };\n/**\n * @private\n */\nvar ChartDataLabels = /** @class */ (function () {\n function ChartDataLabels() {\n }\n Object.defineProperty(ChartDataLabels.prototype, \"labelPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.position;\n },\n /**\n * @private\n */\n set: function (value) {\n this.position = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLegendKey\", {\n /**\n * @private\n */\n get: function () {\n return this.isLegend;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isLegend = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isBubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.isBubble;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBubble = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isCategoryName\", {\n /**\n * @private\n */\n get: function () {\n return this.isCategory;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isCategory = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isSeriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeries;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeries = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isValue\", {\n /**\n * @private\n */\n get: function () {\n return this.isValueEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isValueEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isPercentage\", {\n /**\n * @private\n */\n get: function () {\n return this.isPercentageEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isPercentageEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLeaderLines\", {\n /**\n * @private\n */\n get: function () {\n return this.showLeaderLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.showLeaderLines = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataLabels.prototype.clone = function () {\n var chart = new ChartDataLabels();\n chart.position = this.position;\n chart.name = this.name;\n chart.color = this.color;\n chart.size = this.size;\n chart.isBubble = this.isBubble;\n chart.isLegend = this.isLegend;\n chart.isCategory = this.isCategory;\n chart.isSeries = this.isSeries;\n chart.isValueEnabled = this.isValueEnabled;\n chart.isPercentageEnabled = this.isPercentageEnabled;\n chart.showLeaderLines = this.showLeaderLines;\n return chart;\n };\n /**\n * @private\n */\n ChartDataLabels.prototype.destroy = function () {\n this.position = undefined;\n };\n return ChartDataLabels;\n}());\nexport { ChartDataLabels };\n/**\n * @private\n */\nvar ChartTrendLines = /** @class */ (function () {\n function ChartTrendLines() {\n }\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"interceptValue\", {\n /**\n * @private\n */\n get: function () {\n return this.intercept;\n },\n /**\n * @private\n */\n set: function (value) {\n this.intercept = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"forwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.forward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.forward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"backwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.backward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.backward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayRSquared\", {\n /**\n * @private\n */\n get: function () {\n return this.displayRSquared;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayRSquared = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayEquation\", {\n /**\n * @private\n */\n get: function () {\n return this.displayEquation;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayEquation = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTrendLines.prototype.clone = function () {\n var chart = new ChartTrendLines();\n chart.type = this.type;\n chart.name = this.name;\n chart.forward = this.forward;\n chart.backward = this.backward;\n chart.intercept = this.intercept;\n chart.displayEquation = this.displayEquation;\n chart.displayRSquared = this.displayRSquared;\n return chart;\n };\n /**\n * @private\n */\n ChartTrendLines.prototype.destroy = function () {\n this.type = undefined;\n this.name = undefined;\n this.forward = undefined;\n this.backward = undefined;\n };\n return ChartTrendLines;\n}());\nexport { ChartTrendLines };\n/**\n * @private\n */\nvar ChartTitleArea = /** @class */ (function () {\n /**\n * @private\n */\n function ChartTitleArea() {\n this.dataFormat = new ChartDataFormat();\n this.layout = new ChartLayout();\n }\n Object.defineProperty(ChartTitleArea.prototype, \"chartfontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTitleArea.prototype, \"chartFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTitleArea.prototype.clone = function () {\n var chart = new ChartTitleArea();\n chart.fontName = this.fontName;\n chart.fontSize = this.fontSize;\n chart.dataFormat = this.dataFormat.clone();\n chart.layout = this.layout.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartTitleArea.prototype.destroy = function () {\n this.fontName = undefined;\n this.fontSize = undefined;\n this.dataFormat = undefined;\n this.layout = undefined;\n };\n return ChartTitleArea;\n}());\nexport { ChartTitleArea };\n/**\n * @private\n */\nvar ChartDataFormat = /** @class */ (function () {\n /**\n * @private\n */\n function ChartDataFormat() {\n this.fill = new ChartFill();\n this.line = new ChartFill();\n }\n /**\n * @private\n */\n ChartDataFormat.prototype.clone = function () {\n var chart = new ChartDataFormat();\n chart.fill = this.fill.clone();\n chart.line = this.line.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartDataFormat.prototype.destroy = function () {\n this.fill = undefined;\n this.line = undefined;\n };\n return ChartDataFormat;\n}());\nexport { ChartDataFormat };\n/**\n * @private\n */\nvar ChartFill = /** @class */ (function () {\n function ChartFill() {\n }\n Object.defineProperty(ChartFill.prototype, \"color\", {\n /**\n * @private\n */\n get: function () {\n return this.fillColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartFill.prototype, \"rgb\", {\n /**\n * @private\n */\n get: function () {\n return this.fillRGB;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillRGB = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartFill.prototype.clone = function () {\n var chart = new ChartFill();\n chart.fillColor = this.fillColor;\n chart.fillRGB = this.fillRGB;\n return chart;\n };\n /**\n * @private\n */\n ChartFill.prototype.destroy = function () {\n this.fillColor = undefined;\n this.fillRGB = undefined;\n };\n return ChartFill;\n}());\nexport { ChartFill };\n/**\n * @private\n */\nvar ChartLayout = /** @class */ (function () {\n function ChartLayout() {\n }\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutLeft\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutX;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutTop\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutY;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutY = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLayout.prototype.clone = function () {\n var chart = new ChartLayout();\n chart.layoutX = this.layoutX;\n chart.layoutY = this.layoutY;\n return chart;\n };\n /**\n * @private\n */\n ChartLayout.prototype.destroy = function () {\n this.layoutX = undefined;\n this.layoutY = undefined;\n };\n return ChartLayout;\n}());\nexport { ChartLayout };\n/**\n * @private\n */\nvar ChartCategoryAxis = /** @class */ (function () {\n function ChartCategoryAxis() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.majorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.minorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"tickPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.tickLabelPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tickLabelPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMinorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMinorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMajorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMajorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"interval\", {\n /**\n * @private\n */\n get: function () {\n return this.majorUnit;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorUnit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"max\", {\n /**\n * @private\n */\n get: function () {\n return this.maximumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.maximumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"min\", {\n /**\n * @private\n */\n get: function () {\n return this.minimumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minimumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisTitle\", {\n /**\n * @private\n */\n get: function () {\n return this.title;\n },\n /**\n * @private\n */\n set: function (value) {\n this.title = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisType\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryNumberFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.numberFormat;\n },\n /**\n * @private\n */\n set: function (value) {\n this.numberFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategoryAxis.prototype.clone = function () {\n var chart = new ChartCategoryAxis();\n chart.title = this.title;\n chart.categoryType = this.categoryType;\n chart.numberFormat = this.numberFormat;\n chart.fontSize = this.fontSize;\n chart.fontName = this.fontName;\n chart.hasMajorGridLines = this.hasMajorGridLines;\n chart.hasMinorGridLines = this.hasMinorGridLines;\n chart.minimumValue = this.minimumValue;\n chart.maximumValue = this.maximumValue;\n chart.majorUnit = this.majorUnit;\n chart.majorTickMark = this.majorTickMark;\n chart.minorTickMark = this.minorTickMark;\n chart.tickLabelPostion = this.tickLabelPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartCategoryAxis.prototype.destroy = function () {\n this.title = undefined;\n this.categoryType = undefined;\n this.numberFormat = undefined;\n this.chartTitleArea = undefined;\n this.minimumValue = undefined;\n this.maximumValue = undefined;\n this.fontSize = undefined;\n this.fontName = undefined;\n this.majorUnit = undefined;\n this.majorTickMark = undefined;\n this.minorTickMark = undefined;\n this.tickLabelPostion = undefined;\n };\n return ChartCategoryAxis;\n}());\nexport { ChartCategoryAxis };\n/**\n * @private\n */\nvar ChartDataTable = /** @class */ (function () {\n function ChartDataTable() {\n }\n Object.defineProperty(ChartDataTable.prototype, \"showSeriesKeys\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeriesKeys;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeriesKeys = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasHorzBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isHorzBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHorzBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasVertBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isVertBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isVertBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasBorders\", {\n /**\n * @private\n */\n get: function () {\n return this.isBorders;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataTable.prototype.clone = function () {\n var chart = new ChartDataTable();\n chart.isSeriesKeys = this.isSeriesKeys;\n chart.isHorzBorder = this.isHorzBorder;\n chart.isVertBorder = this.isVertBorder;\n chart.isBorders = this.isBorders;\n return chart;\n };\n /**\n * @private\n */\n ChartDataTable.prototype.destroy = function () {\n this.isSeriesKeys = undefined;\n this.isHorzBorder = undefined;\n this.isVertBorder = undefined;\n this.isBorders = undefined;\n };\n return ChartDataTable;\n}());\nexport { ChartDataTable };\n/**\n * @private\n */\nvar CommentCharacterElementBox = /** @class */ (function (_super) {\n __extends(CommentCharacterElementBox, _super);\n function CommentCharacterElementBox(type) {\n var _this = _super.call(this) || this;\n _this.commentType = 0;\n _this.commentId = '';\n _this.commentType = type;\n return _this;\n }\n Object.defineProperty(CommentCharacterElementBox.prototype, \"comment\", {\n get: function () {\n return this.commentInternal;\n },\n set: function (value) {\n this.commentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentCharacterElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentCharacterElementBox.prototype.clone = function () {\n var comment = new CommentCharacterElementBox(this.commentType);\n comment.commentId = this.commentId;\n comment.commentType = this.commentType;\n return comment;\n };\n CommentCharacterElementBox.prototype.renderCommentMark = function () {\n if (this.commentType === 0 && isNullOrUndefined(this.commentMark)) {\n this.commentMark = document.createElement('div');\n this.commentMark.style.display = 'none';\n this.commentMark.classList.add('e-de-cmt-mark');\n var span = document.createElement('span');\n span.classList.add('e-icons');\n span.classList.add('e-de-cmt-mark-icon');\n this.commentMark.appendChild(span);\n }\n if (this.line && isNullOrUndefined(this.commentMark.parentElement)) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n documentHelper.pageContainer.appendChild(this.commentMark);\n this.commentMark.addEventListener('click', this.selectComment.bind(this));\n }\n };\n CommentCharacterElementBox.prototype.selectComment = function () {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n if (documentHelper.owner) {\n if (!documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n documentHelper.selectComment(this.comment);\n }\n else {\n documentHelper.owner.showComments = true;\n }\n }\n };\n CommentCharacterElementBox.prototype.removeCommentMark = function () {\n if (this.commentMark && this.commentMark.parentElement) {\n this.commentMark.removeEventListener('click', this.selectComment.bind(this));\n this.commentMark.parentElement.removeChild(this.commentMark);\n }\n };\n CommentCharacterElementBox.prototype.destroy = function () {\n if (this.commentMark) {\n this.removeCommentMark();\n }\n };\n return CommentCharacterElementBox;\n}(ElementBox));\nexport { CommentCharacterElementBox };\n/**\n * @private\n */\nvar CommentElementBox = /** @class */ (function (_super) {\n __extends(CommentElementBox, _super);\n function CommentElementBox(date) {\n var _this = _super.call(this, 0) || this;\n _this.authorIn = '';\n _this.initialIn = '';\n _this.done = false;\n _this.textIn = '';\n _this.isReply = false;\n _this.ownerComment = undefined;\n _this.createdDate = date;\n _this.replyComments = [];\n return _this;\n }\n Object.defineProperty(CommentElementBox.prototype, \"commentStart\", {\n get: function () {\n return this.commentStartIn;\n },\n set: function (value) {\n this.commentStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"commentEnd\", {\n get: function () {\n return this.commentEndIn;\n },\n set: function (value) {\n this.commentEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"author\", {\n get: function () {\n return this.authorIn;\n },\n set: function (value) {\n this.authorIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"initial\", {\n get: function () {\n return this.initialIn;\n },\n set: function (value) {\n this.initialIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"isResolved\", {\n get: function () {\n return this.done;\n },\n set: function (value) {\n this.done = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"date\", {\n get: function () {\n return this.createdDate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"text\", {\n get: function () {\n return this.textIn;\n },\n set: function (value) {\n this.textIn = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentElementBox.prototype.clone = function () {\n var comment = new CommentElementBox(this.date);\n comment.author = this.author;\n comment.initial = this.initial;\n comment.commentId = this.commentId;\n comment.replyComments = this.replyComments;\n comment.isResolved = this.isResolved;\n comment.text = this.text;\n return comment;\n };\n CommentElementBox.prototype.destroy = function () {\n this.ownerComment = undefined;\n };\n return CommentElementBox;\n}(CommentCharacterElementBox));\nexport { CommentElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page(documentHelper) {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidgetIn = undefined;\n /**\n * @private\n */\n this.footerWidgetIn = undefined;\n /**\n * @private\n */\n this.footnoteWidget = undefined;\n /**\n * @private\n */\n this.endnoteWidget = undefined;\n /**\n * @private\n */\n this.currentPageNum = 1;\n /**\n * @private\n */\n this.allowNextPageRendering = true;\n this.documentHelper = documentHelper;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"headerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.headerWidgetIn)) {\n if (this.headerWidgetIn.parentHeaderFooter) {\n return this.headerWidgetIn.parentHeaderFooter;\n }\n }\n return this.headerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.headerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"footerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.footerWidgetIn)) {\n if (this.footerWidgetIn.parentHeaderFooter) {\n return this.footerWidgetIn.parentHeaderFooter;\n }\n }\n return this.footerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.footerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.documentHelper.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.documentHelper.pages.length - 1) {\n return this.documentHelper.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidgetIn && !isNullOrUndefined(this.headerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.removeFieldInWidget(this.headerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editor.removeFieldInWidget(this.headerWidgetIn, false, true);\n }\n this.headerWidgetIn.destroy();\n this.headerWidget = undefined;\n }\n if (this.footerWidgetIn && !isNullOrUndefined(this.footerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.removeFieldInWidget(this.footerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editor.removeFieldInWidget(this.footerWidgetIn, false, true);\n }\n this.footerWidgetIn.destroy();\n this.footerWidgetIn = undefined;\n }\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n if (!isNullOrUndefined(this.documentHelper.pages)) {\n this.documentHelper.removePage(this, true);\n }\n }\n this.documentHelper = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, sizeInfo, offset, preferredWidthType) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Grid span > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (sizeInfo.minimumWordWidth > this.columns[columnSpan - 1].minimumWordWidth) {\n this.columns[columnSpan - 1].minimumWordWidth = sizeInfo.minimumWordWidth;\n }\n if (sizeInfo.maximumWordWidth > this.columns[columnSpan - 1].maximumWordWidth) {\n this.columns[columnSpan - 1].maximumWordWidth = sizeInfo.maximumWordWidth;\n }\n if (sizeInfo.minimumWidth > this.columns[columnSpan - 1].minimumWidth) {\n this.columns[columnSpan - 1].minimumWidth = sizeInfo.minimumWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n this.columns[columnSpan - 1].widthType = preferredWidthType;\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function (type) {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += type === 0 ? column.preferredWidth :\n type === 1 ? column.minimumWordWidth :\n type === 2 ? column.maximumWordWidth : column.minimumWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.autoFitColumn = function (containerWidth, preferredTableWidth, isAuto, isNestedTable, indent) {\n // Cell's preferred width should be considered until the table width fits to the container width.\n var maxTotal = 0;\n var minTotal = 0;\n // For preferred width set as 0 pixels (not auto), then minimum word width only need to be considered.\n // But currently there is no way to find any one of cell in particular column has 0 px preferred width set.\n // If all columns are set as 0 pixels, then this will work.\n var remainingWidthTotal = 0;\n var isAllColumnPointWidth = true;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // If preferred width of column is less than column minimum width and also column is empty, considered column preferred width\n if (column.minimumWordWidth === 0 && column.maximumWordWidth === 0 && column.minWidth === 0) {\n column.minimumWordWidth = column.preferredWidth;\n column.maximumWordWidth = column.preferredWidth;\n column.minWidth = column.preferredWidth;\n }\n if (column.widthType !== 'Point') {\n isAllColumnPointWidth = false;\n }\n var difference = 0;\n maxTotal += column.preferredWidth > column.maximumWordWidth ? column.preferredWidth : column.maximumWordWidth;\n minTotal += column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n var preferred = column.preferredWidth === 0 ? column.minimumWordWidth : column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n difference = column.maximumWordWidth - preferred;\n remainingWidthTotal += difference > 0 ? difference : 0;\n }\n // Try to fit maximum word width to match preferredTableWidth.\n if (maxTotal <= preferredTableWidth) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n continue;\n }\n if (column.preferredWidth < column.maximumWordWidth) {\n // if (isNestedTable) {\n // column.preferredWidth = column.minimumWidth + column.minimumWordWidth;\n // } else {\n column.preferredWidth = column.maximumWordWidth;\n //}\n }\n }\n // If the width is defined for table(cells undefined) then fit the columns to preferred table width using FitColumns.\n if (!isAuto) {\n this.fitColumns(containerWidth, preferredTableWidth, isAuto);\n }\n }\n else {\n // If the table preferred table width is set, then check its greater than total minimum word width. \n // If yes then set table preferred table width as container width. Else, check whether the total minimum word width is less than container width.\n // If yes, then set total minimum word width as container width. Else, set the container width to container width.\n if (!isAuto) {\n //let totalMinimumWordWidth: number = this.getTotalWidth(1);\n //if (preferredTableWidth > totalMinimumWordWidth && totalMinimumWordWidth < containerWidth) {\n var considerMinAsTableWidth = false;\n if (preferredTableWidth < minTotal && minTotal + (isNullOrUndefined(indent) ? 0 : indent) < containerWidth) {\n considerMinAsTableWidth = true;\n }\n this.fitColumns(containerWidth, considerMinAsTableWidth ? minTotal : preferredTableWidth, isAuto);\n return;\n //}\n //containerWidth = preferredTableWidth < totalMinimumWordWidth ? totalMinimumWordWidth < containerWidth ? totalMinimumWordWidth : containerWidth : preferredTableWidth;\n }\n // Try to fit minimum word width to match preferredTableWidth or containerWidth.\n if (minTotal <= preferredTableWidth || minTotal <= containerWidth) {\n var availableWidth = containerWidth > preferredTableWidth ? containerWidth : preferredTableWidth;\n availableWidth = availableWidth - minTotal;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n continue;\n }\n if (column.preferredWidth === 0) {\n column.preferredWidth = column.minimumWordWidth;\n }\n else {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n }\n var difference = column.maximumWordWidth - column.preferredWidth;\n difference = difference > 0 ? difference : 0;\n var factor = availableWidth * (difference / remainingWidthTotal);\n column.preferredWidth += isNaN(factor) ? 0 : factor;\n }\n }\n else {\n // Try to fit minimum width for each column and allot remaining space to columns based on their minimum word width.\n var totalMinimumWordWidth = this.getTotalWidth(1);\n var totalMinWidth = this.getTotalWidth(3);\n var totalPreferredWidth = this.getTotalWidth(0);\n if (totalMinWidth > 2112) {\n var cellWidth = 2112 / this.columns.length;\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].preferredWidth = cellWidth;\n }\n }\n else {\n var availableWidth = 0;\n if ((totalMinWidth < containerWidth) && ((containerWidth - totalMinWidth) >= 1) && !isAllColumnPointWidth) {\n availableWidth = containerWidth - totalMinWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // The factor depends of current column's minimum word width and total minimum word width.\n var factor = availableWidth * column.minimumWordWidth / totalMinimumWordWidth;\n factor = isNaN(factor) ? 0 : factor;\n column.preferredWidth = (column.minimumWidth == 0 ? 1 : column.minimumWidth) + factor;\n }\n // table width exceeds container width\n }\n else if (totalPreferredWidth > containerWidth) {\n var factor = containerWidth / totalPreferredWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = column.preferredWidth * factor;\n }\n }\n }\n }\n }\n this.tableWidth = this.getTotalWidth(0);\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth, indent) {\n if (isNullOrUndefined(indent)) {\n indent = 0;\n }\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // Neglected left indent value, because in preferred table width left indent value is neglected\n if (isAutoWidth) {\n totalColumnWidth -= indent;\n }\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = totalColumnWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth) {\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n if (this.columns[i - 1].endOffset === 0) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.getPreviousValidOffset(i - 2);\n }\n else {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n }\n };\n WTableHolder.prototype.getPreviousValidOffset = function (columnIndex) {\n for (var j = columnIndex; j >= 0; j--) {\n if (this.columns[j].endOffset !== 0) {\n return this.columns[j].endOffset;\n }\n }\n return 0;\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n/**\n * @private\n */\nvar ColumnSizeInfo = /** @class */ (function () {\n function ColumnSizeInfo() {\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n /**\n * @private\n */\n this.hasMinimumWidth = false;\n /**\n * @private\n */\n this.hasMinimumWordWidth = false;\n /**\n * @private\n */\n this.hasMaximumWordWidth = false;\n }\n return ColumnSizeInfo;\n}());\nexport { ColumnSizeInfo };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, classList, Browser } from '@syncfusion/ej2-base';\nimport { FieldElementBox, TextFormField, CheckBoxFormField, DropDownFormField } from './viewer/page';\nvar CONTEXTMENU_LOCK = '_contextmenu_lock';\nvar CONTEXTMENU_UNLOCK = '_contextmenu_unlock';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_ADD_COMMENT = '_add_comment';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_PROPERTIES = '_properties';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_AUTO_FIT = '_contextmenu_auto_fit';\nvar CONTEXTMENU_AUTO_FIT_TO_CONTENTS = '_contextmenu_auto_fit_contents';\nvar CONTEXTMENU_AUTO_FIT_TO_WINDOW = '_contextmenu_auto_fit_window';\nvar CONTEXTMENU_FIXED_COLUMN_WIDTH = '_contextmenu_fixed_column_width';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\nvar CONTEXTMENU_SPELLING_DIALOG = '_contextmenu_spelling_dialog';\nvar CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS = '_contextmenu_otherSuggestions_spellcheck_';\nvar CONTEXTMENU_NO_SUGGESTION = '_contextmenu_no_suggestion';\nvar CONTEXTMENU_ACCEPT_CHANGES = '_contextmenu_accept_changes';\nvar CONTEXTMENU_REJECT_CHANGES = '_contextmenu_reject_changes';\nvar CONTEXTMENU_NOTE_OPTIONS = '_contextmenu_note_options';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ContextMenu(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * @private\n */\n this.menuItems = [];\n /**\n * @private\n */\n this.customMenuItems = [];\n /**\n * @private\n */\n this.ids = [];\n this.spellContextItems = [];\n this.customItems = [];\n /**\n * Handles on context menu key pressed.\n * @param {MouseEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n if (_this.documentHelper.owner.isSpellCheck && _this.spellChecker.allowSpellCheckAndSuggestion) {\n event.preventDefault();\n _this.currentContextInfo = _this.spellChecker.findCurretText();\n var splittedSuggestion_1;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var allSuggestions_1;\n var exactData_1 = _this.spellChecker.manageSpecialCharacters(_this.currentContextInfo.text, undefined, true);\n if (!isNullOrUndefined(exactData_1) && _this.spellChecker.errorWordCollection.containsKey(exactData_1)) {\n _this.spellChecker.currentContextInfo = _this.currentContextInfo;\n if (_this.spellChecker.errorSuggestions.containsKey(exactData_1)) {\n allSuggestions_1 = _this.spellChecker.errorSuggestions.get(exactData_1).slice();\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n else {\n if (_this.spellChecker.enableOptimizedSpellCheck) {\n _this.spellChecker.callSpellChecker(_this.spellChecker.languageID, exactData_1, false, true, false, false).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n allSuggestions_1 = jsonObject.Suggestions;\n if (!isNullOrUndefined(allSuggestions_1)) {\n _this.spellChecker.errorSuggestions.add(exactData_1, allSuggestions_1.slice());\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n }\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n });\n }\n else {\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n };\n this.documentHelper = documentHelper;\n this.locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.locale.setLocale(this.documentHelper.owner.locale);\n this.initContextMenu(this.locale, this.documentHelper.owner.enableRtl);\n }\n Object.defineProperty(ContextMenu.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ContextMenu.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellChecker;\n },\n enumerable: true,\n configurable: true\n });\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n *\n * @param localValue Localize value.\n * @private\n */\n /* eslint-disable */\n ContextMenu.prototype.initContextMenu = function (localValue, isRtl) {\n var _this = this;\n var id = this.documentHelper.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.documentHelper.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.contentEditable = 'false';\n ul.style.width = 'auto';\n ul.id = this.documentHelper.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n this.menuItems = [\n {\n text: localValue.getConstant('Lock'),\n iconCss: 'e-icons e-de-ctnr-lock',\n id: id + CONTEXTMENU_LOCK\n },\n {\n text: localValue.getConstant('Unlock'),\n iconCss: 'e-icons',\n id: id + CONTEXTMENU_UNLOCK\n },\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('New Comment'),\n iconCss: 'e-icons e-de-cmt-add',\n id: id + CONTEXTMENU_ADD_COMMENT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Accept Changes'),\n iconCss: 'e-icons e-de-acceptchange',\n id: id + CONTEXTMENU_ACCEPT_CHANGES\n },\n {\n text: localValue.getConstant('Reject Changes'),\n iconCss: 'e-icons e-de-rejectchange',\n id: id + CONTEXTMENU_REJECT_CHANGES\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update-field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field') + '...',\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At') + ' 1',\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink') + '...',\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink') + '...',\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n text: localValue.getConstant('Properties'),\n iconCss: 'e-icons e-de-formproperties',\n id: id + CONTEXTMENU_PROPERTIES\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font') + '...',\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph') + '...',\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n text: localValue.getConstant('Notes Options') + '...',\n id: id + CONTEXTMENU_NOTE_OPTIONS\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Table Properties') + '...',\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-icons e-de-ctnr-mergecell'\n },\n {\n text: localValue.getConstant('AutoFit'),\n id: id + CONTEXTMENU_AUTO_FIT,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('AutoFit to Contents'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS,\n iconCss: 'e-icons e-de-icon-autofit e-de-autofit-contents'\n },\n {\n text: localValue.getConstant('AutoFit to Window'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_WINDOW,\n iconCss: 'e-icons e-de-icon-auto-fitwindow e-de-autofit-window'\n },\n {\n text: localValue.getConstant('Fixed Column Width'),\n id: id + CONTEXTMENU_FIXED_COLUMN_WIDTH,\n iconCss: 'e-icons e-de-icon-fixed-columnwidth e-de-fixed-column'\n }\n ]\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu',\n enableRtl: isRtl,\n items: this.addMenuItems(this.menuItems),\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n for (var index = 0; index < _this.customMenuItems.length; index++) {\n if (typeof _this.customMenuItems[index].id !== 'undefined') {\n _this.ids[index] = _this.customMenuItems[index].id;\n }\n else {\n _this.ids[index] = _this.customMenuItems[index + 1].id;\n }\n }\n _this.documentHelper.owner.fireCustomContextMenuBeforeOpen(_this.ids);\n if (_this.enableCustomContextMenu) {\n for (var index = 0; index < _this.menuItems.length; index++) {\n if (typeof _this.menuItems[index].id !== 'undefined') {\n document.getElementById(_this.menuItems[index].id).style.display = 'none';\n }\n else {\n document.getElementById(_this.menuItems[index - 1].id).nextSibling.style.display = 'none';\n }\n }\n }\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, [], ['e-de-cursor-animation']);\n _this.documentHelper.selection.showCaret();\n }\n };\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, ['e-de-cursor-animation'], []);\n _this.documentHelper.updateFocus();\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.documentHelper.owner.element.id;\n switch (item) {\n case id + CONTEXTMENU_LOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.lockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_UNLOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.unlockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_COPY:\n this.documentHelper.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.documentHelper.owner.editor.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.editorModule.pasteInternal(undefined);\n }\n break;\n case id + CONTEXTMENU_ADD_COMMENT:\n if (!this.documentHelper.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode) {\n this.documentHelper.owner.editor.isUserInsert = true;\n this.documentHelper.owner.editorModule.insertComment();\n this.documentHelper.owner.editor.isUserInsert = false;\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n var isReadOnly = this.documentHelper.owner.isReadOnlyMode;\n if (this.documentHelper.selection.isReferenceField() && (!isReadOnly ||\n (isReadOnly && this.documentHelper.protectionType === 'FormFieldsOnly'))) {\n this.documentHelper.selection.updateRefField();\n }\n else if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.documentHelper.owner.fontDialogModule) {\n this.documentHelper.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.documentHelper.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.documentHelper.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.documentHelper.owner.hyperlinkDialogModule) {\n this.documentHelper.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.documentHelper.owner.editor.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.documentHelper.owner.paragraphDialogModule) {\n this.documentHelper.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.documentHelper.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.documentHelper.owner.editor.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.documentHelper.owner.editor.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.documentHelper.owner.editor.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.documentHelper.owner.editor.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.documentHelper.owner.editor.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.documentHelper.owner.editor.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.documentHelper.owner.editor.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.documentHelper.owner.editor.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.documentHelper.owner.editorModule.applyContinueNumbering();\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.documentHelper.owner.editorModule.applyRestartNumbering(this.documentHelper.selection);\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS:\n this.documentHelper.owner.editor.autoFitTable('FitToContents');\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_WINDOW:\n this.documentHelper.owner.editor.autoFitTable('FitToWindow');\n break;\n case id + CONTEXTMENU_FIXED_COLUMN_WIDTH:\n this.documentHelper.owner.editor.autoFitTable('FixedColumnWidth');\n break;\n case id + CONTEXTMENU_SPELLING_DIALOG:\n var contextInfo = this.spellChecker.retriveText();\n this.currentContextInfo = null;\n this.documentHelper.owner.spellCheckDialog.show(contextInfo.text, contextInfo.element);\n break;\n case id + CONTEXTMENU_ACCEPT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(true);\n break;\n case id + CONTEXTMENU_REJECT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(false);\n break;\n case id + CONTEXTMENU_PROPERTIES:\n var inline = this.documentHelper.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n if (inline.formFieldData instanceof TextFormField) {\n this.documentHelper.owner.textFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof CheckBoxFormField) {\n this.documentHelper.owner.checkBoxFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof DropDownFormField) {\n this.documentHelper.owner.dropDownFormFieldDialogModule.show();\n }\n }\n break;\n case id + CONTEXTMENU_NOTE_OPTIONS:\n this.documentHelper.owner.showFootNotesDialog();\n break;\n default:\n var expectedData = this.documentHelper.owner.element.id + CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS;\n if (item.substring(0, expectedData.length) === expectedData) {\n var content = item.substring(item.lastIndexOf('_') + 1);\n this.callSelectedOption(content);\n break;\n }\n else {\n // fires customContextMenuSelect while selecting the added custom menu item\n this.documentHelper.owner.fireCustomContextMenuSelect(item);\n break;\n }\n }\n };\n /**\n * Method to call the selected item\n * @param {string} content\n */\n ContextMenu.prototype.callSelectedOption = function (content) {\n if (content === 'Add to Dictionary') {\n this.spellChecker.handleAddToDictionary();\n }\n else if (content === 'Ignore All') {\n this.spellChecker.handleIgnoreAllItems();\n }\n else {\n this.spellChecker.manageReplace(content);\n }\n };\n /**\n * To add and customize custom context menu\n * @param {MenuItemModel[]} items - To add custom menu item\n * @param {boolean} isEnable - To hide existing menu item and show custom menu item alone\n * @param {boolean} isBottom - To show the custom menu item in bottom of the existing item\n * @returns {void}\n */\n ContextMenu.prototype.addCustomMenu = function (items, isEnable, isBottom) {\n var menuItems = JSON.parse(JSON.stringify(items));\n this.destroy();\n if (this.spellContextItems.length === 0) {\n this.customItems = items;\n }\n for (var index = 0; index < menuItems.length; index++) {\n this.customMenuItems.push(menuItems[index]);\n this.customMenuItems[index].id = this.documentHelper.owner.element.id + this.customMenuItems[index].id;\n }\n this.enableCustomContextMenu = isEnable;\n this.enableCustomContextMenuBottom = isBottom;\n this.initContextMenu(this.locale);\n };\n /**\n * Context Menu Items.\n * @param {MenuItemModel[]} menuItems - To add MenuItem to context menu\n * @private\n */\n ContextMenu.prototype.addMenuItems = function (menuItems) {\n if (this.enableCustomContextMenuBottom) {\n return menuItems.concat(this.customMenuItems);\n }\n else {\n return this.customMenuItems.concat(menuItems);\n }\n };\n /**\n * Opens context menu.\n * @param {MouseEvent | TouchEvent} event\n */\n ContextMenu.prototype.showContextMenuOnSel = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n var xPos = 0;\n var yPos = 0;\n if (isTouch) {\n var point = this.documentHelper.getTouchOffsetValue(event);\n xPos = point.x;\n yPos = point.y;\n }\n else {\n yPos = ((Browser.isIE) ? event.clientY : event.y) + document.body.scrollTop + document.documentElement.scrollTop;\n xPos = ((Browser.isIE) ? event.clientX : event.x) + document.body.scrollLeft + document.documentElement.scrollLeft;\n }\n if (this.showHideElements(this.documentHelper.selection)) {\n if (isTouch) {\n this.documentHelper.isMouseDown = false;\n }\n this.contextMenuInstance.open(yPos, xPos);\n event.preventDefault();\n }\n };\n /**\n * Method to hide spell context items\n */\n ContextMenu.prototype.hideSpellContextItems = function () {\n if (this.spellContextItems.length > 0) {\n for (var i = 0; i < this.spellContextItems.length; i++) {\n var item = document.getElementById(this.documentHelper.owner.element.id + this.spellContextItems[i].id);\n if (!isNullOrUndefined(item)) {\n item.style.display = 'none';\n }\n }\n }\n };\n /**\n * Method to process suggestions to add in context menu\n * @param {any} allSuggestions\n * @param {string[]} splittedSuggestion\n * @param {MouseEvent} event\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.processSuggestions = function (allSuggestions, splittedSuggestion, event) {\n this.spellContextItems = this.constructContextmenu(allSuggestions, splittedSuggestion);\n this.addCustomMenu(this.spellContextItems);\n this.noSuggestion = document.getElementById(this.documentHelper.owner.element.id + CONTEXTMENU_NO_SUGGESTION);\n if (!isNullOrUndefined(this.noSuggestion)) {\n this.noSuggestion.style.display = 'block';\n classList(this.noSuggestion, ['e-disabled'], ['e-focused']);\n }\n this.showContextMenuOnSel(event);\n };\n /**\n * Method to add inline menu\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.constructContextmenu = function (allSuggestion, splittedSuggestion) {\n var contextMenuItems = this.customItems.length > 0 ? this.customItems.slice() : [];\n // classList(this.noSuggestion,['e-disabled'],[]);\n if (isNullOrUndefined(allSuggestion) || allSuggestion.length === 0) {\n contextMenuItems.push({ text: this.locale.getConstant('no suggestions'), id: CONTEXTMENU_NO_SUGGESTION, classList: ['e-focused'], iconCss: '' });\n }\n else {\n for (var i = 0; i < allSuggestion.length; i++) {\n contextMenuItems.push({ text: allSuggestion[i], id: CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS + allSuggestion[i], iconCss: '' });\n }\n }\n contextMenuItems.push({ separator: true, id: '_contextmenu_suggestion_separator' });\n if (!isNullOrUndefined(splittedSuggestion) && splittedSuggestion.length > 1) {\n contextMenuItems.push({ text: this.locale.getConstant('More Suggestion'), items: splittedSuggestion });\n contextMenuItems.push({ separator: true, id: '_contextmenu_moreSuggestion_separator' });\n }\n else {\n contextMenuItems.push({ text: this.locale.getConstant('Add to Dictionary'), id: '_contextmenu_otherSuggestions_spellcheck_Add to Dictionary', iconCss: '' });\n }\n contextMenuItems.push({ text: this.locale.getConstant('Ignore Once'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore Once', iconCss: '' });\n contextMenuItems.push({ text: this.locale.getConstant('Ignore All'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore All', iconCss: '' });\n contextMenuItems.push({ separator: true, id: '_contextmenu_change_separator' });\n contextMenuItems.push({ text: this.locale.getConstant('Spelling'), id: CONTEXTMENU_SPELLING_DIALOG, iconCss: 'e-icons e-de-spellcheck', items: [] });\n contextMenuItems.push({ separator: true, id: '_contextmenu_spelling_separator' });\n return contextMenuItems;\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n var owner = this.documentHelper.owner;\n var id = owner.element.id;\n var lock = document.getElementById(id + CONTEXTMENU_LOCK);\n var unlock = document.getElementById(id + CONTEXTMENU_UNLOCK);\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var properties = document.getElementById(id + CONTEXTMENU_PROPERTIES);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n var autoFitTable = document.getElementById(id + CONTEXTMENU_AUTO_FIT);\n var addComment = document.getElementById(id + CONTEXTMENU_ADD_COMMENT);\n var editNoteoptions = document.getElementById(id + CONTEXTMENU_NOTE_OPTIONS);\n if (!this.documentHelper.owner.enableLockAndEdit) {\n lock.style.display = 'none';\n unlock.style.display = 'none';\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.documentHelper.owner.currentUser)) {\n lock.style.display = 'none';\n unlock.style.display = 'block';\n if (this.documentHelper.selection.isSelectionInEditRegion()) {\n classList(unlock, ['e-blankicon'], ['e-disabled']);\n }\n else {\n classList(unlock, ['e-disabled', 'e-blankicon'], []);\n }\n }\n else {\n lock.style.display = 'block';\n if (this.documentHelper.owner.collaborativeEditingModule &&\n this.documentHelper.owner.collaborativeEditingModule.canLock()) {\n classList(unlock, ['e-disabled'], []);\n }\n else {\n classList(unlock, [], ['e-disabled']);\n }\n unlock.style.display = 'none';\n }\n }\n var isDialogHidden = false;\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n var acceptChange = document.getElementById(id + CONTEXTMENU_ACCEPT_CHANGES);\n var rejectChange = document.getElementById(id + CONTEXTMENU_REJECT_CHANGES);\n hyperlink.style.display = 'none';\n editNoteoptions.style.display = 'none';\n editNoteoptions.nextSibling.style.display = 'none';\n font.previousSibling.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n properties.style.display = 'none';\n mergeCells.style.display = 'none';\n autoFitTable.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n // (paragraph.nextSibling as HTMLElement).style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n var field = selection.getHyperlinkField();\n var isCrossRefField = false;\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n if (field instanceof FieldElementBox && selection.isReferenceField(field)) {\n isCrossRefField = true;\n }\n if (field instanceof FieldElementBox && isCrossRefField &&\n (this.documentHelper.protectionType === 'FormFieldsOnly' || !this.documentHelper.owner.isReadOnlyMode)) {\n updateField.style.display = 'block';\n }\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n var isSelectionEmpty = selection.isEmpty;\n classList(cut, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n classList(copy, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n var isHideComment = this.documentHelper.owner.isReadOnlyMode || this.documentHelper.owner.enableHeaderAndFooter || !this.documentHelper.owner.enableComment;\n addComment.style.display = isHideComment ? 'none' : 'block';\n if (this.documentHelper.isCommentOnlyMode) {\n addComment.style.display = 'block';\n }\n addComment.previousSibling.style.display = isHideComment ? 'none' : 'block';\n addComment.nextSibling.style.display = isHideComment ? 'none' : 'block';\n if (owner.isReadOnlyMode) {\n return true;\n }\n if (this.viewer && this.documentHelper.owner && this.documentHelper.owner.commentReviewPane &&\n this.documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n classList(addComment, ['e-disabled'], []);\n }\n else {\n classList(addComment, [], ['e-disabled']);\n }\n acceptChange.previousSibling.style.display = 'none';\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n classList(insertTable, ['e-blankicon'], []);\n classList(deleteTable, ['e-blankicon'], []);\n classList(editField, ['e-blankicon'], []);\n classList(autoFitTable, ['e-blankicon'], []);\n var enablePaste = (owner.enableLocalPaste && !isNullOrUndefined(owner.editor.copiedData));\n classList(paste, enablePaste ? [] : ['e-disabled'], enablePaste ? ['e-disabled'] : []);\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.selection.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n if (field instanceof FieldElementBox && !selection.isImageField() && !isCrossRefField) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n isDialogHidden = true;\n properties.style.display = 'none';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n font.previousSibling.style.display = 'block';\n isDialogHidden = true;\n }\n }\n if (selection.isFormField() && this.documentHelper.owner.enableFormField) {\n hyperlink.style.display = 'none';\n properties.style.display = 'block';\n }\n if (field instanceof FieldElementBox && isCrossRefField) {\n hyperlink.style.display = 'none';\n updateField.style.display = 'block';\n }\n }\n if (this.documentHelper.owner.selection.start.paragraph.isInsideTable\n && this.documentHelper.owner.selection.end.paragraph.isInsideTable) {\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.documentHelper.owner.editor.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n autoFitTable.style.display = this.documentHelper.selection.isTableSelected() ? 'block' : 'none';\n }\n if (this.documentHelper.owner.fontDialogModule) {\n font.style.display = 'block';\n }\n if (this.documentHelper.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n else if (!isDialogHidden && !this.documentHelper.owner.fontDialogModule && !isHideComment) {\n addComment.nextSibling.style.display = 'none';\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n font.previousSibling.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n if (this.documentHelper.selection.hasRevisions()) {\n acceptChange.previousSibling.style.display = this.documentHelper.owner.enableHeaderAndFooter ? 'none' : 'block';\n if (this.documentHelper.isTrackedOnlyMode) {\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n }\n else {\n acceptChange.style.display = 'block';\n rejectChange.style.display = 'block';\n }\n }\n if (this.documentHelper.selection.isinFootnote || this.documentHelper.selection.isinEndnote) {\n editNoteoptions.style.display = 'block';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n if (this.contextMenu && this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.contextMenuInstance = undefined;\n this.menuItems = [];\n this.customMenuItems = [];\n this.ids = [];\n this.customItems = [];\n this.spellContextItems = [];\n this.currentContextInfo = undefined;\n this.menuItems = undefined;\n this.customMenuItems = undefined;\n this.ids = undefined;\n this.customItems = undefined;\n this.locale = undefined;\n this.spellContextItems = undefined;\n this.documentHelper = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/* eslint-disable */\nimport { createElement, L10n, classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentCharacterElementBox } from '../../implementation/viewer/page';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Toolbar, Tab } from '@syncfusion/ej2-navigations';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Dictionary, beforeCommentActionEvent, commentEndEvent, commentBeginEvent, commentDeleteEvent } from '../../base/index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar CommentReviewPane = /** @class */ (function () {\n function CommentReviewPane(owner) {\n var _this = this;\n this.isNewComment = false;\n this.isUserClosed = false;\n /**\n * @private\n */\n this.selectedTab = 0;\n /**\n * @param {SelectEventArgs} arg - Specify the selection event args.\n * @returns {void}\n */\n this.onTabSelection = function (arg) {\n _this.selectedTab = arg.selectedIndex;\n if (_this.selectedTab === 1) {\n _this.owner.trackChangesPane.updateHeight();\n }\n else {\n _this.commentPane.updateHeight();\n }\n setTimeout(function () {\n _this.owner.resize();\n }, 10);\n };\n this.owner = owner;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.initReviewPane(localObj);\n this.parentPaneElement.style.display = 'none';\n }\n Object.defineProperty(CommentReviewPane.prototype, \"previousSelectedComment\", {\n get: function () {\n return this.previousSelectedCommentInt;\n },\n set: function (value) {\n if (!isNullOrUndefined(value) && value !== this.previousSelectedCommentInt) {\n if (this.commentPane.comments.containsKey(value)) {\n var commentStart = this.commentPane.getCommentStart(value);\n var commentMark = commentStart.commentMark;\n if (commentMark) {\n classList(commentMark, [], ['e-de-cmt-mark-selected']);\n this.commentPane.removeSelectionMark('e-de-cmt-selection');\n this.commentPane.removeSelectionMark('e-de-cmt-mark-selected');\n }\n var commentView = this.commentPane.comments.get(value);\n commentView.hideDrawer();\n for (var i = 0; i < value.replyComments.length; i++) {\n commentView = this.commentPane.comments.get(value.replyComments[i]);\n if (commentView) {\n commentView.hideDrawer();\n commentView.hideMenuItems();\n }\n }\n }\n }\n this.previousSelectedCommentInt = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentReviewPane.prototype.selectReviewTab = function (tab) {\n if (tab === 'Changes') {\n this.reviewTab.select(1);\n }\n else {\n this.reviewTab.select(0);\n }\n };\n CommentReviewPane.prototype.showHidePane = function (show, tab) {\n if (this.parentPaneElement) {\n this.updateTabHeaderWidth();\n if (show) {\n this.parentPaneElement.style.display = 'block';\n if (tab === 'Changes') {\n this.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: this.isCommentTabVisible, changes: true });\n this.reviewTab.select(1);\n }\n else {\n this.owner.trackChangesPane.isChangesTabVisible = false;\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible, isUserClosed: false });\n this.reviewTab.select(0);\n }\n this.owner.trackChangesPane.updateTrackChanges(show);\n this.commentPane.updateCommentStatus();\n }\n else {\n this.parentPaneElement.style.display = 'none';\n }\n }\n if (show) {\n this.enableDisableItems();\n this.commentPane.updateHeight();\n }\n if (this.owner) {\n this.owner.resize();\n }\n };\n CommentReviewPane.prototype.reviewPaneHelper = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.isUserClosed)) {\n if (args.isUserClosed !== this.isUserClosed) {\n this.isUserClosed = args.isUserClosed;\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n else {\n return;\n }\n }\n else {\n if (this.isUserClosed) {\n return;\n }\n }\n if (!isNullOrUndefined(args.comment) || !isNullOrUndefined(args.changes)) {\n if ((args.comment || args.changes)) {\n if (this.parentPaneElement.style.display === 'none') {\n this.parentPaneElement.style.display = 'block';\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n }\n else {\n this.parentPaneElement.style.display = 'none';\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n }\n };\n CommentReviewPane.prototype.updateTabHeaderWidth = function () {\n var reviewTabsEle = this.reviewTab.getRootElement().getElementsByClassName('e-tab-wrap');\n reviewTabsEle[0].style.padding = '0 8px';\n reviewTabsEle[1].style.padding = '0 8px';\n };\n CommentReviewPane.prototype.initReviewPane = function (localValue) {\n var reviewContainer = this.owner.documentHelper.optionsPaneContainer;\n reviewContainer.style.display = 'inline-flex';\n this.initPaneHeader(localValue);\n reviewContainer.appendChild(this.addReviewTab(localValue));\n this.initCommentPane();\n this.owner.on('reviewPane', this.reviewPaneHelper, this);\n };\n CommentReviewPane.prototype.addReviewTab = function (localValue) {\n var commentHeader = createElement('div', { innerHTML: localValue.getConstant('Comments') });\n var changesHeader = createElement('div', { innerHTML: localValue.getConstant('Changes') });\n this.parentPaneElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-review-pane' });\n this.element = createElement('div', { className: 'e-de-property-tab' });\n var items = [{ header: { text: commentHeader }, content: this.reviewPane }, { header: { text: changesHeader } }];\n this.reviewTab = new Tab({ items: items, selected: this.onTabSelection, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } });\n this.reviewTab.appendTo(this.element);\n if (this.owner.enableRtl) {\n this.reviewTab.enableRtl = true;\n }\n this.reviewTab.enablePersistence = true;\n this.parentPaneElement.appendChild(this.element);\n return this.parentPaneElement;\n };\n CommentReviewPane.prototype.initPaneHeader = function (localValue) {\n this.headerContainer = createElement('div');\n this.reviewPane = createElement('div', { className: 'e-de-cmt-pane' });\n if (this.owner.enableRtl) {\n classList(this.reviewPane, ['e-rtl'], []);\n }\n this.headerContainer.appendChild(this.initToolbar(localValue));\n this.reviewPane.appendChild(this.headerContainer);\n this.reviewPane.style.display = 'block';\n return this.reviewPane;\n };\n CommentReviewPane.prototype.closePane = function () {\n if (this.commentPane && this.commentPane.isEditMode) {\n if (!isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.value === '') {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.showComments = false;\n }\n else if (this.isNewComment || !isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.value !== '' ||\n !isNullOrUndefined(this.commentPane.currentEditingComment) && !this.commentPane.isInsertingReply &&\n this.commentPane.currentEditingComment.textArea.value !== this.commentPane.currentEditingComment.comment.text) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.confirmDialog = DialogUtility.confirm({\n title: localObj.getConstant('Un-posted comments'),\n content: localObj.getConstant('Discard Comment'),\n okButton: {\n text: 'Discard', click: this.discardButtonClick.bind(this)\n },\n cancelButton: {\n text: 'Cancel', click: this.closeDialogUtils.bind(this)\n },\n showCloseIcon: true,\n closeOnEscape: true,\n animationSettings: { effect: 'Zoom' },\n position: { X: 'Center', Y: 'Center' }\n });\n }\n else {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelEditing();\n this.owner.showComments = false;\n }\n }\n else {\n this.owner.showComments = false;\n //this.owner.showRevisions = false;\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.owner.documentHelper.currentSelectedRevision = undefined;\n this.owner.notify('reviewPane', { changes: false, comment: false, isUserClosed: true });\n }\n };\n CommentReviewPane.prototype.discardButtonClick = function () {\n if (this.commentPane.currentEditingComment) {\n var isNewComment = this.isNewComment;\n if (this.commentPane.currentEditingComment && this.commentPane.isInsertingReply) {\n this.commentPane.currentEditingComment.cancelReply();\n }\n else {\n this.commentPane.currentEditingComment.cancelEditing();\n if (isNewComment) {\n this.discardComment(this.commentPane.currentEditingComment.comment);\n }\n }\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.closeDialogUtils();\n this.owner.showComments = false;\n }\n };\n CommentReviewPane.prototype.closeDialogUtils = function () {\n this.confirmDialog.close();\n this.confirmDialog = undefined;\n };\n CommentReviewPane.prototype.initToolbar = function (localValue) {\n this.toolbarElement = createElement('div');\n this.toolbar = new Toolbar({\n items: [\n {\n prefixIcon: 'e-de-new-cmt e-de-cmt-tbr', tooltipText: localValue.getConstant('New Comment'),\n text: localValue.getConstant('New Comment'), click: this.insertComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Previous Comment'), click: this.navigatePreviousComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Next Comment'), click: this.navigateNextComment.bind(this)\n }\n ],\n enableRtl: this.owner.enableRtl\n });\n this.toolbar.appendTo(this.toolbarElement);\n return this.toolbarElement;\n };\n CommentReviewPane.prototype.insertComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.editor.isUserInsert = true;\n this.owner.editorModule.insertComment('');\n this.owner.editor.isUserInsert = false;\n }\n };\n CommentReviewPane.prototype.addComment = function (comment, isNewComment, selectComment) {\n this.isNewComment = isNewComment;\n this.selectReviewTab('Comments');\n this.owner.documentHelper.currentSelectedComment = comment;\n this.commentPane.insertComment(comment);\n if (!isNewComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment);\n }\n };\n CommentReviewPane.prototype.deleteComment = function (comment) {\n if (this.commentPane) {\n this.commentPane.deleteComment(comment);\n }\n };\n CommentReviewPane.prototype.selectComment = function (comment) {\n if (this.commentPane.isEditMode) {\n return;\n }\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (this.owner && this.owner.viewer && this.owner.documentHelper.currentSelectedComment !== comment) {\n this.owner.documentHelper.currentSelectedComment = comment;\n }\n this.commentPane.selectComment(comment);\n };\n CommentReviewPane.prototype.resolveComment = function (comment) {\n this.commentPane.resolveComment(comment);\n };\n CommentReviewPane.prototype.reopenComment = function (comment) {\n this.commentPane.reopenComment(comment);\n };\n CommentReviewPane.prototype.addReply = function (comment, newComment, selectComment) {\n this.isNewComment = newComment;\n this.commentPane.insertReply(comment);\n if (!newComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment.ownerComment);\n }\n };\n CommentReviewPane.prototype.navigatePreviousComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selection.navigatePreviousComment();\n }\n };\n CommentReviewPane.prototype.navigateNextComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selection.navigateNextComment();\n }\n };\n CommentReviewPane.prototype.enableDisableItems = function () {\n this.enableDisableToolbarItem();\n var keys = this.commentPane.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.commentPane.comments.get(keys[i]);\n if (this.owner.isReadOnly) {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'none';\n }\n commentView.menuBar.style.display = 'none';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = 'none';\n }\n }\n else {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'block';\n }\n commentView.menuBar.style.display = 'block';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = '';\n }\n }\n }\n };\n CommentReviewPane.prototype.enableDisableToolbarItem = function () {\n if (this.toolbar) {\n var enable = true;\n if (this.commentPane.isEditMode) {\n enable = !this.commentPane.isEditMode;\n }\n if (this.owner.isReadOnly) {\n enable = !this.owner.isReadOnly;\n }\n var elements = this.toolbar.element.querySelectorAll('.' + 'e-de-cmt-tbr');\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n if (enable && this.owner && this.owner.viewer) {\n enable = !(this.owner.documentHelper.comments.length === 0);\n }\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2].parentElement.parentElement, enable);\n }\n };\n CommentReviewPane.prototype.initCommentPane = function () {\n this.commentPane = new CommentPane(this.owner, this);\n this.commentPane.initCommentPane();\n };\n CommentReviewPane.prototype.layoutComments = function () {\n for (var i = 0; i < this.owner.documentHelper.comments.length; i++) {\n this.commentPane.addComment(this.owner.documentHelper.comments[i]);\n }\n };\n CommentReviewPane.prototype.clear = function () {\n this.previousSelectedCommentInt = undefined;\n this.commentPane.clear();\n };\n CommentReviewPane.prototype.discardComment = function (comment) {\n if (comment) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.undo();\n this.owner.editorHistory.redoStack.pop();\n this.owner.editor.deleteCommentInternal(comment);\n }\n else if (this.owner.editor) {\n this.owner.editor.deleteCommentInternal(comment);\n }\n }\n };\n CommentReviewPane.prototype.destroy = function () {\n if (this.commentPane) {\n this.commentPane.destroy();\n }\n this.commentPane = undefined;\n if (this.toolbar) {\n this.toolbar.destroy();\n }\n this.toolbar = undefined;\n if (this.toolbarElement && this.toolbarElement.parentElement) {\n this.toolbarElement.parentElement.removeChild(this.toolbarElement);\n }\n this.toolbarElement = undefined;\n if (this.headerContainer && this.headerContainer.parentElement) {\n this.headerContainer.parentElement.removeChild(this.headerContainer);\n }\n this.headerContainer = undefined;\n this.previousSelectedCommentInt = undefined;\n if (this.reviewPane && this.reviewPane.parentElement) {\n this.reviewPane.parentElement.removeChild(this.reviewPane);\n }\n if (!this.owner.isDestroyed) {\n this.owner.off('reviewPane', this.reviewPaneHelper);\n }\n if (!isNullOrUndefined(this.reviewTab)) {\n this.reviewTab.destroy();\n }\n this.reviewTab = undefined;\n if (!isNullOrUndefined(this.confirmDialog)) {\n this.confirmDialog.destroy();\n }\n this.confirmDialog = undefined;\n if (!isNullOrUndefined(this.previousSelectedCommentInt)) {\n this.previousSelectedCommentInt.destroy();\n }\n this.previousSelectedCommentInt = undefined;\n this.reviewPane.innerHTML = '';\n this.reviewPane = undefined;\n this.owner = undefined;\n };\n return CommentReviewPane;\n}());\nexport { CommentReviewPane };\n/**\n * @private\n */\nvar CommentPane = /** @class */ (function () {\n function CommentPane(owner, pane) {\n this.isEditModeInternal = false;\n this.isInsertingReply = false;\n this.owner = owner;\n this.parentPane = pane;\n this.parent = pane.reviewPane;\n this.comments = new Dictionary();\n }\n Object.defineProperty(CommentPane.prototype, \"isEditMode\", {\n get: function () {\n return this.isEditModeInternal;\n },\n set: function (value) {\n this.isEditModeInternal = value;\n var keys = this.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.comments.get(keys[i]);\n if (value) {\n commentView.menuBar.style.display = 'none';\n }\n else if (!commentView.comment.isReply) {\n commentView.menuBar.style.display = 'block';\n }\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n if (this.owner) {\n if (this.isEditModeInternal) {\n this.owner.trigger(commentBeginEvent);\n }\n else {\n this.owner.trigger(commentEndEvent);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n CommentPane.prototype.initCommentPane = function () {\n this.commentPane = createElement('div', { className: 'e-de-cmt-container' });\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.noCommentIndicator = createElement('div', {\n className: 'e-de-cmt-no-cmt',\n innerHTML: localObj.getConstant('No comments in this document')\n });\n this.commentPane.appendChild(this.noCommentIndicator);\n this.parent.appendChild(this.commentPane);\n };\n CommentPane.prototype.addComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n this.commentPane.appendChild(commentParent);\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyView = new CommentView(this.owner, this, comment.replyComments[i]);\n this.comments.add(comment.replyComments[i], replyView);\n commentParent.insertBefore(replyView.layoutComment(true), commentView.replyViewContainer);\n }\n this.updateCommentStatus();\n commentView.hideDrawer();\n };\n CommentPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.parentPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.commentPane.style.height = this.parentPane.parentPaneElement.clientHeight - this.parentPane.headerContainer.clientHeight - tabHeaderHeight + 'px';\n };\n CommentPane.prototype.insertReply = function (replyComment) {\n var parentComment = replyComment.ownerComment;\n var parentView = this.comments.get(parentComment);\n var replyView = new CommentView(this.owner, this, replyComment);\n this.comments.add(replyComment, replyView);\n var replyElement = replyView.layoutComment(true);\n var replyIndex = parentComment.replyComments.indexOf(replyComment);\n if (replyIndex === parentComment.replyComments.length - 1) {\n parentView.parentElement.insertBefore(replyElement, parentView.replyViewContainer);\n }\n else {\n var nextReply = parentComment.replyComments[replyIndex + 1];\n parentView.parentElement.insertBefore(replyElement, this.comments.get(nextReply).parentElement);\n }\n replyView.editComment();\n };\n CommentPane.prototype.insertComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n if (this.owner.documentHelper.comments.indexOf(comment) === this.owner.documentHelper.comments.length - 1) {\n this.commentPane.appendChild(commentParent);\n }\n else {\n var index = this.owner.documentHelper.comments.indexOf(comment);\n var element = this.comments.get(this.owner.documentHelper.comments[index + 1]).parentElement;\n this.commentPane.insertBefore(commentParent, element);\n commentParent.focus();\n }\n this.updateCommentStatus();\n commentView.editComment();\n };\n CommentPane.prototype.removeSelectionMark = function (className) {\n if (this.parent) {\n var elements = this.parent.getElementsByClassName(className);\n for (var i = 0; i < elements.length; i++) {\n classList(elements[i], [], [className]);\n }\n }\n };\n CommentPane.prototype.selectComment = function (comment) {\n this.removeSelectionMark('e-de-cmt-selection');\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (comment) {\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n var commentView = this.comments.get(comment);\n var selectedElement = commentView.parentElement;\n if (selectedElement) {\n classList(selectedElement, ['e-de-cmt-selection'], []);\n selectedElement.focus();\n }\n var commentStart = this.getCommentStart(comment);\n if (!commentStart.commentMark) {\n commentStart.renderCommentMark();\n }\n classList(commentStart.commentMark, ['e-de-cmt-mark-selected'], []);\n commentView.showDrawer();\n }\n };\n CommentPane.prototype.getCommentStart = function (comment) {\n var localValue = new L10n('documenteditor', this.owner.defaultLocale);\n localValue.setLocale(this.owner.locale);\n var commentStart = undefined;\n if (comment && comment.commentStart) {\n commentStart = comment.commentStart;\n }\n if (commentStart.commentMark !== undefined) {\n commentStart.commentMark.title = localValue.getConstant('Click to see this comment');\n }\n return this.getFirstCommentInLine(commentStart);\n };\n CommentPane.prototype.getFirstCommentInLine = function (commentStart) {\n for (var i = 0; i < commentStart.line.children.length; i++) {\n var startComment = commentStart.line.children[i];\n if (startComment instanceof CommentCharacterElementBox && startComment.commentType === 0) {\n return startComment;\n }\n }\n return commentStart;\n };\n CommentPane.prototype.deleteComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (!isNullOrUndefined(commentView)) {\n if (!isNullOrUndefined(this.currentEditingComment)\n && commentView.comment.commentId == this.currentEditingComment.comment.commentId) {\n this.isEditMode = false;\n }\n if (commentView.parentElement && commentView.parentElement.parentElement) {\n commentView.parentElement.parentElement.removeChild(commentView.parentElement);\n }\n //this.commentPane.removeChild();\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyCmt = comment.replyComments[i];\n if (this.comments.containsKey(replyCmt)) {\n this.comments.remove(replyCmt);\n }\n }\n this.comments.remove(comment);\n commentView.destroy();\n }\n this.updateCommentStatus();\n };\n CommentPane.prototype.resolveComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.resolveComment();\n }\n };\n CommentPane.prototype.reopenComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.reopenComment();\n }\n };\n CommentPane.prototype.updateCommentStatus = function () {\n if (this.owner.documentHelper.comments.length === 0) {\n if (!this.noCommentIndicator.parentElement) {\n this.commentPane.appendChild(this.noCommentIndicator);\n }\n this.noCommentIndicator.style.display = 'block';\n this.parentPane.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: false, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0);\n }\n else {\n this.parentPane.isCommentTabVisible = true;\n this.noCommentIndicator.style.display = 'none';\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0, false);\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n };\n CommentPane.prototype.clear = function () {\n this.isEditMode = false;\n this.currentEditingComment = undefined;\n this.isInsertingReply = false;\n this.removeChildElements();\n this.commentPane.innerHTML = '';\n this.updateCommentStatus();\n };\n CommentPane.prototype.removeChildElements = function () {\n var comments = this.comments.keys;\n for (var i = 0; i < comments.length; i++) {\n this.comments.get(comments[i]).destroy();\n }\n this.comments.clear();\n };\n CommentPane.prototype.destroy = function () {\n this.removeChildElements();\n if (this.noCommentIndicator && this.noCommentIndicator) {\n this.noCommentIndicator.parentElement.removeChild(this.noCommentIndicator);\n }\n this.noCommentIndicator = undefined;\n if (this.commentPane && this.commentPane.parentElement) {\n this.commentPane.parentElement.removeChild(this.commentPane);\n }\n this.commentPane.innerHTML = '';\n this.parentPane = undefined;\n this.owner = undefined;\n };\n return CommentPane;\n}());\nexport { CommentPane };\n/**\n * @private\n */\nvar CommentView = /** @class */ (function () {\n function CommentView(owner, commentPane, comment) {\n this.isReply = false;\n this.isDrawerExpand = false;\n this.owner = owner;\n this.comment = comment;\n this.commentPane = commentPane;\n }\n CommentView.prototype.layoutComment = function (isReply) {\n this.isReply = isReply;\n var classList = 'e-de-cmt-sub-container';\n if (isReply) {\n classList += ' e-de-cmt-reply';\n }\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.parentElement = createElement('div', { className: classList });\n this.initCommentHeader(localObj);\n this.initCommentView(localObj);\n this.initDateView();\n if (!this.comment.isReply) {\n this.parentElement.tabIndex = 0;\n this.initReplyView(localObj);\n this.initResolveOption(localObj);\n this.initDrawer();\n if (this.comment.isResolved) {\n this.resolveComment();\n }\n }\n else {\n this.menuBar.style.display = 'none';\n }\n this.commentView.addEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.addEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n return this.parentElement;\n };\n CommentView.prototype.initCommentHeader = function (localObj) {\n var commentDiv = createElement('div', { className: 'e-de-cmt-view' });\n var commentUserInfo = createElement('div', { className: 'e-de-cmt-author' });\n var userName = createElement('div', { className: 'e-de-cmt-author-name' });\n userName.textContent = this.comment.author;\n if (!isNullOrUndefined(this.comment.author)) {\n commentUserInfo.style.display = 'flex';\n this.owner.documentHelper.getAvatar(commentUserInfo, userName, this.comment, undefined);\n }\n //if (this.comment.author === this.owner.currentUser) {\n this.menuBar = createElement('button', { className: 'e-de-cp-option', attrs: { type: 'button' } });\n var userOption = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n var menuItem = new DropDownButton({\n items: this.isReply ? userOption.splice(0, 2) : userOption,\n select: this.userOptionSelectEvent.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide',\n enableRtl: this.owner.enableRtl\n });\n this.menuBar.title = localObj.getConstant('More Options') + '...';\n menuItem.appendTo(this.menuBar);\n commentUserInfo.appendChild(this.menuBar);\n this.dropDownButton = menuItem;\n commentDiv.appendChild(commentUserInfo);\n this.commentView = commentDiv;\n this.parentElement.appendChild(commentDiv);\n commentDiv.addEventListener('click', this.selectComment.bind(this));\n };\n CommentView.prototype.selectComment = function () {\n if (this.commentPane) {\n if (!this.commentPane.isEditMode) {\n this.owner.selection.selectComment(this.comment);\n }\n else if (this.commentPane.isEditMode && this.commentPane.isInsertingReply\n && this.commentPane.currentEditingComment && this.commentPane.currentEditingComment.replyViewTextBox.value === '') {\n var comment = this.comment;\n if (comment && comment.isReply) {\n comment = this.comment.ownerComment;\n }\n if (comment && this.owner.documentHelper.currentSelectedComment === comment) {\n return;\n }\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.selection.selectComment(this.comment);\n }\n }\n };\n CommentView.prototype.initCommentView = function (localObj) {\n this.commentText = createElement('div', { className: 'e-de-cmt-readonly' });\n this.commentText.innerText = this.comment.text;\n this.commentView.appendChild(this.commentText);\n this.initEditView(localObj);\n };\n CommentView.prototype.initEditView = function (localObj) {\n this.textAreaContainer = createElement('div', { styles: 'display:none' });\n this.textArea = createElement('textarea', { className: 'e-de-cmt-textarea e-input' });\n this.textArea.placeholder = localObj.getConstant('Type your comment here');\n this.textArea.rows = 1;\n this.textArea.value = this.comment.text.trim();\n this.textArea.addEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.addEventListener('keyup', this.enableDisablePostButton.bind(this));\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.postButton = new Button({ cssClass: 'e-btn e-flat e-primary e-de-overlay', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n postButton.addEventListener('click', this.postComment.bind(this));\n postButton.title = localObj.getConstant('Post');\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n this.cancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.title = localObj.getConstant('Cancel');\n cancelButton.addEventListener('click', this.cancelEditing.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.textAreaContainer.appendChild(this.textArea);\n this.textAreaContainer.appendChild(editRegionFooter);\n this.commentView.appendChild(this.textAreaContainer);\n };\n CommentView.prototype.initDateView = function () {\n this.commentDate = createElement('div', { className: 'e-de-cmt-date' });\n this.commentDate.innerText = HelperMethods.getModifiedDate(this.comment.date);\n this.commentView.appendChild(this.commentDate);\n };\n CommentView.prototype.initDrawer = function () {\n this.drawerElement = createElement('div', { styles: 'display:none;', className: 'e-de-cmt-drawer-cnt' });\n var leftPane = createElement('div', { className: 'e-de-cmt-drawer' });\n var spanElement = createElement('span');\n leftPane.appendChild(spanElement);\n this.drawerElement.appendChild(leftPane);\n this.drawerSpanElement = spanElement;\n this.drawerAction = leftPane;\n this.drawerAction.addEventListener('click', this.showOrHideDrawer.bind(this));\n this.parentElement.appendChild(this.drawerElement);\n };\n CommentView.prototype.initReplyView = function (localObj) {\n this.replyViewContainer = createElement('div', { className: 'e-de-cmt-rply-view' });\n if (this.commentPane.parentPane.isNewComment) {\n this.replyViewContainer.style.display = 'none';\n }\n this.replyViewTextBox = createElement('textarea', { className: 'e-de-cmt-textarea e-input' });\n this.replyViewTextBox.placeholder = localObj.getConstant('Reply');\n this.replyViewTextBox.rows = 1;\n this.replyViewTextBox.value = '';\n this.replyViewTextBox.readOnly = true;\n this.replyViewTextBox.addEventListener('click', this.enableReplyView.bind(this));\n this.replyViewTextBox.addEventListener('keydown', this.updateReplyTextAreaHeight.bind(this));\n this.replyViewTextBox.addEventListener('keyup', this.enableDisableReplyPostButton.bind(this));\n var editRegionFooter = createElement('div', { styles: 'display:none', className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-de-overlay e-btn e-flat', attrs: { type: 'button' } });\n this.replyPostButton = new Button({ cssClass: 'e-btn e-flat e-primary', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n postButton.addEventListener('click', this.postReply.bind(this));\n postButton.title = localObj.getConstant('Post');\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n this.replyCancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.addEventListener('click', this.cancelReply.bind(this));\n cancelButton.title = localObj.getConstant('Cancel');\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.replyFooter = editRegionFooter;\n this.replyViewContainer.appendChild(this.replyViewTextBox);\n this.replyViewContainer.appendChild(editRegionFooter);\n this.parentElement.appendChild(this.replyViewContainer);\n };\n CommentView.prototype.initResolveOption = function (localObj) {\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-resolve-btn' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.reopenButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-reopen' }, postButton);\n postButton.title = localObj.getConstant('Reopen');\n postButton.addEventListener('click', this.reopenButtonClick.bind(this));\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n cancelButton.title = localObj.getConstant('Delete');\n this.deleteButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-delete' }, cancelButton);\n cancelButton.addEventListener('click', this.deleteComment.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.resolveView = editRegionFooter;\n this.parentElement.appendChild(editRegionFooter);\n };\n CommentView.prototype.reopenButtonClick = function () {\n this.owner.editor.reopenComment(this.comment);\n };\n CommentView.prototype.deleteComment = function () {\n var eventArgs = { author: this.comment.author, cancel: false };\n this.owner.trigger(commentDeleteEvent, eventArgs);\n var eventActionArgs = { author: this.comment.author, cancel: eventArgs.cancel, type: 'Delete' };\n this.owner.trigger(beforeCommentActionEvent, eventActionArgs);\n if (eventActionArgs.cancel) {\n return;\n }\n this.owner.editorModule.deleteCommentInternal(this.comment);\n if (eventArgs.cancel) {\n return;\n }\n };\n CommentView.prototype.updateReplyTextAreaHeight = function () {\n var _this = this;\n setTimeout(function () {\n _this.replyViewTextBox.style.height = 'auto';\n var scrollHeight = _this.replyViewTextBox.scrollHeight;\n _this.replyViewTextBox.style.height = scrollHeight + 'px';\n });\n };\n CommentView.prototype.enableDisableReplyPostButton = function () {\n this.replyPostButton.disabled = this.replyViewTextBox.value === '';\n if (this.replyPostButton.disabled) {\n classList(this.replyPostButton.element, ['e-de-overlay'], []);\n }\n else if (this.replyPostButton.element.classList.contains('e-de-overlay')) {\n classList(this.replyPostButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.enableReplyView = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Reply' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reply') {\n return;\n }\n if (this.commentPane.isEditMode) {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = true;\n if (this.owner.documentHelper.currentSelectedComment !== this.comment) {\n this.owner.selection.selectComment(this.comment);\n }\n this.commentPane.isEditMode = true;\n this.replyViewTextBox.readOnly = false;\n this.replyFooter.style.display = 'block';\n setTimeout(function () {\n _this.replyViewTextBox.focus();\n });\n };\n CommentView.prototype.postReply = function () {\n var replyText = this.replyViewTextBox.value;\n this.cancelReply();\n this.updateReplyTextAreaHeight();\n this.owner.editorModule.replyComment(this.comment, replyText);\n this.owner.fireContentChange();\n };\n CommentView.prototype.cancelReply = function () {\n this.commentPane.currentEditingComment = undefined;\n this.commentPane.isInsertingReply = true;\n this.commentPane.isEditMode = false;\n this.replyPostButton.disabled = true;\n this.replyViewTextBox.value = '';\n this.replyViewTextBox.readOnly = true;\n this.replyFooter.style.display = 'none';\n };\n CommentView.prototype.updateTextAreaHeight = function () {\n var _this = this;\n setTimeout(function () {\n if (!isNullOrUndefined(_this.textArea)) {\n _this.textArea.style.height = 'auto';\n var scrollHeight = _this.textArea.scrollHeight;\n _this.textArea.style.height = scrollHeight + 'px';\n }\n });\n };\n CommentView.prototype.showMenuItems = function () {\n if (this.comment.isReply && !this.owner.isReadOnly) {\n if (!this.commentPane.isEditMode && (!isNullOrUndefined(this.comment) && !this.comment.isResolved)) {\n this.menuBar.style.display = 'block';\n }\n }\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.add('e-de-cmt-mark-hover');\n }\n };\n CommentView.prototype.hideMenuItemOnMouseLeave = function () {\n if (this.comment.isReply) {\n if (this.owner.documentHelper.currentSelectedComment !== this.comment.ownerComment) {\n this.hideMenuItems();\n }\n }\n if (this.commentPane) {\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.remove('e-de-cmt-mark-hover');\n }\n }\n };\n CommentView.prototype.hideMenuItems = function () {\n this.menuBar.style.display = 'none';\n };\n CommentView.prototype.enableDisablePostButton = function () {\n this.postButton.disabled = this.textArea.value === '';\n if (this.postButton.disabled) {\n classList(this.postButton.element, ['e-de-overlay'], []);\n }\n else if (this.postButton.element.classList.contains('e-de-overlay')) {\n classList(this.postButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.editComment = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Edit' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Edit') {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = false;\n this.commentPane.isEditMode = true;\n this.commentText.style.display = 'none';\n this.textAreaContainer.style.display = 'block';\n this.commentDate.style.display = 'none';\n this.menuBar.style.display = 'none';\n this.updateTextAreaHeight();\n setTimeout(function () {\n if (_this.textArea) {\n _this.textArea.focus();\n }\n });\n };\n CommentView.prototype.resolveComment = function () {\n classList(this.parentElement, ['e-de-cmt-resolved'], []);\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Reopen') }, { text: localObj.getConstant('Delete') }];\n };\n CommentView.prototype.reopenComment = function () {\n classList(this.parentElement, [], ['e-de-cmt-resolved']);\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n this.showDrawer();\n };\n CommentView.prototype.postComment = function () {\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Post' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Post') {\n return;\n }\n var updatedText = this.textArea.value;\n this.commentText.innerText = updatedText;\n this.comment.text = updatedText;\n this.showCommentView();\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n if (!isNullOrUndefined(this.replyViewContainer)) {\n this.replyViewContainer.style.display = '';\n }\n this.owner.fireContentChange();\n };\n CommentView.prototype.showCommentView = function () {\n this.commentPane.isEditMode = false;\n this.textAreaContainer.style.display = 'none';\n this.commentText.style.display = 'block';\n this.commentDate.style.display = 'block';\n this.menuBar.style.display = 'block';\n };\n CommentView.prototype.cancelEditing = function () {\n this.showCommentView();\n this.textArea.value = this.comment.text.trim();\n if (this.commentPane.parentPane.isNewComment) {\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n this.commentPane.parentPane.discardComment(this.comment);\n }\n };\n CommentView.prototype.showOrHideDrawer = function () {\n if (this.isDrawerExpand) {\n this.hideDrawer();\n }\n else {\n this.showDrawer();\n }\n };\n CommentView.prototype.hideDrawer = function () {\n if (this.parentElement) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 1; i < elements.length; i++) {\n elements[i].style.display = 'none';\n }\n this.drawerElement.style.display = 'block';\n classList(this.drawerSpanElement, [], ['e-de-nav-up']);\n this.drawerSpanElement.innerText = '+' + (elements.length - 1) + ' ' + localObj.getConstant('more') + '...';\n }\n this.isDrawerExpand = false;\n }\n };\n CommentView.prototype.showDrawer = function () {\n if (this.parentElement) {\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 0; i < elements.length; i++) {\n elements[i].style.display = 'block';\n }\n this.drawerElement.style.display = 'block';\n this.drawerSpanElement.innerText = '';\n classList(this.drawerSpanElement, ['e-de-nav-up'], []);\n }\n this.isDrawerExpand = true;\n }\n };\n CommentView.prototype.userOptionSelectEvent = function (event) {\n var selectedItem = event.item.text;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n switch (selectedItem) {\n case localObj.getConstant('Edit'):\n this.editComment();\n break;\n case localObj.getConstant('Reply'):\n this.enableReplyView();\n break;\n case localObj.getConstant('Delete'):\n this.deleteComment();\n break;\n case localObj.getConstant('Resolve'):\n this.owner.editor.resolveComment(this.comment);\n break;\n case localObj.getConstant('Reopen'):\n this.owner.editor.reopenComment(this.comment);\n }\n };\n CommentView.prototype.unwireEvent = function () {\n if (this.drawerAction) {\n this.drawerAction.removeEventListener('click', this.showOrHideDrawer.bind(this));\n }\n if (this.textArea) {\n this.textArea.removeEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.removeEventListener('keyup', this.enableDisablePostButton.bind(this));\n }\n if (this.postButton) {\n this.postButton.removeEventListener('click', this.postComment.bind(this));\n }\n if (this.cancelButton) {\n this.cancelButton.removeEventListener('click', this.cancelEditing.bind(this));\n }\n if (this.commentView) {\n this.commentView.removeEventListener('click', this.selectComment.bind(this));\n this.commentView.removeEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.removeEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n }\n };\n CommentView.prototype.destroy = function () {\n this.unwireEvent();\n if (this.comment) {\n this.comment = undefined;\n }\n if (this.dropDownButton) {\n this.dropDownButton.destroy();\n }\n this.dropDownButton = undefined;\n if (this.postButton) {\n this.postButton.destroy();\n }\n this.postButton = undefined;\n if (this.cancelButton) {\n this.cancelButton.destroy();\n }\n this.cancelButton = undefined;\n if (this.replyPostButton) {\n this.replyPostButton.destroy();\n this.replyPostButton = undefined;\n }\n if (this.replyCancelButton) {\n this.replyCancelButton.destroy();\n this.replyCancelButton = undefined;\n }\n if (this.reopenButton) {\n this.reopenButton.destroy();\n this.reopenButton = undefined;\n }\n if (this.deleteButton) {\n this.deleteButton.destroy();\n this.deleteButton = undefined;\n }\n this.replyViewContainer = undefined;\n this.replyViewTextBox = undefined;\n this.replyFooter = undefined;\n if (this.parentElement && this.parentElement.parentElement) {\n this.parentElement.parentElement.removeChild(this.parentElement);\n }\n this.resolveView = undefined;\n this.commentPane = undefined;\n this.parentElement.innerHTML = '';\n this.cancelButton = undefined;\n this.owner = undefined;\n this.menuBar = undefined;\n this.commentView = undefined;\n this.drawerAction = undefined;\n this.commentText = undefined;\n this.commentDate = undefined;\n this.textAreaContainer = undefined;\n this.textArea = undefined;\n this.drawerElement = undefined;\n this.drawerSpanElement = undefined;\n this.parentElement = null;\n };\n return CommentView;\n}());\nexport { CommentView };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* eslint-disable max-len */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function HyperlinkDialog(documentHelper) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.screenTipText = '';\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n //const selectedText: string = this.documentHelper.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n this.onScreenTipTextBox = function () {\n _this.screenTipText = _this.screenTipTextBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadHyperlinkDialog = function () {\n _this.documentHelper.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.documentHelper.bookmarks.keys.length; i++) {\n var bookmark = _this.documentHelper.bookmarks.keys[i];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.documentHelper.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n var fieldObj = _this.documentHelper.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n _this.screenTipTextBox.value = _this.documentHelper.selection.getLinkText(fieldBegin, false);\n var link = _this.documentHelper.selection.getLinkText(fieldBegin, true);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.documentHelper.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.documentHelper.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.documentHelper.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {CheckBoxChangeArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onBookmarkchange = function () {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue, isRtl) {\n this.target = createElement('div', { className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-dlg-container' });\n this.displayTextBox = createElement('input', { className: 'e-input' });\n this.displayTextBox.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n displayText.appendChild(this.displayTextBox);\n container.appendChild(displayText);\n //container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-dlg-container' });\n this.urlTextBox = createElement('input', { className: 'e-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', this.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', this.onKeyUpOnUrlBox);\n this.addressText.appendChild(this.urlTextBox);\n container.appendChild(this.addressText);\n //container.appendChild(this.urlTextBox);\n var screenTipText = createElement('div', { className: 'e-de-dlg-container' });\n this.screenTipTextBox = createElement('input', { className: 'e-input' });\n this.screenTipTextBox.addEventListener('keyup', this.onScreenTipTextBox);\n screenTipText.appendChild(this.screenTipTextBox);\n container.appendChild(screenTipText);\n //container.appendChild(this.screenTipTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-dlg-container' });\n //const bookmarkTextElement: HTMLElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n var bookmarkValue = createElement('input');\n bookmarkText.appendChild(bookmarkValue);\n this.bookmarkDropdown = new DropDownList({\n dataSource: [], change: this.onBookmarkchange,\n noRecordsTemplate: localValue.getConstant('No bookmarks found'),\n placeholder: localValue.getConstant('Bookmark'), floatLabelType: 'Always'\n });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n //this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n var bookmarkCheckDiv = createElement('div');\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' } });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({\n label: localValue.getConstant('Use bookmarks'),\n enableRtl: isRtl, change: this.onUseBookmarkChange\n });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n new TextBox({ placeholder: localValue.getConstant('Text to display'), floatLabelType: 'Always' }, this.displayTextBox);\n new TextBox({ placeholder: localValue.getConstant('Address'), floatLabelType: 'Always' }, this.urlTextBox);\n new TextBox({ placeholder: localValue.getConstant('ScreenTip text'), floatLabelType: 'Always' }, this.screenTipTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.documentHelper.dialog.close = this.closeHyperlinkDialog;\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n this.insertButton.disabled = (this.urlTextBox.value === '' || this.displayTextBox.value === '');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = this.displayTextBox.value.trim();\n var address = this.urlTextBox.value.trim();\n address = address.replace(/\\s/g, \"\");\n var screenTipText = this.screenTipTextBox.value.trim();\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '' && this.bookmarkCheckbox.checked === true) {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.documentHelper.hideDialog();\n return;\n }\n if (screenTipText !== '') {\n address = address + '\\\" \\\\o \\\"' + screenTipText;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.documentHelper.owner.editorModule.editHyperlink(this.documentHelper.selection, address, displayText, isBookmark);\n }\n else {\n var remove = (this.documentHelper.selection.text !== displayText ||\n this.documentHelper.selection.text.indexOf('\\r') === -1) && !this.displayTextBox.disabled;\n this.documentHelper.owner.editorModule.insertHyperlinkInternal(address, displayText, remove, isBookmark);\n }\n this.documentHelper.hideDialog();\n this.navigationUrl = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.screenTipText = '';\n this.screenTipTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n if (this.screenTipTextBox) {\n this.screenTipTextBox.parentElement.removeChild(this.screenTipTextBox);\n this.screenTipTextBox = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function TableDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertTableClick = function () {\n if (_this.columnValueTexBox.value < 1 || _this.columnValueTexBox.value > 63) {\n DialogUtility.alert(_this.localeValue.getConstant('Number of columns must be between 1 and 63.'));\n return;\n }\n if (_this.rowValueTextBox.value < 1 || _this.rowValueTextBox.value > _this.documentHelper.owner.documentEditorSettings.maximumRows) {\n if (_this.documentHelper.owner.locale == 'en-US') {\n DialogUtility.alert('Number of rows must be between 1 and ' + _this.documentHelper.owner.documentEditorSettings.maximumRows + '.');\n }\n else {\n DialogUtility.alert(_this.localeValue.getConstant('Number of rows must be between 1 and 32767.'));\n }\n return;\n }\n if (_this.rowValueTextBox.value <= _this.documentHelper.owner.documentEditorSettings.maximumRows && _this.columnValueTexBox.value <= 63) {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.documentHelper.owner.editor.insertTable(rowCount, columnCount);\n }\n _this.documentHelper.hideDialog();\n }\n };\n this.documentHelper = documentHelper;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specified the locale value.\n * @returns {void}\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n this.target = createElement('div', { className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnValue = createElement('div', { className: 'e-de-container-row' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n columnValue.appendChild(this.columnsCountBox);\n var rowValue = createElement('div');\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of rows'),\n floatLabelType: 'Always'\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of columns'),\n floatLabelType: 'Always'\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = localValue.getConstant('Insert Table');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.columnValueTexBox.focusIn();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[i]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BookmarkDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.addBookmark = function () {\n _this.documentHelper.owner.editorModule.insertBookmark(_this.textBoxInput.value);\n _this.documentHelper.hideDialog();\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.selectHandler = function (args) {\n _this.focusTextBox(args.text);\n };\n /**\n * @private\n * @returns {void}\n */\n this.gotoBookmark = function () {\n _this.documentHelper.selection.selectBookmark(_this.textBoxInput.value);\n };\n /**\n * @private\n * @returns {void}\n */\n this.deleteBookmark = function () {\n _this.documentHelper.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.documentHelper = documentHelper;\n }\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {string[]} bookmarks - Specifies bookmark collection.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name') + ':';\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview' });\n searchDiv.appendChild(listviewDiv);\n // const arts: string[] = this.documentHelper.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview'\n });\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'), id: 'add',\n attrs: { type: 'button' }\n });\n addbuttonDiv.appendChild(addButtonElement);\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.textBoxInput.addEventListener('input', this.onKeyUpOnTextBox);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Delete'), id: 'delete',\n attrs: { type: 'button' }\n });\n deleteButtonDiv.appendChild(deleteButtonElement);\n this.deleteButton = new Button({ cssClass: 'e-button-custom' });\n this.deleteButton.disabled = hasNoBookmark;\n this.deleteButton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Go To'), id: 'goto',\n attrs: { type: 'button' }\n });\n gotoButtonDiv.appendChild(gotoButtonElement);\n this.gotoButton = new Button({ cssClass: 'e-button-custom' });\n this.gotoButton.disabled = hasNoBookmark;\n this.gotoButton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.documentHelper.getBookmarks();\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks, this.documentHelper.owner.enableRtl);\n //}\n this.documentHelper.dialog.header = localObj.getConstant('Bookmark');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n if (!hasNoBookmark) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var firstItem = bookmarks[0];\n this.listviewInstance.selectItem(firstItem);\n }\n this.documentHelper.dialog.show();\n };\n BookmarkDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = (this.textBoxInput.value === '');\n }\n };\n BookmarkDialog.prototype.focusTextBox = function (text) {\n this.textBoxInput.value = text;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, text.length);\n value.focus();\n this.enableOrDisableButton();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOfContentsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.loadTableofContentDialog = function () {\n _this.documentHelper.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog3.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n var value = _this.textBoxInput;\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.styleDialogModule)) {\n _this.documentHelper.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n /**\n * @returns {void}\n */\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyle = function (args) {\n var headingValue = args.srcElement.value;\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeHeadingStyle = function (args) {\n var headingValue = args.srcElement.value;\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n _this.applyLevelSetting(tocSettings);\n _this.documentHelper.owner.editorModule.insertTableOfContents(tocSettings);\n _this.documentHelper.dialog3.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.documentHelper = documentHelper;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale, isRtl) {\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var leftGeneralDivStyles;\n var rightBottomGeneralDivStyles;\n if (isRtl) {\n leftGeneralDivStyles = 'float:right;';\n rightBottomGeneralDivStyles = 'float:left;position:relative;';\n }\n else {\n leftGeneralDivStyles = 'float:left;';\n rightBottomGeneralDivStyles = 'float:right;';\n }\n var topContainer = createElement('div', { className: 'e-de-container-row' });\n var leftGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(leftGeneralDiv);\n var rightGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n topContainer.appendChild(rightGeneralDiv);\n generalDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-dlg-row' });\n var leftBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n bottomContainer.appendChild(leftBottomGeneralDiv);\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(rightBottomGeneralDiv);\n var pageNumberDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), enableRtl: isRtl, checked: true, change: this.changePageNumberValue });\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), enableRtl: isRtl, checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDivContainer = createElement('div', { className: 'e-de-container-row' });\n var tabDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var tabLeaderLabelDiv = createElement('div');\n var tabLeaderLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader') + ':' });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n tabDivContainer.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ enableRtl: isRtl });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), cssClass: 'e-de-toc-label', enableRtl: isRtl, checked: true });\n this.hyperlink.appendTo(hyperlink);\n var showDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var showLevelLabelDiv = createElement('div', { className: 'e-de-toc-dlg-show-level-div' });\n var showLevelLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels') + ':' });\n showLevelLabelDiv.appendChild(showLevelLabel);\n var showLevelDiv = createElement('div', { className: 'e-de-toc-dlg-showlevel-div' });\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n tabDivContainer.appendChild(showDiv);\n generalDiv.appendChild(tabDivContainer);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, change: this.changeShowLevelValue.bind(this) });\n this.showLevel.appendTo(showLevel);\n if (isRtl) {\n this.hyperlink.cssClass = 'e-de-toc-label-rtl';\n showLevelLabelDiv.classList.add('e-de-rtl');\n showLevelDiv.classList.add('e-de-rtl');\n rightBottomGeneralDiv.classList.add('e-de-rtl');\n }\n //let buildTableDiv: HTMLDivElement = createElement('div', { className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var buildTableLabel = createElement('div', { className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', innerHTML: locale.getConstant('Build table of contents from') + ':' });\n //leftBottomGeneralDiv.appendChild(buildTableDiv);\n // generalDiv.appendChild(buildTableLabel);\n generalDiv.appendChild(bottomContainer);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), enableRtl: isRtl, checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n innerHTML: locale.getConstant('Available styles'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level') + ':', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 1',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 2',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 3',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 4',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 5',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 6',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 7',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 8',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 9',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level' });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n if (isRtl) {\n this.normal.classList.add('e-de-rtl');\n this.heading1.classList.add('e-de-rtl');\n this.heading2.classList.add('e-de-rtl');\n this.heading3.classList.add('e-de-rtl');\n this.heading4.classList.add('e-de-rtl');\n this.heading5.classList.add('e-de-rtl');\n this.heading6.classList.add('e-de-rtl');\n this.heading7.classList.add('e-de-rtl');\n this.heading8.classList.add('e-de-rtl');\n this.heading9.classList.add('e-de-rtl');\n }\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({\n label: locale.getConstant('Outline levels'),\n enableRtl: isRtl, checked: true, cssClass: 'e-de-outline-rtl'\n });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', {\n innerHTML: locale.getConstant('Reset'), id: 'reset',\n attrs: { type: 'button' }\n });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // let tocStylesDiv: HTMLDivElement = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading',\n innerHTML: locale.getConstant('Styles') + ':'\n });\n //rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div');\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleLocale = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n var styleValues = this.styleLocaleValue(styleLocale, locale);\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', {\n innerHTML: locale.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n if (isRtl) {\n resetButtonDiv.classList.add('e-de-rtl');\n tocStylesLabel.classList.add('e-de-rtl');\n textBoxDiv.classList.add('e-de-rtl');\n listViewDiv.classList.add('e-de-rtl');\n modifyButtonDiv.classList.add('e-de-rtl');\n }\n };\n TableOfContentsDialog.prototype.styleLocaleValue = function (styleLocale, localValue) {\n var styleName = [];\n for (var index = 0; index < styleLocale.length; index++) {\n styleName.push(localValue.getConstant(styleLocale[index]));\n }\n return styleName;\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog3.header = localValue.getConstant('Table of Contents');\n this.documentHelper.dialog3.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog3.width = 'auto';\n this.documentHelper.dialog3.height = 'auto';\n this.documentHelper.dialog3.content = this.target;\n this.documentHelper.dialog3.beforeOpen = this.loadTableofContentDialog;\n this.documentHelper.dialog3.close = this.closeTableOfContentDialog;\n this.documentHelper.dialog3.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.documentHelper.dialog3.dataBind();\n this.documentHelper.dialog3.show();\n };\n TableOfContentsDialog.prototype.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.changeByValue(values);\n break;\n }\n };\n TableOfContentsDialog.prototype.changeByValue = function (headings) {\n this.heading1.value = headings[0];\n this.heading2.value = headings[1];\n this.heading3.value = headings[2];\n this.heading4.value = headings[3];\n this.heading5.value = headings[4];\n this.heading6.value = headings[5];\n this.heading7.value = headings[6];\n this.heading8.value = headings[7];\n this.heading9.value = headings[8];\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (outlineLevel !== 0) {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (this.normal.value !== '') {\n tocSettings.levelSettings['Normal'] = +this.normal.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function PageSetupDialog(documentHelper) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n * @returns {void}\n */\n this.loadPageSetupDialog = function () {\n _this.documentHelper.updateFocus();\n var sectionFormat = _this.documentHelper.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n /* eslint-disable-next-line max-len */\n _this.setPageSize(_this.portrait.checked, parseFloat(sectionFormat.pageWidth.toFixed(1)), parseFloat(sectionFormat.pageHeight.toFixed(1)));\n };\n /**\n * @private\n * @returns {void}\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @param {ChangeEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n // const sectionFormat: SelectionSectionFormat = this.documentHelper.selection.sectionFormat;\n // const width: number = sectionFormat.pageWidth;\n // const height: number = sectionFormat.pageHeight;\n /* eslint-disable-next-line max-len */\n if (_this.documentHelper.selection.sectionFormat.pageWidth > _this.documentHelper.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n _this.portrait.checked = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n else {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onPortrait = function () {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onLandscape = function () {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.documentHelper = documentHelper;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale, isRtl) {\n this.target = createElement('div');\n var ejtabContainer = createElement('div');\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.paperTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.layoutTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n var ejtab = createElement('div', { className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var marginContent = createElement('div');\n var paperContent = createElement('div');\n var layoutContent = createElement('div');\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale, isRtl);\n this.initPaperSizeProperties(this.paperTab, locale, isRtl);\n this.initLayoutProperties(this.layoutTab, locale, isRtl);\n var items = [\n { header: { text: marginHeader }, content: marginContent },\n { header: { text: paperHeader }, content: paperContent },\n { header: { text: layoutHeader }, content: layoutContent }\n ];\n var tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n tabObj.isStringTemplate = true;\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale, isRtl) {\n var marginDiv = createElement('div');\n var leftMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(leftMarginDiv);\n var rightMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(rightMarginDiv);\n if (isRtl) {\n leftMarginDiv.classList.add('e-de-rtl');\n rightMarginDiv.classList.add('e-de-rtl');\n }\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n });\n var topContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(topTextBox);\n leftMarginDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(bottomTextBox);\n leftMarginDiv.appendChild(bottomContainer);\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n });\n var leftContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n leftContainer.appendChild(leftTextBox);\n rightMarginDiv.appendChild(leftContainer);\n var rightContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n rightContainer.appendChild(rightTextBox);\n rightMarginDiv.appendChild(rightContainer);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Top') });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Left') });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Bottom') });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Right') });\n this.rightMarginBox.appendTo(rightTextBox);\n var orientationDiv = createElement('div');\n var orientationLabeldiv = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { styles: 'display: flex;' });\n var portraitDivStyles;\n if (isRtl) {\n portraitDivStyles = 'padding-left: 30px;';\n }\n else {\n portraitDivStyles = 'padding-right: 30px;';\n }\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: portraitDivStyles });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, enableRtl: isRtl, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), enableRtl: isRtl, change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale, isRtl) {\n var sizeDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var leftSizeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n sizeDiv.appendChild(leftSizeDiv);\n var rightSizeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n sizeDiv.appendChild(rightSizeDiv);\n if (isRtl) {\n leftSizeDiv.classList.add('e-de-rtl');\n rightSizeDiv.classList.add('e-de-rtl');\n }\n // const widthLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n // id: this.target.id + '_widthLabel', styles: 'padding-top:0px;'\n // }) as HTMLLabelElement;\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n // const heightLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;',\n // id: this.target.id + '_heightLabel'\n // });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Width') });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Height') });\n this.heightBox.appendTo(heightTextBox);\n var paperSizeDiv = createElement('div');\n var paperSize = createElement('select', {\n styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px', enableRtl: isRtl });\n this.paperSize.appendTo(paperSize);\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale, isRtl) {\n var layoutDiv = createElement('div', { className: 'e-de-dlg-container' });\n var firstPageDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n firstPageDiv.appendChild(checkBox1);\n var oddOrEvenDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even'), enableRtl: isRtl });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page'), enableRtl: isRtl });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n var textLabelDiv = createElement('div');\n var textLabel = createElement('label', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('From edge')\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n var propertyDiv = createElement('div', { className: 'e-de-dlg-row' });\n var leftLayoutDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n propertyDiv.appendChild(leftLayoutDiv);\n var rightLayoutDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n propertyDiv.appendChild(rightLayoutDiv);\n if (isRtl) {\n rightLayoutDiv.classList.add('e-de-rtl');\n leftLayoutDiv.classList.add('e-de-rtl');\n }\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n leftLayoutDiv.appendChild(headerBox);\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Header') });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Footer') });\n this.footerBox.appendTo(footerBox);\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = localValue.getConstant('Page Setup');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadPageSetupDialog;\n this.documentHelper.dialog.close = this.closePageSetupDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n PageSetupDialog.prototype.setPageSize = function (isPortrait, width, height) {\n if ((isPortrait && width === 612 && height === 792)\n || (!isPortrait && width === 792 && height === 612)) {\n this.paperSize.value = 'letter';\n }\n else if ((isPortrait && width === 792 && height === 1224)\n || (!isPortrait && width === 1224 && height === 792)) {\n this.paperSize.value = 'tabloid';\n }\n else if ((isPortrait && width === 612 && height === 1008)\n || (!isPortrait && width === 1008 && height === 612)) {\n this.paperSize.value = 'legal';\n }\n else if ((isPortrait && width === 392 && height === 612)\n || (!isPortrait && width === 392 && height === 612)) {\n this.paperSize.value = 'statement';\n }\n else if ((isPortrait && width === 522 && height === 756)\n || (!isPortrait && width === 756 && height === 522)) {\n this.paperSize.value = 'executive';\n }\n else if ((isPortrait && width === 841.9 && height === 1190.5)\n || (!isPortrait && width === 1190.5 && height === 841.9)) {\n this.paperSize.value = 'a3';\n }\n else if ((isPortrait && width === 595.3 && height === 841.9)\n || (!isPortrait && width === 841.9 && height === 595.3)) {\n this.paperSize.value = 'a4';\n }\n else if ((isPortrait && width === 419.6 && height === 595.3)\n || (!isPortrait && width === 595.3 && height === 419.6)) {\n this.paperSize.value = 'a5';\n }\n else if ((isPortrait && width === 728.5 && height === 1031.8)\n || (!isPortrait && width === 1031.8 && height === 728.5)) {\n this.paperSize.value = 'b4';\n }\n else if ((isPortrait && width === 515.9 && height === 728.5)\n || (!isPortrait && width === 728.5 && height === 515.9)) {\n this.paperSize.value = 'letter';\n }\n else {\n this.paperSize.value = 'customsize';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ParagraphDialog(documentHelper) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.spaceBeforeAuto = false;\n this.spaceAfterAuto = false;\n this.textAlignment = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n this.isStyleDialog = false;\n this.directionDiv = undefined;\n this.keepWithNextValue = undefined;\n this.keepLineTogetherValue = undefined;\n this.widowControlValue = undefined;\n this.tabObj = undefined;\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n _this.beforeSpacingIn.step = 1;\n _this.spaceBeforeAuto = true;\n _this.beforeSpacing = 5;\n }\n else {\n _this.beforeSpacing = event.value;\n _this.beforeSpacingIn.step = 6;\n _this.spaceBeforeAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_1 = _this.beforeSpacingIn;\n setTimeout(function () {\n proxy_1.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickBeforeSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.beforeSpacingIn.element.value === '-1.0')\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n _this.afterSpacingIn.step = 1;\n _this.spaceAfterAuto = true;\n _this.afterSpacing = 5;\n }\n else {\n _this.afterSpacing = event.value;\n _this.afterSpacingIn.step = 6;\n _this.spaceAfterAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_2 = _this.afterSpacingIn;\n setTimeout(function () {\n proxy_2.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickAfterSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.afterSpacingIn.element.value === '-1.0')\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n if (_this.special.index === 2) {\n _this.firstLineIndent = -(_this.firstLineIndent);\n _this.leftIndent = _this.leftIndentIn.value + event.value;\n }\n };\n /**\n * @private\n * @param {DropDownChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies change event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.bidi = true;\n }\n _this.changeAlignmentByBidi();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeContextualSpacing = function (args) {\n _this.contextualSpacing = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepWithNext = function (args) {\n _this.keepWithNextValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepLinesTogether = function (args) {\n _this.keepLineTogetherValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeWidowControl = function (args) {\n _this.widowControlValue = args.checked;\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeByValue = function () {\n var paragraphFormat = _this.documentHelper.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n _this.leftIndent = _this.leftIndentIn.value;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n if (Math.abs(paragraphFormat.firstLineIndent) <= _this.leftIndent) {\n _this.leftIndent = paragraphFormat.firstLineIndent + _this.leftIndent;\n }\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = (paragraphFormat.firstLineIndent);\n if (!isNullOrUndefined(_this.leftIndent)) {\n _this.leftIndent = _this.leftIndent + paragraphFormat.firstLineIndent;\n }\n else {\n _this.leftIndent = paragraphFormat.firstLineIndent;\n }\n }\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeBySpacing = function () {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadParagraphDialog = function () {\n if (_this.isStyleDialog) {\n _this.directionDiv.classList.add('e-de-disabledbutton');\n }\n else {\n _this.directionDiv.classList.remove('e-de-disabledbutton');\n }\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.documentHelper.selection.paragraphFormat;\n }\n var alignValue = _this.getAlignmentValue(selectionFormat.textAlignment);\n _this.alignment.index = alignValue;\n if (selectionFormat.spaceBeforeAuto) {\n _this.beforeSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.beforeSpacing === -1) {\n _this.beforeSpacingIn.value = undefined;\n }\n else {\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n }\n }\n if (selectionFormat.spaceAfterAuto) {\n _this.afterSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.afterSpacing === -1) {\n _this.afterSpacingIn.value = undefined;\n }\n else {\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n }\n }\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = Math.abs(selectionFormat.firstLineIndent);\n var lineSpaceValue = _this.lineSpacing.index;\n _this.keepWithNextValue = undefined;\n _this.keepLineTogetherValue = undefined;\n _this.widowControlValue = undefined;\n if (selectionFormat.firstLineIndent > 0) {\n _this.special.index = 1;\n }\n else if (selectionFormat.firstLineIndent < 0) {\n _this.special.index = 2;\n _this.leftIndentIn.value = selectionFormat.leftIndent - _this.byIn.value;\n }\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (selectionFormat.bidi) {\n _this.rtlButton.checked = true;\n _this.ltrButton.checked = false;\n }\n else {\n _this.ltrButton.checked = true;\n _this.rtlButton.checked = false;\n }\n if (isNullOrUndefined(selectionFormat.keepWithNext)) {\n _this.keepWithNext.indeterminate = true;\n }\n else {\n _this.keepWithNext.checked = selectionFormat.keepWithNext;\n }\n if (isNullOrUndefined(selectionFormat.keepLinesTogether)) {\n _this.keepLinesTogether.indeterminate = true;\n }\n else {\n _this.keepLinesTogether.checked = selectionFormat.keepLinesTogether;\n }\n if (isNullOrUndefined(selectionFormat.widowControl)) {\n _this.widowControlIn.indeterminate = true;\n }\n else {\n _this.widowControlIn.checked = selectionFormat.widowControl;\n }\n _this.contextSpacing.checked = selectionFormat.contextualSpacing;\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n paraFormat.borders = undefined;\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.spaceBeforeAuto)) {\n paraFormat.spaceBeforeAuto = _this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(_this.spaceAfterAuto)) {\n paraFormat.spaceAfterAuto = _this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = Math.abs(_this.firstLineIndent);\n if (_this.special.index === 2) {\n paraFormat.firstLineIndent = -paraFormat.firstLineIndent;\n }\n }\n if (!isNullOrUndefined(_this.bidi)) {\n paraFormat.bidi = _this.bidi;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n var textAlignment = _this.textAlignment;\n if (paraFormat.bidi) {\n if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n else if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n }\n paraFormat.textAlignment = textAlignment;\n }\n if (!isNullOrUndefined(_this.contextualSpacing)) {\n paraFormat.contextualSpacing = _this.contextualSpacing;\n }\n if (!isNullOrUndefined(_this.keepWithNextValue)) {\n paraFormat.keepWithNext = _this.keepWithNextValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepWithNext) {\n paraFormat.keepWithNext = _this.documentHelper.selection.paragraphFormat.keepWithNext;\n }\n if (!isNullOrUndefined(_this.keepLineTogetherValue)) {\n paraFormat.keepLinesTogether = _this.keepLineTogetherValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepLinesTogether) {\n paraFormat.keepLinesTogether = _this.documentHelper.selection.paragraphFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(_this.widowControlValue)) {\n paraFormat.widowControl = _this.widowControlValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.widowControl) {\n paraFormat.widowControl = _this.documentHelper.selection.paragraphFormat.widowControl;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(ParagraphDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var tabContainer = createElement('div');\n var ejtab = createElement('div');\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n //let id: string = ownerId + '_paragraph_dialog';\n var indentContainer = createElement('div', { className: 'e-de-dlg-tab-first-child e-de-para-dlg-container' });\n this.target = tabContainer;\n tabContainer.appendChild(ejtab);\n var div = createElement('div', { styles: 'width:400px;' });\n var generalDiv = createElement('div');\n var genLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var alignmentWholeDiv = createElement('div', { className: 'e-de-container-row' });\n generalDiv.appendChild(alignmentWholeDiv);\n var alignmentDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n alignmentWholeDiv.appendChild(alignmentDiv);\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n alignmentDiv.appendChild(alignment);\n var dirLabel = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Direction')\n });\n this.directionDiv = createElement('div', { className: 'e-de-container-row' });\n var rtlDiv = createElement('div', { className: 'e-de-rtl-btn-div' });\n var rtlInputELe = createElement('input', { id: ownerId + '_rtlEle' });\n rtlDiv.appendChild(rtlInputELe);\n this.directionDiv.appendChild(rtlDiv);\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n }\n var ltrDiv = createElement('div', { className: 'e-de-ltr-btn-div' });\n var ltrInputELe = createElement('input', { id: ownerId + '_ltrEle' });\n ltrDiv.appendChild(ltrInputELe);\n this.directionDiv.appendChild(ltrDiv);\n generalDiv.appendChild(dirLabel);\n generalDiv.appendChild(this.directionDiv);\n this.rtlButton = new RadioButton({\n label: locale.getConstant('Right-to-left'), enableRtl: isRtl,\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.rtlButton.appendTo(rtlInputELe);\n this.ltrButton = new RadioButton({\n label: locale.getConstant('Left-to-right'), enableRtl: isRtl,\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.ltrButton.appendTo(ltrInputELe);\n var indentionWholeDiv = createElement('div');\n var indentLabel = createElement('div', { className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Indentation')\n });\n indentionWholeDiv.appendChild(indentLabel);\n var indentionSubDiv1 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv1);\n var indentionSubDiv2 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv2);\n var beforeTextDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv1.appendChild(beforeTextDiv);\n var afterTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv1.appendChild(afterTextDiv);\n var specialDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv2.appendChild(specialDiv);\n var byDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv2.appendChild(byDiv);\n var spacingDiv = createElement('div');\n var leftSpacingDiv = createElement('div');\n spacingDiv.appendChild(leftSpacingDiv);\n // let contextSpacingStyles: string = 'float:left';\n // if (isRtl) {\n // contextSpacingStyles = 'float:right;';\n // }\n var contextSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(contextSpacingDiv);\n var rightSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(rightSpacingDiv);\n var contextInputEle = createElement('input', {\n attrs: { type: 'checkbox' },\n id: ownerId + '_contextSpacing'\n });\n contextSpacingDiv.appendChild(contextInputEle);\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n beforeTextDiv.appendChild(leftIndent);\n afterTextDiv.appendChild(rightIndent);\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n specialDiv.appendChild(special);\n byDiv.appendChild(by);\n var spaceLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Spacing') });\n var spacingWholeDiv = createElement('div', { className: 'e-de-container-row' });\n var beforeSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var afterSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(spacingWholeDiv);\n beforeSpacingWholeDiv.appendChild(beforeSpacing);\n spacingWholeDiv.appendChild(beforeSpacingWholeDiv);\n afterSpacingWholeDiv.appendChild(afterSpacing);\n spacingWholeDiv.appendChild(afterSpacingWholeDiv);\n var lineSpacingDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing',\n innerHTML: ''\n });\n var lineTypeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n lineSpacingDiv.appendChild(lineSpacing);\n rightSpacingDiv.appendChild(lineSpacingDiv);\n lineTypeDiv.appendChild(lineSpacingAt);\n rightSpacingDiv.appendChild(lineTypeDiv);\n div.appendChild(generalDiv);\n div.appendChild(indentionWholeDiv);\n div.appendChild(spacingDiv);\n indentContainer.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before text'), change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After text'), change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('By'), change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before'),\n change: this.changeBeforeSpacing,\n focus: this.focusBeforeSpacing,\n blur: this.blurBeforeSpacing,\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n var beforeSpacingSpinDown = beforeSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n beforeSpacingSpinDown.addEventListener('click', this.clickBeforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After'),\n change: this.changeAfterSpacing,\n focus: this.focusAfterSpacing,\n blur: this.blurAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n var afterSpacingSpinDown = afterSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n afterSpacingSpinDown.addEventListener('click', this.clickAfterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, step: 0.5, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('At'), change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Special') });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Line Spacing') });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ change: this.changeByTextAlignment, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Alignment') });\n this.alignment.appendTo(alignment);\n this.atIn.appendTo(lineSpacingAt);\n this.contextSpacing = new CheckBox({\n change: this.changeContextualSpacing,\n label: locale.getConstant(\"Contextual Spacing\"),\n enableRtl: isRtl\n });\n this.contextSpacing.appendTo(contextInputEle);\n indentContainer.addEventListener('keyup', instance.keyUpParagraphSettings);\n if (isRtl) {\n afterSpacingWholeDiv.classList.add('e-de-rtl');\n lineTypeDiv.classList.add('e-de-rtl');\n }\n var lineBreakContainer = createElement('div', { className: 'e-de-dlg-tab-first-child' });\n var paginationDiv = createElement('div', { className: 'e-de-para-dlg-sub-container' });\n this.paginationDiv = paginationDiv;\n var paginationLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Pagination') });\n paginationDiv.appendChild(paginationLabel);\n var widowContorlContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(widowContorlContainer);\n var keepNextContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepNextContainer);\n var keepLines = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepLines);\n var keepWithNext = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepNextContainer.appendChild(keepWithNext);\n this.keepWithNext = new CheckBox({\n change: this.changeKeepWithNext,\n label: locale.getConstant('Keep With Next'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepWithNext.appendTo(keepWithNext);\n var keepLinesTogether = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepLines.appendChild(keepLinesTogether);\n this.keepLinesTogether = new CheckBox({\n change: this.changeKeepLinesTogether,\n label: locale.getConstant('Keep Lines Together'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepLinesTogether.appendTo(keepLinesTogether);\n var widowControl = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n widowContorlContainer.appendChild(widowControl);\n this.widowControlIn = new CheckBox({\n change: this.changeWidowControl,\n label: locale.getConstant('WidowControl'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.widowControlIn.appendTo(widowControl);\n lineBreakContainer.appendChild(paginationDiv);\n var items = [\n { header: { text: locale.getConstant('Indents and Spacing') }, content: indentContainer },\n { header: { text: locale.getConstant('Line and Page Breaks') }, content: lineBreakContainer }\n ];\n this.tabObj = new Tab({ items: items, enableRtl: isRtl, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } }, ejtab);\n this.tabObj.isStringTemplate = true;\n };\n ParagraphDialog.prototype.changeAlignmentByBidi = function () {\n if (this.textAlignment === 'Left') {\n this.textAlignment = 'Right';\n }\n else if (this.textAlignment === 'Right') {\n this.textAlignment = 'Left';\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n this.alignment.index = this.getAlignmentValue(this.textAlignment);\n }\n else {\n if (this.alignment.index === 0) {\n this.textAlignment = 'Center';\n }\n else {\n this.textAlignment = 'Justify';\n }\n }\n };\n ParagraphDialog.prototype.getAlignmentValue = function (textAlignment) {\n var alignValue;\n if (textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n return alignValue;\n };\n /**\n * Applies Paragraph Format\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n var selection = this.documentHelper.selection;\n var isListBidi = paragraphFormat.bidi && selection.paragraphFormat.listId !== -1;\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.documentHelper.owner.editor.setPreviousBlockToLayout();\n this.documentHelper.owner.editorModule.initHistory('ParagraphFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n if (this.documentHelper.selection.isEmpty) {\n this.documentHelper.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n this.documentHelper.owner.editor.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.documentHelper.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.documentHelper.owner.editorModule.reLayout(selection);\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n };\n /**\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.isStyleDialog = true;\n this.paragraphFormat = paragraphFormat;\n }\n else {\n this.isStyleDialog = false;\n }\n var local = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n local.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.documentHelper.dialog.header = local.getConstant('Paragraph');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }];\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n var width = this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n this.paginationDiv.style.width = width.toString() + 'px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.special) {\n this.special.destroy();\n this.special = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[q]);\n q--;\n }\n this.target = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n *\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n get: function () {\n return this.levelNumberIn;\n },\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n get: function () {\n return this.listIn;\n },\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.documentHelper.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n this.dialog.documentHelper.abstractLists.push(abstractList);\n abstractList = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId);\n if (abstractList.levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return abstractList.levels[this.levelNumber];\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.documentHelper.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.documentHelper.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.list.abstractList = abstractList;\n this.dialog.documentHelper.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.documentHelper.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.documentHelper).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ListViewModel.prototype.destroy = function () {\n if (this.dialog && this.listIn) {\n this.dialog.documentHelper.layout.clearInvalidList(this.listIn);\n }\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ListDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.documentHelper = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onTextIndentChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onStartValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n if (!isNullOrUndefined(_this.viewModel) && !isNullOrUndefined(_this.viewModel.listLevel)) {\n _this.viewModel.listLevel.startAt = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n /**\n * @private\n * @param {any} args - Specifies the change event args.\n * @returns {void}\n */\n this.onNumberFormatChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onAlignedAtValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent = _this.alignedAt.value - _this.viewModel.listLevel.paragraphFormat.leftIndent;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onFollowCharacterValueChanged = function (args) {\n if (args.isInteracted) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onLevelPatternValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n var numberFormatTextBox = document.getElementById(_this.documentHelper.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = String.fromCharCode(61623);\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadListDialog = function () {\n _this.documentHelper.updateFocus();\n if (isNullOrUndefined(_this.documentHelper.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.documentHelper.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.documentHelper.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.documentHelper.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n _this.documentHelper.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.documentHelper.selection.paragraphFormat.setList(_this.list, true);\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.documentHelper = documentHelper;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n * @returns {WListLevel} Returns list level\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n * @returns {WList} Returns list\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n * @returns {number} Returns level number\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n /* eslint-disable-next-line max-len */\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n var bindEvent = false;\n if (!this.target) {\n this.initListDialog(locale, this.documentHelper.owner.enableRtl);\n bindEvent = true;\n }\n this.isListCharacterFormat = true;\n this.documentHelper.dialog2.header = locale.getConstant('Define new Multilevel list');\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n var buttonClass;\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n buttonClass = 'e-flat e-list-dlg-font e-de-dlg-target.e-de-rtl e-font-rtl';\n }\n else {\n buttonClass = 'e-flat e-list-dlg-font e-font';\n }\n this.documentHelper.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: buttonClass }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n this.documentHelper.dialog2.dataBind();\n if (bindEvent) {\n this.wireAndBindEvent(locale, isRtl);\n }\n this.documentHelper.dialog2.beforeOpen = this.loadListDialog;\n this.documentHelper.dialog2.close = this.closeListDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'top' };\n this.documentHelper.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n ListDialog.prototype.initListDialog = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n var divStyle;\n if (isRtl) {\n divStyle = '
';\n }\n else {\n divStyle = '
';\n }\n var numberStyleDiv = createElement('div', { innerHTML: divStyle + '' });\n div.appendChild(numberStyleDiv);\n this.numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
' });\n div.appendChild(this.numberFormatDiv);\n this.target.appendChild(div);\n var indentsDivLabelStyle;\n if (isRtl) {\n indentsDivLabelStyle = 'display:block;position:relative; ';\n }\n else {\n indentsDivLabelStyle = 'display:block; ';\n }\n var indentsDiv = createElement('div', { innerHTML: divStyle + '
' });\n this.target.appendChild(indentsDiv);\n };\n ListDialog.prototype.wireAndBindEvent = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n if (isRtl) {\n document.getElementById('e-de-list-dlg-div').classList.add('e-de-rtl');\n this.numberFormatDiv.classList.add('e-de-rtl');\n }\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false\n });\n this.startAt.addEventListener('change', this.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', this.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', this.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', this.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n this.formatInfoToolTip.content = locale.getConstant('Number format tooltip information');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.documentHelper.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.calculateAlignedAt = function () {\n if (this.viewModel.listLevel.paragraphFormat.firstLineIndent < 0) {\n return this.viewModel.listLevel.paragraphFormat.leftIndent + this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n else {\n return this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n if (isNullOrUndefined(this.listLevel.characterFormat)) {\n this.listLevel.characterFormat = new WCharacterFormat(this.viewModel.listLevel);\n }\n if (isNullOrUndefined(this.listLevel.paragraphFormat)) {\n this.listLevel.paragraphFormat = new WParagraphFormat(this.viewModel.listLevel);\n }\n //const restartByTextBox: HTMLSelectElement = document.getElementById(this.documentHelper.owner.containerId + '_restartBy') as HTMLSelectElement;\n if (!isNullOrUndefined(this.viewModel) && !isNullOrUndefined(this.viewModel.listLevel)) {\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.calculateAlignedAt();\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberFormat.style.fontFamily = this.viewModel.listLevel.characterFormat.fontFamily;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n //this.viewModel.levelNumber = this.viewModel.levelNumber;\n }\n };\n /**\n * @private\n */\n ListDialog.prototype.updateCharacterFormat = function (format) {\n this.listLevel.characterFormat.copyFormat(format);\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[l]);\n l--;\n }\n this.target = undefined;\n }\n this.documentHelper = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { BulletsAndNumberingDialog } from './index';\nimport { Query } from '@syncfusion/ej2-data';\nimport { WAbstractList } from '../list/abstract-list';\nimport { ColorPicker, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StyleDialog(documentHelper) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n /**\n *\n * @param {DropDownButtonMenuEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontButtonClicked = function () {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value.toString();\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.hex;\n };\n /**\n * @private\n * @returns {void}\n */\n this.setLeftAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Left') {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setRightAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Right') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setCenterAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Center') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setJustifyAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Justify') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.increaseBeforeAfterSpacing = function () {\n _this.paragraphFormat.beforeSpacing += 6;\n _this.paragraphFormat.afterSpacing += 6;\n };\n /**\n * @private\n * @returns {void}\n */\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.paragraphFormat.beforeSpacing >= 6) {\n _this.paragraphFormat.beforeSpacing -= 6;\n }\n else {\n _this.paragraphFormat.beforeSpacing = 0;\n }\n if (_this.paragraphFormat.afterSpacing >= 6) {\n _this.paragraphFormat.afterSpacing -= 6;\n }\n else {\n _this.paragraphFormat.afterSpacing = 0;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === _this.localObj.getConstant('Paragraph') && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.documentHelper.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n _this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked Style') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /**\n * @returns {void}\n */\n this.styleBasedOnChange = function () {\n //Based on change\n };\n /**\n * @private\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.fontDialogModule)) {\n _this.documentHelper.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.paragraphDialogModule)) {\n _this.documentHelper.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.documentHelper);\n if (_this.style instanceof WParagraphStyle && (!isNullOrUndefined(_this.style.paragraphFormat))) {\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n var styleName = _this.styleNameElement.value;\n if (styleName.length > 0) {\n var style = _this.documentHelper.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.documentHelper.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n _this.style.next = _this.documentHelper.styles.findByName(_this.styleParagraph.value);\n _this.style.characterFormat.mergeFormat(style.characterFormat);\n _this.style.paragraphFormat.mergeFormat(style.paragraphFormat, true);\n _this.updateList();\n _this.style.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n _this.documentHelper.owner.isShiftingEnabled = true;\n _this.documentHelper.owner.editorModule.layoutWholeDocument();\n _this.documentHelper.owner.isShiftingEnabled = false;\n }\n else {\n var tmpStyle = _this.getTypeValue() === 'Paragraph' ? new WParagraphStyle() : new WCharacterStyle;\n tmpStyle.copyStyle(_this.style);\n var basedOn = _this.documentHelper.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n if (styleName === _this.styleParagraph.value) {\n tmpStyle.next = tmpStyle;\n }\n else {\n tmpStyle.next = _this.documentHelper.styles.findByName(_this.styleParagraph.value);\n }\n _this.updateList();\n }\n tmpStyle.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName) : undefined;\n tmpStyle.type = _this.getTypeValue();\n tmpStyle.name = styleName;\n tmpStyle.basedOn = basedOn;\n _this.documentHelper.styles.push(tmpStyle);\n name_1 = styleName;\n _this.documentHelper.owner.editorModule.applyStyle(name_1, true);\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadStyleDialog = function () {\n _this.documentHelper.updateFocus();\n _this.isUserNextParaUpdated = false;\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n _this.styleNameElement.value = _this.editStyleName;\n name = _this.editStyleName;\n }\n _this.okButton = _this.documentHelper.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n if (!_this.isEdit && _this.style) {\n _this.style.destroy();\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeStyleDialog = function () {\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n /* eslint-disable */\n StyleDialog.prototype.initStyleDialog = function (localValue, isRtl) {\n var instance = this;\n this.localObj = localValue;\n this.target = createElement('div', { className: 'e-de-style-dialog' });\n var container = createElement('div');\n var properties = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n // let name: HTMLElement = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n // nameWholeDiv.appendChild(name);\n var nameValue = createElement('input', { className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n new TextBox({ placeholder: localValue.getConstant('Name') + ':', floatLabelType: 'Always' }, nameValue);\n var styleTypeWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // let styleType: HTMLElement = createElement('div', { className: 'e-de-style-styletype', innerHTML: });\n // styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div');\n var styleTypeValue = createElement('select');\n styleTypeValue.innerHTML = '';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({\n change: this.styleTypeChange,\n popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style type') + ':', floatLabelType: 'Always'\n });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n var styleBasedParaDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n //let styleBasedOn: HTMLElement = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: });\n //styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n var styleBasedOnValue = createElement('input');\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({\n dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style based on') + ':', floatLabelType: 'Always'\n });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n if (isRtl) {\n nameWholeDiv.classList.add('e-de-rtl');\n styleBasedOnWholeDiv.classList.add('e-de-rtl');\n styleParagraphWholeDiv.classList.add('e-de-rtl');\n }\n //let styleParagraph: HTMLElement = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: });\n //styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div');\n var styleParagraphValue = createElement('input');\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({\n dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style for following paragraph') + ':', floatLabelType: 'Always'\n });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n var formatting = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 14px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv, isRtl);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue, isRtl);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue, isRtl) {\n var _this = this;\n var formatBtn = createElement('button', {\n id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format'),\n attrs: { type: 'button' }\n });\n formatBtn.style.height = '31px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font') + '...', id: 'style_font' },\n { text: localValue.getConstant('Paragraph') + '...', id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering') + '...', id: 'style_numbering' }];\n this.styleDropdwn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn', enableRtl: isRtl,\n beforeItemRender: function (args) {\n if (_this.styleType.value === localValue.getConstant('Character')) {\n if (args.item.text === localValue.getConstant('Paragraph')) {\n args.element.classList.add('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.text === localValue.getConstant('Paragraph')) {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n },\n });\n this.styleDropdwn.appendTo(formatBtn);\n this.styleDropdwn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv, isRtl) {\n var _this = this;\n var fontFamilyElement = createElement('input', {\n id: this.target.id + '_fontName',\n });\n var fontStyle;\n var isStringTemplate = true;\n var itemTemplate = '${FontName}';\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n dataSource: fontStyle, query: new Query().select(['FontName']), fields: { text: 'FontName', value: 'value' },\n allowCustom: true, width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', enableRtl: isRtl, change: this.fontFamilyChanged,\n showClearButton: false, itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontFamilyElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'value': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () { _this.fontFamily.element.select(); };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n enableRtl: isRtl, change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.documentHelper.owner.containerId + '_style_bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', enableRtl: isRtl, change: this.fontColorUpdate, locale: this.documentHelper.owner.locale });\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.addEventListener('click', function () {\n if (_this.paragraphFormat.leftIndent >= 36) {\n _this.paragraphFormat.leftIndent -= 36;\n }\n else {\n _this.paragraphFormat.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.addEventListener('click', function () {\n _this.paragraphFormat.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button', { attrs: { type: 'button' } });\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === this.localObj.getConstant('Character')) {\n this.styleParagraph.enabled = false;\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n * @param {string} styleName - Specifies the style name.\n * @param {string} header - Specifies the header.\n * @returns {void}\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n var style = this.documentHelper.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n if (!this.isEdit) {\n this.styleType.value = 'Paragraph';\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.documentHelper.dialog2.header = header;\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.beforeOpen = this.loadStyleDialog;\n this.documentHelper.dialog2.close = this.closeStyleDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.documentHelper.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.documentHelper.lists = this.documentHelper.lists.filter(function (a) { return (a.listId !== listId); });\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.documentHelper.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.documentHelper.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.documentHelper.styles.push(charStyle);\n }\n return this.documentHelper.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n * @param {L10n} characterFormat - Specifies the character format\n * @returns {void}\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat;\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n var color = this.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n this.fontColor.value = (color === 'empty' || color === '#00000000') ? '#000000' : color;\n this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat;\n }\n if (this.paragraphFormat.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.paragraphFormat.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n StyleDialog.prototype.getTypeValue = function () {\n var type;\n if (this.styleType.value === 'Linked Style' || this.styleType.value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var styles = this.documentHelper.styles.getStyleNames(type);\n this.styleParagraph.dataSource = styles;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = styles.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = styles;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.documentHelper.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.documentHelper.owner.selection.characterFormat.styleName;\n }\n else {\n styleName = this.documentHelper.owner.selection.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n this.styleBasedOn.dataBind();\n this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n if (isNullOrUndefined(this.documentHelper.styles.findByName(styleName))) {\n this.documentHelper.owner.editor.createStyle(this.documentHelper.preDefinedStyles.get(styleName));\n }\n return this.documentHelper.styles.findByName(styleName);\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.fontColor) {\n this.fontColor.destroy();\n this.fontColor = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n this.styleType = undefined;\n }\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n this.styleBasedOn = undefined;\n }\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n this.styleParagraph = undefined;\n }\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n this.template = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n this.numberingBulletDialog = undefined;\n }\n if (this.styleDropdwn) {\n this.styleDropdwn.destroy();\n this.styleDropdwn = undefined;\n }\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BulletsAndNumberingDialog(documentHelper) {\n var _this = this;\n this.isBullet = false;\n /* eslint-disable */\n /**\n * @param args\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @param args\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = String.fromCharCode(61623);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = String.fromCharCode(61551) + String.fromCharCode(32);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = String.fromCharCode(61607);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = String.fromCharCode(61558);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = String.fromCharCode(61656);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = String.fromCharCode(61692);\n _this.fontFamily = 'Wingdings';\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadNumberingBulletDialog = function () {\n //Load\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n if (_this.documentHelper.owner.documentHelper.lists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.listFormat.list.listId = _this.documentHelper.owner.documentHelper.lists[_this.documentHelper.owner.documentHelper.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.documentHelper.owner.documentHelper.abstractLists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.abstractList.abstractListId = _this.documentHelper.owner.documentHelper.abstractLists[_this.documentHelper.owner.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id, locale);\n this.createBulletList(id, locale);\n //Initialize Tab component\n this.tabObj = new Tab({\n items: [\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Numbering') }) },\n content: this.numberListDiv\n },\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Bullets') }) },\n content: this.bulletListDiv\n }\n ],\n heightAdjustMode: 'None',\n width: 'auto',\n selecting: this.onTabSelect.bind(this)\n });\n this.tabObj.isStringTemplate = true;\n //Render initialized Tab component\n this.tabObj.appendTo(tabTarget);\n };\n BulletsAndNumberingDialog.prototype.onTabSelect = function (args) {\n if (args.selectingIndex === 1) {\n this.bulletListDiv.style.display = 'block';\n }\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id, locale) {\n this.numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n var numberListDiv = this.numberListDiv;\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag, locale);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
' + text1 + '
' + text2 + '';\n innerHTML += '
' + text3 + '
';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag, locale) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
' + locale.getConstant('None') + '
';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className, locale) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var isNone = className === 'e-bullet-none';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size',\n styles: isNone ? 'font-size:9px;text-align: center;top: 13px;left:-2px;line-height:normal;position: relative' : ''\n });\n var liNextDiv = createElement('div', { className: !isNone ? iconCss : '', innerHTML: isNone ? locale.getConstant('None') : '' });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id, locale) {\n this.bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n var bulletListDiv = this.bulletListDiv;\n bulletListDiv.style.display = 'none';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none', locale);\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n * @param {WListFormat} listFormat - Specifies the list format.\n * @param {WAbstractList} abstractList - Specifies the abstract list.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.documentHelper.dialog.header = locale.getConstant('Numbering and Bullets');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.documentHelper.dialog.close = this.closeNumberingBulletDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n this.tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.tabObj) {\n this.tabObj.destroy();\n this.tabObj = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n this.bulletListDiv = undefined;\n this.numberListDiv = undefined;\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/* eslint-disable */\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\nvar FontDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function FontDialog(documentHelper) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n this.allcaps = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n this.allCaps = undefined;\n this.isListDialog = false;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.documentHelper.owner.selection.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n _this.fontNameList.dataBind();\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n _this.fontSizeText.value = characterFormat.fontSize;\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n var fontColor = characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n _this.colorPicker.value = fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (characterFormat.allCaps) {\n _this.allcaps.checked = true;\n }\n else {\n _this.allcaps.checked = false;\n _this.allCaps = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n format.fontFamily = _this.fontFamily;\n }\n if (!isNullOrUndefined(_this.allCaps)) {\n format.allCaps = _this.allCaps;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.documentHelper.selection, format);\n }\n else {\n if (_this.isListDialog) {\n _this.documentHelper.owner.listDialogModule.updateCharacterFormat(format);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateCharacterFormat();\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.allcapsUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.allCaps = true;\n }\n else {\n _this.allCaps = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n * @returns {string} returns font style\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n * @param {string} value Specifies font style\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n FontDialog.prototype.initFontDialog = function (locale, isRtl) {\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var allCapsElement;\n var fontEffectSubDiv1;\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale, isRtl);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale, isRtl);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { className: 'e-de-container-row' });\n this.fontColorDiv = createElement('div', { className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin',\n innerHTML: locale.getConstant('Font color')\n });\n if (isRtl) {\n fontColorLabel.classList.add('e-de-rtl');\n }\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div');\n fontEffectSubDiv1 = createElement('div');\n effectLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Effects'),\n });\n fontEffectSubDiv1.appendChild(effectLabel);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n this.target.appendChild(fontEffectsDiv);\n var effectsProperties = createElement('div', { className: 'e-de-container-row' });\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-subcontainer-left' });\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv2.appendChild(strikeThroughElement);\n var checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n checkBoxDiv.appendChild(subScriptElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n allCapsElement = this.createInputElement('checkbox', this.target.id + '_allCaps', '');\n checkBoxDiv.appendChild(allCapsElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv2);\n var fontEffectSubDiv3 = createElement('div', { className: 'e-de-subcontainer-right' });\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv3.appendChild(superScriptElement);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n checkBoxDiv.appendChild(doubleStrikeThroughElement);\n fontEffectSubDiv3.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv3);\n this.target.appendChild(effectsProperties);\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000', enableRtl: isRtl, locale: this.documentHelper.owner.locale\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough'),\n enableRtl: isRtl\n });\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n label: locale.getConstant('Double strikethrough'),\n enableRtl: isRtl\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n cssClass: 'e-de-font-content-label-width',\n change: this.subscriptUpdate,\n enableRtl: isRtl\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate,\n enableRtl: isRtl\n });\n this.superscript.appendTo(superScriptElement);\n this.allcaps = new CheckBox({\n label: locale.getConstant('All caps'),\n cssClass: 'e-de-font-content-label-caps',\n change: this.allcapsUpdate,\n enableRtl: isRtl\n });\n this.allcaps.appendTo(allCapsElement);\n if (isRtl) {\n fontEffectSubDiv2.classList.add('e-de-rtl');\n fontEffectSubDiv3.classList.add('e-de-rtl');\n fontEffectSubDiv1.classList.remove('e-de-font-content-checkbox-label');\n }\n };\n FontDialog.prototype.getFontSizeDiv = function (locale, isRtl) {\n var fontSize;\n var sizeDiv;\n var id = this.documentHelper.owner.containerId;\n sizeDiv = createElement('div', { className: 'e-de-container-row' });\n var sizeSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var sizeLabel = locale.getConstant('Size');\n fontSize = createElement('select', { id: this.target.id + '_fontSize' });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-subcontainer-right',\n });\n if (isRtl) {\n sizeSubDiv2.classList.add('e-de-rtl');\n }\n var html = locale.getConstant('Underline style');\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine' });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, allowCustom: true, showClearButton: false, enableRtl: isRtl, floatLabelType: 'Always', placeholder: sizeLabel });\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: html });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale, isRtl) {\n var id = this.documentHelper.owner.containerId;\n var fontDiv = createElement('div', { className: 'e-de-container-row' });\n var fontSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var fontLabel = locale.getConstant('Font');\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n var fontValues = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontValues.length; i++) {\n fontNameValues.innerHTML += '';\n }\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-subcontainer-right' });\n if (isRtl) {\n fontSubDiv2.classList.add('e-de-rtl');\n }\n var fontStyleLabel = locale.getConstant('Font style');\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle' });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontLabel });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontStyleLabel });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @param characterFormat\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat, isListDialog) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n this.isListDialog = isListDialog;\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = locale.getConstant('Font');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.close = this.closeFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {Selection} selection Specifies the selection\n * @param {WCharacterFormat} format Specifies the character format\n * @returns {void}\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.documentHelper.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n this.documentHelper.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.documentHelper.owner.editorModule.reLayout(selection);\n }\n this.documentHelper.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.documentHelper.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.allcaps.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n if (this.allcaps) {\n this.allcaps.destroy();\n }\n this.allcaps = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphFormat } from '../format/index';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TablePropertiesDialog(documentHelper) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n this.bidi = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n this.localValue = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n /**\n * @returns {void}\n */\n this.onBeforeOpen = function () {\n _this.documentHelper.updateFocus();\n _this.loadTableProperties();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableProperties = function () {\n var selection = _this.documentHelper.selection;\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth === 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n /* eslint-disable-next-line max-len */\n var containerWidth = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n /* eslint-disable-next-line max-len */\n var tableWidth = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth);\n _this.tableFormat.preferredWidthType = 'Percent';\n /* eslint-disable-next-line max-len */\n _this.tableFormat.preferredWidth = tableWidth / HelperMethods.convertPixelToPoint(_this.documentHelper.owner.viewer.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n _this.rowFormat.height = _this.rowHeightValue;\n }\n _this.documentHelper.owner.editorModule.initComplexHistory('TableProperties');\n _this.documentHelper.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.documentHelper.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.documentHelper.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.documentHelper.owner.editorHistory.updateComplexHistory();\n _this.closeTablePropertiesDialog();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.documentHelper.owner.cellOptionsDialogModule.cellFormat;\n _this.documentHelper.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.documentHelper.owner.tableOptionsDialogModule.tableFormat;\n _this.documentHelper.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.documentHelper.dialog2.open = _this.documentHelper.selection.hideCaret.bind(_this.documentHelper.owner.viewer);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTablePropertiesDialog = function () {\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.tableFormat.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.tableFormat.bidi = true;\n }\n if (_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Left') {\n _this.tableFormat.tableAlignment = 'Right';\n }\n else if (!_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Right') {\n _this.tableFormat.tableAlignment = 'Left';\n }\n _this.activeTableAlignment(_this.tableFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.documentHelper.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n var bidi = _this.tableFormat.bidi || _this.rtlButton.checked;\n if ((element.classList.contains('e-de-table-left-alignment') && !bidi) ||\n (element.classList.contains('e-de-table-right-alignment') && bidi)) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.documentHelper.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n * @param {Event} event - Specified the event\n * @returns {void}\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n *\n * @returns {void}\n */\n this.showTableOptionsDialog = function () {\n _this.documentHelper.owner.tableOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.documentHelper.owner.bordersAndShadingDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showCellOptionsDialog = function () {\n _this.documentHelper.owner.cellOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"paraFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.paraFormatIn = new WParagraphFormat();\n return this.paraFormatIn;\n }\n return this.paraFormatIn;\n },\n set: function (value) {\n this.paraFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue, isRtl) {\n this.localValue = localValue;\n var id = this.documentHelper.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n var items = [\n { header: { text: tableHeader }, content: tableContent },\n { header: { text: rowHeader }, content: rowContent },\n { header: { text: cellHeader }, content: cellContent }\n ];\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableRowProperties(this.rowTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableCellProperties(this.cellTab, localValue, this.documentHelper.owner.enableRtl);\n this.tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n this.tabObj.isStringTemplate = true;\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[i].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[i].addEventListener('click', this.changeCellAlignment);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog2.header = localValue.getConstant('Table Properties');\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.animationSettings = { effect: 'None', duration: 400, delay: 0 };\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.beforeOpen = this.onBeforeOpen;\n this.documentHelper.dialog2.close = this.onCloseTablePropertyDialog;\n this.documentHelper.dialog2.open = this.wireEvent.bind(this);\n this.documentHelper.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.show();\n var dialogElement = this.documentHelper.dialog2.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n /**\n * @private\n * @param {TableWidget} table - Specifies the table widget.\n * @returns {void}\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.documentHelper.owner.editorHistory;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n if (!this.documentHelper.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.documentHelper.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.documentHelper.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.documentHelper.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue, isRtl) {\n var container = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeHeader = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentContainer: HTMLDivElement = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredWidthDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredWidth = createElement('input');\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var tableWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLInputElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // });\n var alignment = createElement('div', { className: 'e-de-dlg-row' });\n var alignmentContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dlg-alignment-heading'\n });\n var alignmentSubContainer = createElement('div', { className: 'e-de-container-row' });\n var classDivName = element.id + 'e-de-table-alignment e-de-table-dialog-alignment-icon';\n var leftDiv = createElement('div');\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n this.right = createElement('div', {\n //styles: 'width:54px;height:54px;margin:2px', \n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName,\n id: element.id + '_right_alignment'\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n // let leftIndentLabelMargin: string;\n // let leftIndentBoxMargin: string;\n // if (isRtl) {\n // leftIndentLabelMargin = 'left: 45px;';\n // leftIndentBoxMargin = 'left: 45px;';\n // } else {\n // leftIndentLabelMargin = 'right: 45px;';\n // leftIndentBoxMargin = 'right: 45px;';\n // }\n // this.indentingLabel = createElement('label', {\n // innerHTML: localValue.getConstant('Indent from left'),\n // //styles: leftIndentLabelMargin,\n // className: 'e-de-tbl-indent-lbl'\n // }) as HTMLLabelElement;\n // const leftIndentBox: HTMLDivElement = createElement('div', {\n // styles: 'margin-top: 15px;position: relative;' + leftIndentBoxMargin\n // });\n this.leftIndent = createElement('input');\n var tableDirHeader = createElement('div', {\n innerHTML: localValue.getConstant('Table direction'), className: 'e-de-para-dlg-heading'\n });\n var tableDirContainer = createElement('div', { className: 'e-de-dlg-row' });\n var rtlDiv = createElement('div', { className: 'e-de-tbl-rtl-btn-div' });\n var rtlInputELe = createElement('input');\n rtlDiv.appendChild(rtlInputELe);\n tableDirContainer.appendChild(rtlDiv);\n var ltrDiv = createElement('div', { className: 'e-de-tbl-ltr-btn-div' });\n var ltrInputELe = createElement('input');\n ltrDiv.appendChild(ltrInputELe);\n tableDirContainer.appendChild(ltrDiv);\n this.rtlButton = new RadioButton({\n label: localValue.getConstant('Right-to-left'),\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.rtlButton.appendTo(rtlInputELe);\n this.ltrButton = new RadioButton({\n label: localValue.getConstant('Left-to-right'),\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.ltrButton.appendTo(ltrInputELe);\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n // if (isRtl) {\n // tableOptionContiner.style.cssFloat = 'left';\n // }\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading') + '...',\n className: 'e-control e-btn e-de-ok-button',\n attrs: { type: 'button' }\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn', innerHTML: localValue.getConstant('Options') + '...',\n attrs: { type: 'button' }\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(this.leftIndent);\n alignmentSubContainer.appendChild(leftDiv);\n alignmentContainer.appendChild(alignmentHeader);\n leftDiv.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(alignmentSubContainer);\n alignmentSubContainer.appendChild(centerAlignDiv);\n alignmentSubContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignment.appendChild(alignmentContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n container.appendChild(childContainer1);\n preferredWidthDiv.appendChild(this.preferredWidth);\n container.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n alignment.appendChild(leftIndenetContainer);\n childContainer2.appendChild(preferredWidthDiv);\n childContainer2.appendChild(controlDiv);\n element.appendChild(alignment);\n element.appendChild(tableDirHeader);\n element.appendChild(tableDirContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: localValue.getConstant('Indent from left')\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width'), enableRtl: isRtl\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n this.tableWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in') });\n this.tableWidthType.appendTo(tableWidthType);\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n //childContainer2.classList.add('e-de-rtl');\n leftIndenetContainer.classList.add('e-de-rtl');\n tableOptionContiner.classList.add('e-de-rtl');\n //this.bordersAndShadingButton.classList.add('e-de-rtl');\n leftAlignDiv.classList.add('e-de-rtl');\n centerAlignDiv.classList.add('e-de-rtl');\n rightAlignDiv.classList.add('e-de-rtl');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n //const table: TableWidget = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.documentHelper.owner.viewer.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.documentHelper.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.documentHelper.owner.viewer);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.activeTableAlignment(tableFormat, false);\n if (tableFormat.bidi) {\n this.rtlButton.checked = true;\n this.ltrButton.checked = false;\n }\n else {\n this.ltrButton.checked = true;\n this.rtlButton.checked = false;\n }\n };\n TablePropertiesDialog.prototype.activeTableAlignment = function (tableFormat, isChanged) {\n var tableAlignment = isChanged ? this.tableFormat.tableAlignment : undefined;\n // Consider the TableAlignment based on the Bidirectional property.\n if (isNullOrUndefined(tableAlignment)) {\n if (tableFormat.bidi) {\n if (tableFormat.tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableFormat.tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n else {\n tableAlignment = tableFormat.tableAlignment;\n }\n }\n if (tableFormat.bidi) {\n this.leftIndentBox.enabled = tableAlignment === 'Right';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from right');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from right');\n }\n else {\n this.leftIndentBox.enabled = tableAlignment === 'Left';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from left');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from left');\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableAlignment === 'Left') {\n classList(this.left, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Center') {\n classList(this.center, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Right') {\n classList(this.right, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n * @returns {string} Resturns table alignment\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return this.ltrButton.checked ? 'Left' : 'Right';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return this.ltrButton.checked ? 'Right' : 'Left';\n }\n }\n }\n return undefined;\n };\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentDiv: HTMLDivElement = createElement('div');\n // let childDiv1Float: string;\n // if (isRtl) {\n // childDiv1Float = 'float: right;';\n // } else {\n // childDiv1Float = 'float: left;';\n // }\n var childDiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var rowHeightDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n //const child3: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const child4: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const controlDiv: HTMLDivElement = createElement('div', {className: 'e-de-subcontainer-right'}) as HTMLDivElement;\n var rowHeightType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Row height is'),\n // className: 'e-de-table-measure-lbl'\n // });\n sizeDiv.appendChild(sizeLabeldiv);\n element.appendChild(sizeDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n sizeDiv.appendChild(childDiv1);\n childdiv2.appendChild(rowHeightDiv);\n sizeDiv.appendChild(childdiv2);\n rowHeightDiv.appendChild(this.rowHeight);\n controlDiv.appendChild(rowHeightType);\n childdiv2.appendChild(controlDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-de-para-dlg-heading'\n });\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height'),\n enableRtl: isRtl\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n this.rowHeightType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Row height is') });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages'),\n enableRtl: isRtl\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page'),\n enableRtl: isRtl\n });\n this.repeatHeader.appendTo(repeatHeader);\n // if (isRtl) {\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // childdiv2.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.documentHelper.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n var enabledHeader = this.enableRepeatHeader() ? false : true;\n if (isNullOrUndefined(this.documentHelper.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.documentHelper.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n * @returns {boolean} Returns enable repeat header\n */\n TablePropertiesDialog.prototype.enableRepeatHeader = function () {\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n return startCell.ownerRow.index === 0 && endCell.ownerTable.equals(startCell.ownerTable);\n };\n //#endregion\n //#region Cell Format\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-para-dlg-heading',\n });\n //const parentdiv: HTMLDivElement = createElement('div');\n // let childdiv1Float: string;\n // if (isRtl) {\n // childdiv1Float = 'float: right';\n // } else {\n // childdiv1Float = 'float: left';\n // }\n var childdiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredCellDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredCellWidth = createElement('input', {\n attrs: { 'type': 'text' }\n });\n // let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n //const child3: HTMLDivElement = createElement('div');\n // let child4Float: string;\n // if (isRtl) {\n // child4Float = 'float: left;';\n // } else {\n // child4Float = 'float: right;';\n // }\n //const child4: HTMLDivElement = createElement('div');\n //const controlDiv: HTMLDivElement = createElement('div') as HTMLDivElement;\n var cellWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // }) as HTMLLabelElement;\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n sizeDiv.appendChild(childdiv1);\n preferredCellDiv.appendChild(this.preferredCellWidth);\n sizeDiv.appendChild(childdiv2);\n childdiv2.appendChild(preferredCellDiv);\n childdiv2.appendChild(controlDiv);\n controlDiv.appendChild(cellWidthType);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n className: 'e-de-para-dlg-heading'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment e-de-tablecell-dialog-alignment-icon';\n var divAlignment = createElement('div', {\n className: 'e-de-container-row'\n });\n var topDiv = createElement('div');\n //const divStyle: string = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n var centerAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n var bottomAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-control e-btn', attrs: { type: 'button' }\n });\n this.cellOptionButton.style.cssFloat = isRtl ? 'left' : 'right';\n divAlignment.appendChild(topDiv);\n topDiv.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width'), enableRtl: isRtl });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n this.cellWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in') });\n this.cellWidthType.appendTo(cellWidthType);\n // if (isRtl) {\n // childdiv2.classList.add('e-de-rtl');\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // this.cellOptionButton.classList.add('e-de-rtl');\n // topAlignDiv.classList.add('e-de-rtl');\n // centerAlignDiv.classList.add('e-de-rtl');\n // bottomAlignDiv.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.documentHelper.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n classList(this.cellTopAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n classList(this.cellCenterAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n classList(this.cellBottomAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[j];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n };\n /**\n * @private\n * @returns {string} - Returns the alignement.\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.documentHelper.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n *\n * @returns {void}\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.documentHelper = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n if (this.tableFormatIn) {\n this.tableFormatIn.destroy();\n }\n if (this.cellFormatIn) {\n this.cellFormatIn.destroy();\n }\n this.tableFormatIn = undefined;\n this.cellFormatIn = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { classList, createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BordersAndShadingDialog(documentHelper) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.isShadingChanged = false;\n /**\n * @private\n * @returns {void}\n */\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.documentHelper.owner.tablePropertiesDialogModule;\n var selectedCell = _this.documentHelper.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder('top');\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder('bottom');\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder('left');\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder('right');\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder('horizontal');\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder('vertical');\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder('diagonalDown');\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder('diagonalUp');\n }\n }\n var shading = new WShading();\n var editorModule = _this.documentHelper.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.value === 'Cell') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Table') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n var currentTableFormat = _this.documentHelper.owner.selection.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n _this.isShadingChanged = currentTableFormat.shading.backgroundColor !== shading.backgroundColor;\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Paragraph') {\n var isNoneBorder = _this.noneDiv.classList.contains('e-de-table-border-inside-setting-click');\n if (!isNullOrUndefined(_this.paragraphFormat)) {\n editorModule.applyBordersInternal(_this.paragraphFormat.borders, isNoneBorder ? new WBorders() : borders);\n }\n else {\n editorModule.onApplyParagraphFormat('borders', isNoneBorder ? new WBorders() : borders, false, false);\n }\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeBordersShadingsDialog = function () {\n _this.paragraphFormat = undefined;\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n // let targetDiv: HTMLDivElement;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n if (_this.ulelementShading.value === 'Paragraph') {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n }\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n // const tableBorderDialog: HTMLElement = this.target;\n var tableBorderDialogId = _this.target.id;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellPreviewBoxes = function () {\n //this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.value === 'Cell') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else if (_this.ulelementShading.value === 'Table') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.visibility = 'visible';\n _this.previewDivTopCenterContainer.style.visibility = 'visible';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else {\n _this.shadingColorPicker.disabled = true;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewLeftDiagonalDiv.style.display = 'none';\n _this.previewRightDiagonalDiv.style.display = 'none';\n classList(_this.noneDivTransparent, ['e-de-para-border-none-setting'], ['e-de-table-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-para-border-box-setting'], ['e-de-table-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-para-border-shadow-setting'], ['e-de-table-border-all-setting']);\n classList(_this.customDivTransparent, ['e-de-para-border-custom-setting'], ['e-de-table-border-custom-setting']);\n }\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.documentHelper = documentHelper;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n * @param {L10n} localeValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'),\n className: 'e-de-table-border-heading'\n });\n var settingAndPreviewContainer = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var settingsContiner = createElement('div', {});\n var styleContainer = createElement('div', {});\n var previewContiner = createElement('div', {\n className: 'e-de-table-border-preview-container'\n });\n var previewSubContainer1 = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var previewSubContainer2 = createElement('div', {});\n var styleSubContainer = createElement('div', {\n className: 'e-de-container-row'\n });\n var dropdownListDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var dropDownList = createElement('select', {});\n dropDownList.innerHTML = '';\n var widthcontainerDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var widthNumericDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var widthNumeric = createElement('input', {});\n var colorDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'),\n className: 'e-de-table-border-clr-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'),\n className: 'e-de-table-setting-heading'\n });\n var settingsSubContiner = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container',\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container',\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container',\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container',\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n if (isRtl) {\n this.noneDivTransparent.classList.add('e-de-rtl');\n this.boxDivTransparent.classList.add('e-de-rtl');\n this.allDivTransparent.classList.add('e-de-rtl');\n this.customDivTransparent.classList.add('e-de-rtl');\n }\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading',\n });\n this.previewDiv = createElement('div', {\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div',\n styles: 'position: relative'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:111px;left: 38px;top: -17px;transform: rotate(135deg); background-color: black',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 111px;left: 38px;top: -17px;transform:rotate(45deg); background-color: black',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 80px;position: absolute;left: 39px;top: -1px; background-color: black',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 80px;height: 1px;position: absolute;left: -1px;top: 41px; background-color: black',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n var previewDivVerticalContainer = createElement('div');\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'margin-top: 0',\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n var previewDivHorizontalContainer = createElement('div', { className: 'e-de-dlg-row' });\n this.previewDivBottomLeftContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {});\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading',\n });\n var shadings = createElement('div', { className: 'e-de-dlg-row' });\n var colorPickerDiv = createElement('div', { className: 'e-de-table-border-clr-left-container' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-border-clr-heading',\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color',\n });\n var shdApply = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var ulelementShading = createElement('input', {\n id: this.target.id + '_shading'\n });\n var ulelementShadingValue = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell ') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n shdApply.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(settingsSubContiner);\n settingsSubContiner.appendChild(noneDivContainer);\n settingsSubContiner.appendChild(boxDivContainer);\n settingsSubContiner.appendChild(allDivContainer);\n settingsSubContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(previewSubContainer1);\n previewSubContainer1.appendChild(previewDivVerticalContainer);\n previewSubContainer1.appendChild(previewSubContainer2);\n previewSubContainer2.appendChild(this.previewDiv);\n previewSubContainer2.appendChild(previewDivHorizontalContainer);\n this.previewDiv.appendChild(this.previewLeftDiagonalDiv);\n this.previewDiv.appendChild(this.previewRightDiagonalDiv);\n this.previewDiv.appendChild(this.previewHorizontalDiv);\n this.previewDiv.appendChild(this.previewVerticalDiv);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomLeftContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomcenterContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomRightContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivDiagonalRightContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopTopContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopCenterContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopBottomContainer);\n previewDivVerticalContainer.appendChild(this.previewDivLeftDiagonalContainer);\n shadings.appendChild(colorPickerDiv);\n colorPickerDiv.appendChild(label);\n colorPickerDiv.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleSubContainer);\n styleSubContainer.appendChild(dropdownListDiv);\n dropdownListDiv.appendChild(dropDownList);\n styleContainer.appendChild(widthcontainerDiv);\n widthcontainerDiv.appendChild(widthNumericDiv);\n widthNumericDiv.appendChild(widthNumeric);\n widthcontainerDiv.appendChild(colorDiv);\n colorDiv.appendChild(colorText);\n colorDiv.appendChild(borderColorPickerElement);\n settingAndPreviewContainer.appendChild(settingsContiner);\n settingAndPreviewContainer.appendChild(previewContiner);\n this.target.appendChild(displayText);\n this.target.appendChild(settingAndPreviewContainer);\n this.target.appendChild(styleContainer);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0, min: 0, max: 6, decimals: 2,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Width'),\n enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n this.borderStyle = new DropDownList({\n popupHeight: '150px', index: 1,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Style'),\n enableRtl: isRtl\n });\n this.borderStyle.appendTo(dropDownList);\n this.ulelementShading = new DropDownList({\n dataSource: ulelementShadingValue,\n fields: { text: 'Name', value: 'Value' },\n change: this.applyTableCellPreviewBoxes, index: 1,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Apply To'),\n enableRtl: isRtl\n });\n this.ulelementShading.appendTo(ulelementShading);\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker'\n });\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#FFFFFF', change: this.applyPreviewTableBackgroundColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker'\n });\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n if (isRtl) {\n label.classList.add('e-de-rtl');\n }\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n // const selection: Selection = this.documentHelper.selection;\n var editorModule = this.documentHelper.owner.editorModule;\n if (this.ulelementShading.value !== 'Paragraph') {\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.ulelementShading.value === 'Cell') {\n editorModule.onCellFormat(this.cellFormat);\n }\n else if (this.ulelementShading.value === 'Table') {\n editorModule.onTableFormat(this.tableFormat, this.isShadingChanged);\n }\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function (type) {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.text;\n border.lineWidth = this.borderWidth.value;\n if (type === 'left' || type === 'right') {\n border.space = 4;\n }\n else {\n border.space = 1;\n }\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadBordersShadingsPropertiesDialog(localeValue);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.header = localeValue.getConstant('Borders and Shading');\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.closeBordersShadingsDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[j].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[j].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[j].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n else {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n }\n else {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ele.style[property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[property] = 'block';\n }\n else {\n ele.style[property] = 'none';\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function (localeValue) {\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(this.documentHelper.selection.tableFormat.table)) {\n this.shadingContiner.style.display = 'block';\n this.ulelementShading.dataSource = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var tableFormat = this.documentHelper.selection.tableFormat.table.tableFormat;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n this.cloneBorders(tableFormat.borders);\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n this.ulelementShading.value = 'Table';\n this.shadingColorPicker.value = fillColor;\n this.shadingColorPicker.disabled = false;\n }\n }\n else {\n this.shadingContiner.style.display = 'none';\n this.ulelementShading.dataSource = [\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var paraFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n this.ulelementShading.value = 'Paragraph';\n this.cloneBorders(paraFormat.borders);\n var border = this.getSelectionBorderFormat();\n if (!border.hasValues()) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0.5;\n }\n else {\n lineStyle = this.getLineStyle(border.lineStyle);\n borderColor = border.color;\n borderWidth = border.lineWidth;\n }\n this.shadingColorPicker.disabled = true;\n }\n this.borderColorPicker.value = borderColor;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n BordersAndShadingDialog.prototype.getSelectionBorderFormat = function () {\n var border = new WBorder();\n var borders = this.documentHelper.selection.paragraphFormat.borders;\n if (borders.top.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.top);\n }\n else if (borders.left.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.left);\n }\n else if (borders.bottom.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.bottom);\n }\n else if (borders.right.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.right);\n }\n return border;\n };\n BordersAndShadingDialog.prototype.copyToBorder = function (border, selectionBorder) {\n if (!isNullOrUndefined(selectionBorder.lineStyle)) {\n border.lineStyle = selectionBorder.lineStyle;\n }\n if (!isNullOrUndefined(selectionBorder.color)) {\n border.color = selectionBorder.color;\n }\n if (!isNullOrUndefined(selectionBorder.lineWidth)) {\n border.lineWidth = selectionBorder.lineWidth;\n }\n return border;\n };\n /* eslint-disable */\n BordersAndShadingDialog.prototype.cloneBorders = function (borders) {\n var topBorder = false;\n var bottomBorder = false;\n var leftBorder = false;\n var rightBorder = false;\n var horizontalBorder = false;\n var verticalBorder = false;\n var diagonalDownBorder = false;\n var customBorder = false;\n var diagonalUpBorder = false;\n if (borders !== null) {\n if (borders.top && (borders.top.hasNoneStyle || borders.top.lineStyle !== 'None')) {\n topBorder = true;\n }\n if (borders.bottom && (borders.bottom.hasNoneStyle || borders.bottom.lineStyle !== 'None')) {\n bottomBorder = true;\n }\n if (borders.left && (borders.left.hasNoneStyle || borders.left.lineStyle !== 'None')) {\n leftBorder = true;\n }\n if (borders.right && (borders.right.hasNoneStyle || borders.right.lineStyle !== 'None')) {\n rightBorder = true;\n }\n if (borders.horizontal && (borders.horizontal.hasNoneStyle || borders.horizontal.lineStyle !== 'None')) {\n horizontalBorder = true;\n }\n if (borders.vertical && (borders.vertical.hasNoneStyle || borders.vertical.lineStyle !== 'None')) {\n verticalBorder = true;\n }\n if (borders.diagonalDown && (borders.diagonalDown.hasNoneStyle || borders.diagonalDown.lineStyle !== 'None')) {\n diagonalDownBorder = true;\n }\n if (borders.diagonalUp && (borders.diagonalUp.hasNoneStyle || borders.diagonalUp.lineStyle !== 'None')) {\n diagonalUpBorder = true;\n }\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder)) {\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder || !horizontalBorder\n || !verticalBorder || diagonalUpBorder || diagonalDownBorder)) {\n if ((topBorder && bottomBorder && leftBorder && rightBorder && horizontalBorder && verticalBorder\n && !diagonalUpBorder && !diagonalDownBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('all');\n this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n }\n else if ((leftBorder && bottomBorder && topBorder && rightBorder && !horizontalBorder && !verticalBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('box');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else {\n customBorder = true;\n }\n }\n else {\n customBorder = true;\n }\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n if (!topBorder && !bottomBorder && !leftBorder && !rightBorder && !horizontalBorder && !verticalBorder) {\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else if (customBorder) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '0px';\n }\n }\n if (verticalBorder) {\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (horizontalBorder) {\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n }\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 1;\n case 'Dot': return 2;\n case 'DashSmallGap': return 3;\n case 'DashLargeGap': return 4;\n case 'DashDot': return 5;\n case 'DashDotDot': return 6;\n case 'Double': return 7;\n case 'Triple': return 8;\n case 'ThinThickSmallGap': return 9;\n case 'ThickThinSmallGap': return 10;\n case 'ThinThickThinSmallGap': return 11;\n case 'ThinThickMediumGap': return 12;\n case 'ThickThinMediumGap': return 13;\n case 'ThinThickThinMediumGap': return 14;\n case 'ThinThickLargeGap': return 15;\n case 'ThickThinLargeGap': return 16;\n case 'ThinThickThinLargeGap': return 17;\n case 'SingleWavy': return 18;\n case 'DoubleWavy': return 19;\n case 'DashDotStroked': return 20;\n case 'Emboss3D': return 21;\n case 'Engrave3D': return 22;\n case 'Outset': return 23;\n case 'Inset': return 24;\n case 'Thick': return 25;\n }\n return 0;\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n if (!isNullOrUndefined(this.borderColorPicker)) {\n this.borderColorPicker.destroy();\n }\n this.borderColorPicker = undefined;\n if (!isNullOrUndefined(this.shadingColorPicker)) {\n this.shadingColorPicker.destroy();\n }\n this.shadingColorPicker = undefined;\n if (!isNullOrUndefined(this.ulelementShading)) {\n this.ulelementShading.destroy();\n }\n this.ulelementShading = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.noneDiv = undefined;\n this.customDiv = undefined;\n this.allDiv = undefined;\n this.boxDiv = undefined;\n this.documentHelper = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.documentHelper.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n * @returns {WTableFormat} - Returns table format.\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default cell margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, false);\n var div = createElement('div');\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default cell spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6Padding;\n if (isRtl) {\n td6Padding = 'padding-right:25px;';\n }\n else {\n td6Padding = 'padding-left:25px;';\n }\n var td6 = createElement('td', { styles: td6Padding });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 174,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow spacing between cells'),\n change: this.changeAllowSpaceCheckBox,\n enableRtl: isRtl,\n cssClass: 'e-de-tbl-margin-sub-header'\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat) {\n this.documentHelper.owner.editorHistory.initComplexHistory(this.documentHelper.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat);\n };\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat) {\n this.documentHelper.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat);\n };\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat) {\n var ownerTable = this.documentHelper.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.documentHelper.owner.viewer);\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentBaseHistoryInfo)) {\n this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies the table format\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n if (this.allowSpaceCheckBox.checked) {\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n documentLocale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = documentLocale.getConstant('Table Options');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n // this.documentHelper.dialog.cssClass = 'e-de-table-margin-size';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function CellOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.documentHelper.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n * @returns {WCellFormat} - Returns cell format.\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue, isRtl) {\n this.owner = this.documentHelper.owner.viewer;\n this.target = createElement('div', {\n className: 'e-de-table-cell-margin-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'padding-bottom: 8px;padding-top: 8px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-separator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, true);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable,\n enableRtl: isRtl\n });\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localizeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = localizeValue.getConstant('Cell Options');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n * @param {WCellFormat} cellFormat Specifies cell format.\n * @returns {void}\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.documentHelper.owner.editorHistory.initComplexHistory(this.documentHelper.selection, 'CellMarginsSelection');\n this.documentHelper.owner.editorModule.initHistory('CellOptions');\n /* eslint-disable max-len */\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner);\n this.applyCellMarginValue(this.documentHelper.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.documentHelper.selection.start, this.documentHelper.selection.end, cellFormat);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection, false);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n };\n CellOptionsDialog.prototype.applyCellMarginValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellMarginValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* eslint-disable max-len */\n cellFormat = this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[i].cellFormat, cellFormat);\n }\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var y = 0; y < this.target.childNodes.length; y++) {\n this.target.removeChild(this.target.childNodes[y]);\n y--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n * @param {CellOptionsDialog | TableOptionsDialog} dialog - Specifies cell options dialog.\n * @param {HTMLDivElement} div - Specifies the html element.\n * @param {L10n} locale - Specifies the locale\n * @returns {void}\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale, cellOptions) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('div');\n var tr1 = createElement('div', { className: 'e-de-container-row' });\n var td1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td1.appendChild(topTextBox);\n var td2 = createElement('div', { className: 'e-de-subcontainer-right' });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('div', { className: cellOptions ? 'e-de-dlg-row' : 'e-de-container-row' });\n var td3 = createElement('div', { className: 'e-de-subcontainer-left' });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td3.appendChild(bottomTextBox);\n var td4 = createElement('div', { className: 'e-de-subcontainer-right' });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Top'),\n floatLabelType: 'Always'\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Left'),\n floatLabelType: 'Always'\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Bottom'),\n floatLabelType: 'Always'\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Right'),\n floatLabelType: 'Always'\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StylesDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.modifyStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.styleName = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.addNewStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show();\n };\n this.documentHelper = documentHelper;\n }\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string[]} styles - Specifies the styles.\n * @param {boolean} isRtl - Specifies the is rtl.\n * @returns {void}\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-de-para-dlg-heading' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview'\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('New') + '...', id: 'new',\n attrs: { type: 'button' }\n });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var styles = this.updateStyleNames();\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles, this.documentHelper.owner.enableRtl);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.header = localValue.getConstant('Styles');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n StylesDialog.prototype.updateStyleNames = function () {\n var collection = this.documentHelper.owner.documentHelper.styles.getStyleNames('Paragraph');\n var styleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var defaultStyleNames = this.defaultStyleName(styleNames);\n var finalList = collection.concat(defaultStyleNames).filter(function (v, i, a) { return a.indexOf(v) === i; });\n return finalList;\n };\n StylesDialog.prototype.defaultStyleName = function (styleNames) {\n var styleName = [];\n for (var index = 0; index < styleNames.length; index++) {\n styleName.push(styleNames[index]);\n }\n return styleName;\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.hideObjects = function () {\n this.documentHelper.dialog.hide();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n this.styleName = undefined;\n this.localValue = undefined;\n this.target = undefined;\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","/* eslint-disable */\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextElementBox, ErrorTextElementBox } from '../viewer/page';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Spell check dialog\n */\nvar SpellCheckDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function SpellCheckDialog(documentHelper) {\n var _this = this;\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.selectedText = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.clearSelectionHighlight();\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.manageReplace('Ignore Once', _this.elementBox);\n _this.removeErrors();\n _this.parent.spellChecker.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreAllClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n var text = _this.elementBox.text;\n _this.parent.spellChecker.handleIgnoreAllItems({ element: _this.elementBox, text: text });\n _this.parent.spellChecker.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.addToDictClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.handleAddToDictionary({ element: _this.elementBox, text: _this.elementBox.text });\n if (_this.parent.spellChecker.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellChecker.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.manageReplace(_this.selectedText, _this.elementBox);\n _this.removeErrors();\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.dialog.content = '';\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n showSpinner(_this.documentHelper.dialog.element);\n var elements = _this.parent.spellChecker.errorWordCollection.get(_this.errorText);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] instanceof ErrorTextElementBox && !elements[i].ischangeDetected) {\n _this.parent.spellChecker.manageReplace(_this.selectedText, elements[i]);\n }\n else if (elements[i] instanceof TextElementBox) {\n var matchResults = _this.parent.spellChecker.getMatchedResultsFromElement(elements[i]);\n var results = matchResults.textResults;\n var markIndex = (elements[i].ischangeDetected) ?\n elements[i].start.offset : elements[i].line.getOffset(elements[i], 0);\n _this.parent.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, elements[i], false, null, markIndex);\n for (var j = 0; j < results.length; j++) {\n var element = _this.parent.spellChecker.createErrorElementWithInfo(results.innerList[j], elements[i]);\n _this.parent.spellChecker.manageReplace(_this.selectedText, element);\n }\n }\n }\n if (_this.parent.spellChecker.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellChecker.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.dialog.content = '';\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n this.documentHelper = documentHelper;\n createSpinner({ target: this.documentHelper.dialog.element, cssClass: 'e-spin-overlay' });\n }\n Object.defineProperty(SpellCheckDialog.prototype, \"parent\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SpellCheckDialog.prototype.getModuleName = function () {\n return 'SpellCheckDialog';\n };\n SpellCheckDialog.prototype.removeErrors = function () {\n if (!isNullOrUndefined(this.errorText) && this.parent.spellChecker.errorWordCollection.containsKey(this.errorText)) {\n var textElement = this.parent.spellChecker.errorWordCollection.get(this.errorText);\n textElement.splice(0, 1);\n if (textElement.length === 0) {\n this.parent.spellChecker.errorWordCollection.remove(this.errorText);\n }\n }\n if (this.parent.spellChecker.errorWordCollection.length === 0) {\n this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.show = function (error, elementbox) {\n this.target = undefined;\n this.localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.updateSuggestionDialog(error, elementbox);\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.updateSuggestionDialog = function (error, elementBox) {\n var _this = this;\n this.elementBox = elementBox;\n var suggestions;\n if (this.isSpellChecking) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.parent.spellChecker.callSpellChecker(this.parent.spellChecker.languageID, error, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n suggestions = jsonObject.Suggestions;\n _this.isSpellChecking = false;\n _this.handleRetrievedSuggestion(error, suggestions);\n });\n }\n else {\n error = this.parent.spellChecker.manageSpecialCharacters(error, undefined, true);\n suggestions = this.parent.spellChecker.errorSuggestions.containsKey(error) ?\n this.parent.spellChecker.errorSuggestions.get(error) : [];\n this.handleRetrievedSuggestion(error, suggestions);\n }\n };\n SpellCheckDialog.prototype.handleRetrievedSuggestion = function (error, suggestions) {\n error = this.parent.spellChecker.manageSpecialCharacters(error, undefined, true);\n this.initSpellCheckDialog(this.localValue, error, suggestions);\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = this.localValue.getConstant('Spelling Editor');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localValue.getConstant('Cancel'), cssClass: 'e-control e-flat', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n hideSpinner(this.documentHelper.dialog.element);\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string} error - Specifies the error text.\n * @param {string[]} suggestion - Specifies the suggestion.\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n SpellCheckDialog.prototype.initSpellCheckDialog = function (localValue, error, suggestion, isRtl) {\n var id = this.documentHelper.owner.containerId + '_add_SpellCheck';\n this.target = createElement('div', { id: id, className: 'e-de-insert-spellchecker' });\n this.errorText = error;\n var textContainer = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Spelling')\n });\n this.target.appendChild(textContainer);\n var spellContainer = createElement('div', { className: 'e-de-spellcheck-error-container' });\n var listviewDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n spellContainer.appendChild(listviewDiv);\n this.spellingListView = new ListView({\n dataSource: [error],\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.spellingListView.appendTo(listviewDiv);\n var buttonDiv = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n spellContainer.appendChild(buttonDiv);\n var ignoreButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore') });\n buttonDiv.appendChild(ignoreButtonElement);\n var ignorebutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignorebutton.appendTo(ignoreButtonElement);\n ignoreButtonElement.addEventListener('click', this.onIgnoreClicked);\n var ignoreAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore All') });\n buttonDiv.appendChild(ignoreAllButtonElement);\n var ignoreAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignoreAllbutton.appendTo(ignoreAllButtonElement);\n ignoreAllButtonElement.addEventListener('click', this.onIgnoreAllClicked);\n var addDictButtonElement = createElement('button', { innerHTML: localValue.getConstant('Add to Dictionary') });\n buttonDiv.appendChild(addDictButtonElement);\n var addDictButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n addDictButton.appendTo(addDictButtonElement);\n addDictButtonElement.addEventListener('click', this.addToDictClicked);\n this.target.appendChild(spellContainer);\n var suggestionDiv = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Suggestions')\n });\n this.target.appendChild(suggestionDiv);\n var suggestionContainer = createElement('div', { className: 'e-de-spellcheck-suggestion-container' });\n this.target.appendChild(suggestionContainer);\n var suggestListDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n suggestionContainer.appendChild(suggestListDiv);\n this.suggestionListView = new ListView({\n dataSource: suggestion,\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.suggestionListView.appendTo(suggestListDiv);\n this.suggestionListView.addEventListener('select', this.selectHandler);\n var suggestBtnContainder = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n suggestionContainer.appendChild(suggestBtnContainder);\n var changeButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change') });\n suggestBtnContainder.appendChild(changeButtonElement);\n var changeButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeButton.appendTo(changeButtonElement);\n changeButtonElement.addEventListener('click', this.changeButtonClicked);\n var changeAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change All') });\n suggestBtnContainder.appendChild(changeAllButtonElement);\n var changeAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeAllbutton.appendTo(changeAllButtonElement);\n changeAllButtonElement.addEventListener('click', this.changeAllButtonClicked);\n if (isNullOrUndefined(suggestion) || suggestion.length === 0) {\n changeButton.disabled = true;\n changeAllbutton.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n SpellCheckDialog.prototype.destroy = function () {\n if (this.target) {\n this.target.remove();\n this.target = undefined;\n }\n if (this.elementBox) {\n this.elementBox.destroy();\n this.elementBox = undefined;\n }\n this.documentHelper = undefined;\n if (this.spellingListView) {\n this.spellingListView.destroy();\n this.spellingListView = undefined;\n }\n if (this.suggestionListView) {\n this.suggestionListView.destroy();\n this.suggestionListView = undefined;\n }\n };\n return SpellCheckDialog;\n}());\nexport { SpellCheckDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, CheckBoxFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\n/**\n * Form field checkbox dialog is used to modify the value in checkbox form field.\n */\nvar CheckBoxFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function CheckBoxFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'exact') {\n _this.autoButton.checked = !_this.exactButton.checked;\n _this.exactlyNumber.enabled = true;\n }\n else {\n _this.exactButton.checked = !_this.autoButton.checked;\n _this.exactlyNumber.enabled = false;\n }\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirect = function (event) {\n if (event.value === 'check') {\n _this.notCheckedButton.checked = !_this.checkedButton.checked;\n }\n else {\n _this.checkedButton.checked = !_this.notCheckedButton.checked;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertCheckBoxField = function () {\n _this.closeCheckBoxField();\n var checkBoxField = new CheckBoxFormField();\n checkBoxField.defaultValue = _this.checkedButton.checked;\n checkBoxField.name = _this.bookmarkInputText.value;\n checkBoxField.helpText = _this.tooltipInputText.value;\n checkBoxField.checked = checkBoxField.defaultValue;\n checkBoxField.enabled = _this.checBoxEnableElement.checked;\n if (_this.exactButton.checked) {\n checkBoxField.sizeType = 'Exactly';\n checkBoxField.size = _this.exactlyNumber.value;\n }\n else {\n checkBoxField.sizeType = 'Auto';\n checkBoxField.size = 11;\n }\n _this.owner.editor.editFormField('CheckBox', checkBoxField);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCheckBoxField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(CheckBoxFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n CheckBoxFormFieldDialog.prototype.getModuleName = function () {\n return 'CheckBoxFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.initCheckBoxDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var headingLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Check box size')\n });\n var sizeParentDiv = createElement('div', { className: 'e-de-container-row' });\n var autoDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var exactDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var autoEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n var exactEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n this.autoButton = new RadioButton({\n label: localValue.getConstant('Auto'), cssClass: 'e-small', change: this.changeBidirectional, checked: true,\n enableRtl: isRtl\n });\n this.exactButton = new RadioButton({\n label: localValue.getConstant('Exactly'), value: 'exact', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.exactNumberDiv = createElement('div', { className: 'e-de-ff-chck-exact' });\n var exactNumber = createElement('input', { attrs: { 'type': 'text' } });\n this.exactlyNumber = new NumericTextBox({\n format: 'n', value: 10, min: 1, max: 1584, enablePersistence: false, enabled: false, cssClass: 'e-de-check-exactnumbr-width',\n enableRtl: isRtl\n });\n var defaultValueLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default value')\n });\n var defaultcheckDiv = createElement('div', { className: 'e-de-container-row' });\n var notcheckDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var checkDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var notcheckEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n var checkEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n this.notCheckedButton = new RadioButton({\n label: localValue.getConstant('Not checked'), enableRtl: isRtl, cssClass: 'e-small', change: this.changeBidirect\n });\n this.checkedButton = new RadioButton({\n label: localValue.getConstant('Checked'), value: 'check', enableRtl: isRtl, cssClass: 'e-small',\n change: this.changeBidirect, checked: true\n });\n var fieldSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var settingsTotalDiv = createElement('div', { className: 'e-de-container-row' });\n var totalToolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var totalBookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n this.bookmarkInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var checkBoxEnableDiv = createElement('div');\n var checBoxEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.checBoxEnableElement = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Check box enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n autoDiv.classList.add('e-de-rtl');\n exactDiv.classList.add('e-de-rtl');\n this.exactNumberDiv.classList.add('e-de-rtl');\n notcheckDiv.classList.add('e-de-rtl');\n checkDiv.classList.add('e-de-rtl');\n totalToolTipDiv.classList.add('e-de-rtl');\n totalBookmarkDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(defaultValueLabel);\n dialogDiv.appendChild(defaultcheckDiv);\n defaultcheckDiv.appendChild(notcheckDiv);\n notcheckDiv.appendChild(notcheckEle);\n this.notCheckedButton.appendTo(notcheckEle);\n defaultcheckDiv.appendChild(checkDiv);\n checkDiv.appendChild(checkEle);\n this.checkedButton.appendTo(checkEle);\n dialogDiv.appendChild(headingLabel);\n dialogDiv.appendChild(sizeParentDiv);\n sizeParentDiv.appendChild(autoDiv);\n autoDiv.appendChild(autoEle);\n this.autoButton.appendTo(autoEle);\n sizeParentDiv.appendChild(exactDiv);\n exactDiv.appendChild(exactEle);\n this.exactButton.appendTo(exactEle);\n exactDiv.appendChild(this.exactNumberDiv);\n this.exactNumberDiv.appendChild(exactNumber);\n this.exactlyNumber.appendTo(exactNumber);\n dialogDiv.appendChild(fieldSettingsLabel);\n dialogDiv.appendChild(settingsTotalDiv);\n settingsTotalDiv.appendChild(totalToolTipDiv);\n settingsTotalDiv.appendChild(totalBookmarkDiv);\n totalToolTipDiv.appendChild(this.tooltipInputText);\n totalBookmarkDiv.appendChild(this.bookmarkInputText);\n dialogDiv.appendChild(checkBoxEnableDiv);\n checkBoxEnableDiv.appendChild(checBoxEnableEle);\n this.checBoxEnableElement.appendTo(checBoxEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInputText);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInputText);\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initCheckBoxDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadCheckBoxDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Check Box Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '400px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertCheckBoxField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.loadCheckBoxDialog = function () {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var fieldData = this.fieldBegin.formFieldData;\n if (!fieldData.defaultValue) {\n this.checkedButton.checked = false;\n this.notCheckedButton.checked = true;\n }\n else {\n this.checkedButton.checked = true;\n this.notCheckedButton.checked = false;\n }\n if (fieldData.sizeType !== 'Auto') {\n this.exactButton.checked = true;\n this.autoButton.checked = false;\n this.exactlyNumber.enabled = true;\n }\n else {\n this.autoButton.checked = true;\n this.exactButton.checked = false;\n this.exactlyNumber.enabled = false;\n }\n if (fieldData.size) {\n this.exactlyNumber.value = fieldData.size;\n }\n if (fieldData.enabled) {\n this.checBoxEnableElement.checked = true;\n }\n else {\n this.checBoxEnableElement.checked = false;\n }\n if (fieldData.name && fieldData.name !== '') {\n this.bookmarkInputText.value = fieldData.name;\n }\n else {\n this.bookmarkInputText.value = '';\n }\n if (fieldData.helpText && fieldData.helpText !== '') {\n this.tooltipInputText.value = fieldData.helpText;\n }\n else {\n this.tooltipInputText.value = '';\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.destroy = function () {\n var checkBoxDialogTarget = this.target;\n if (checkBoxDialogTarget) {\n if (checkBoxDialogTarget.parentElement) {\n checkBoxDialogTarget.parentElement.removeChild(checkBoxDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n if (this.autoButton) {\n this.autoButton.destroy();\n this.autoButton = undefined;\n }\n if (this.exactButton) {\n this.exactButton.destroy();\n this.exactButton = undefined;\n }\n if (this.notCheckedButton) {\n this.notCheckedButton.destroy();\n this.notCheckedButton = undefined;\n }\n if (this.checkedButton) {\n this.checkedButton.destroy();\n this.checkedButton = undefined;\n }\n this.bookmarkInputText = undefined;\n this.tooltipInputText = undefined;\n if (this.checBoxEnableElement) {\n this.checBoxEnableElement.destroy();\n this.checBoxEnableElement = undefined;\n }\n if (this.exactlyNumber) {\n this.exactlyNumber.destroy();\n this.exactlyNumber = undefined;\n }\n this.exactNumberDiv = undefined;\n };\n return CheckBoxFormFieldDialog;\n}());\nexport { CheckBoxFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, TextFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * Form field text dialog is used to modify the value in text form field.\n */\nvar TextFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function TextFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.updateTextFormtas = function () {\n var defautText = _this.updateFormats(_this.defaultTextInput.value);\n _this.defaultTextInput.value = !isNullOrUndefined(defautText) ? defautText : '';\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertTextField = function () {\n var valid = true;\n if (_this.typeDropDown.value === 'Date') {\n valid = _this.isValidDateFormat();\n }\n if (valid) {\n _this.updateTextFormtas();\n if (_this.defaultTextInput.value.length > _this.maxLengthNumber.value && !isNullOrUndefined(_this.maxLengthNumber.value) &&\n _this.maxLengthNumber.value !== 0) {\n DialogUtility.alert({\n content: 'The maximum length value must be equal or greater than the length of the default text.',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n var type = void 0;\n if (_this.typeDropDown.value === 'Date') {\n type = 'Date';\n }\n else if (_this.typeDropDown.value === 'Number') {\n type = 'Number';\n }\n else {\n type = 'Text';\n }\n var format = _this.textFormatDropDown.value;\n var formField = new TextFormField();\n formField.type = type;\n formField.defaultValue = _this.defaultTextInput.value;\n formField.maxLength = _this.maxLengthNumber.value;\n formField.format = !isNullOrUndefined(format) ? format : '';\n formField.name = _this.bookmarkTextInput.value;\n formField.helpText = _this.tooltipTextInput.value;\n formField.enabled = _this.fillInEnable.checked;\n _this.owner.editor.editFormField('Text', formField);\n _this.closeTextField();\n }\n }\n else {\n DialogUtility.alert({\n content: 'A valid date or time is required',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTextField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(TextFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n TextFormFieldDialog.prototype.getModuleName = function () {\n return 'TextFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n var _this = this;\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-container-row' });\n var typeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n this.defaultTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let typeLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Type')\n // });\n //define the array of complex data\n var typeDropDownitems = [\n { Value: 'Regular text', Name: localValue.getConstant('Regular text') },\n { Value: 'Number', Name: localValue.getConstant('Number') },\n { Value: 'Date', Name: localValue.getConstant('Date') }\n ];\n var typeDropDownList = createElement('input');\n this.typeDropDown = new DropDownList({\n dataSource: typeDropDownitems,\n popupHeight: '150px',\n value: 'Regular text',\n change: this.changeTypeDropDown.bind(this),\n floatLabelType: 'Always',\n placeholder: localValue.getConstant('Type'),\n fields: { text: 'Name', value: 'Value' }\n });\n // this.defaultTextLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Default text')\n // });\n this.defaultTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var secondDiv = createElement('div', { className: 'e-de-container-row' });\n var maxLengthDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n // let maxLengthLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Maximum length')\n // });\n var maxLength = createElement('input');\n this.maxLengthNumber = new NumericTextBox({\n format: 'n', value: 0, min: 0, max: 32767, width: '100%', enablePersistence: false,\n placeholder: localValue.getConstant('Maximum length'), floatLabelType: 'Always',\n change: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n focus: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n blur: function (args) {\n if (!args.value) {\n var proxy_1 = this;\n setTimeout(function () {\n proxy_1.element.value = localValue.getConstant('Unlimited');\n }, 0);\n }\n },\n });\n var textFromatDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // this.textFormatLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Text format')\n // });\n var textFormatList = createElement('input');\n var formatDropDownitems = [\n { Value: \"Uppercase\", Name: localValue.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: localValue.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: localValue.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: localValue.getConstant(\"TitleCase\") }\n ];\n this.textFormatDropDown = new ComboBox({\n dataSource: formatDropDownitems,\n popupHeight: '150px',\n allowCustom: true,\n showClearButton: false,\n change: this.updateTextFormtas.bind(this),\n placeholder: localValue.getConstant('Text format'),\n floatLabelType: 'Always',\n fields: { text: 'Name', value: 'Value' }\n });\n this.textFormatDropDown.focus = function () {\n _this.textFormatDropDown.element.select();\n };\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-ff-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipTotalDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkTotalDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let toolTipHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Tooltip')\n // });\n this.tooltipTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n // let bookmarkHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Name')\n // });\n this.bookmarkTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var fillInEnableDiv = createElement('div');\n var fillInEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.fillInEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Fillin enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n typeDiv.classList.add('e-de-rtl');\n maxLengthDiv.classList.add('e-de-rtl');\n toolTipTotalDiv.classList.add('e-de-rtl');\n bookmarkTotalDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(typeDiv);\n //typeDiv.appendChild(typeLabel);\n typeDiv.appendChild(typeDropDownList);\n this.typeDropDown.appendTo(typeDropDownList);\n firstDiv.appendChild(this.defaultTextDiv);\n //this.defaultTextDiv.appendChild(this.defaultTextLabel);\n this.defaultTextDiv.appendChild(this.defaultTextInput);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(maxLengthDiv);\n //maxLengthDiv.appendChild(maxLengthLabel);\n maxLengthDiv.appendChild(maxLength);\n this.maxLengthNumber.appendTo(maxLength);\n secondDiv.appendChild(textFromatDiv);\n //textFromatDiv.appendChild(this.textFormatLabel);\n textFromatDiv.appendChild(textFormatList);\n this.textFormatDropDown.appendTo(textFormatList);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipTotalDiv);\n //toolTipTotalDiv.appendChild(toolTipHeadingLabel);\n toolTipTotalDiv.appendChild(this.tooltipTextInput);\n thirdDiv.appendChild(bookmarkTotalDiv);\n //bookmarkTotalDiv.appendChild(bookmarkHeadingLabel);\n bookmarkTotalDiv.appendChild(this.bookmarkTextInput);\n dialogDiv.appendChild(fillInEnableDiv);\n fillInEnableDiv.appendChild(fillInEnableEle);\n this.fillInEnable.appendTo(fillInEnableEle);\n this.defaultTextLabel = new TextBox({ placeholder: localValue.getConstant('Default text'), floatLabelType: 'Always' }, this.defaultTextInput);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipTextInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkTextInput);\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadTextDialog(this.localObj);\n this.documentHelper.dialog.header = this.localObj.getConstant('Text Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertTextField,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.changeTypeDropDown = function (args) {\n if (args.isInteracted) {\n this.defaultTextInput.value = '';\n this.textFormatDropDown.value = '';\n }\n if (args.value === 'Regular text') {\n this.textFormatDropDown.fields = { text: 'Name', value: 'Value' };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default text');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Text format');\n this.textFormatDropDown.dataSource = [\n { Value: \"Uppercase\", Name: this.localObj.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: this.localObj.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: this.localObj.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: this.localObj.getConstant(\"Titlecase\") }\n ];\n }\n else if (args.value === 'Number') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default number');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Number format');\n this.textFormatDropDown.dataSource = ['0', '0.00', '#,##0', '#,##0.00', '$#,##0.00;($#,##0.00)', '0%'];\n }\n else if (args.value === 'Date') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default date');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Date format');\n this.textFormatDropDown.dataSource = ['M/d/yyyy', 'dddd, MMMM d, yyyy', 'MMMM d, yyyy', 'M/d/yy', 'yyyy-MM-dd', 'd-MMM-yy',\n 'M.d.yyyy', 'MMM. d, yy', 'd MMMM yyyy', 'MMMM yy', 'MMM-yy', 'M/d/yyyy h:mm am/pm', 'M/d/yyyy h:mm:ss am/pm', 'h:mm am/pm', 'h:mm:ss am/pm',\n 'HH:mm', 'HH:mm:ss'];\n }\n this.defaultTextLabel.dataBind();\n this.textFormatDropDown.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.loadTextDialog = function (local) {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var data = inline.formFieldData;\n if (data.maxLength > 0) {\n this.maxLengthNumber.value = data.maxLength;\n }\n else {\n this.maxLengthNumber.value = 0;\n this.maxLengthNumber.element.value = local ? local.getConstant('Unlimited') : 'Unlimited';\n }\n if (data.type === 'Date') {\n this.typeDropDown.value = 'Date';\n }\n else if (data.type === 'Number') {\n this.typeDropDown.value = 'Number';\n }\n else {\n this.typeDropDown.value = 'Regular text';\n }\n if (data.format) {\n this.textFormatDropDown.value = data.format;\n }\n else {\n this.textFormatDropDown.value = '';\n }\n this.defaultTextInput.value = !isNullOrUndefined(data.defaultValue) ? data.defaultValue : '';\n this.fillInEnable.checked = data.enabled;\n this.tooltipTextInput.value = !isNullOrUndefined(data.helpText) ? data.helpText : '';\n this.bookmarkTextInput.value = !isNullOrUndefined(data.name) ? data.name : '';\n }\n };\n TextFormFieldDialog.prototype.updateFormats = function (value) {\n var format = isNullOrUndefined(this.textFormatDropDown.value) ? '' : this.textFormatDropDown.value.toString();\n if (this.typeDropDown.value === 'Regular text') {\n return HelperMethods.formatText(format, value);\n }\n if (this.typeDropDown.value === 'Number') {\n var data = HelperMethods.formatNumber(format, value);\n if (!(data.toString() === 'NaN')) {\n return data;\n }\n return '';\n }\n if (this.typeDropDown.value === 'Date') {\n return HelperMethods.formatDate(format, value);\n }\n return '';\n };\n /**\n * @private\n * @returns {boolean} returns is valid date format.\n */\n TextFormFieldDialog.prototype.isValidDateFormat = function () {\n var value = this.defaultTextInput.value;\n if (value !== '') {\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.destroy = function () {\n var textDialogTarget = this.target;\n if (textDialogTarget) {\n if (textDialogTarget.parentElement) {\n textDialogTarget.parentElement.removeChild(textDialogTarget);\n }\n this.target = undefined;\n }\n if (this.maxLengthNumber) {\n this.maxLengthNumber.destroy();\n this.maxLengthNumber = undefined;\n }\n if (this.fillInEnable) {\n this.fillInEnable.destroy();\n this.fillInEnable = undefined;\n }\n if (this.typeDropDown) {\n this.typeDropDown.destroy();\n this.typeDropDown = undefined;\n }\n if (this.textFormatDropDown) {\n this.textFormatDropDown.destroy();\n this.textFormatDropDown = undefined;\n }\n this.owner = undefined;\n this.defaultTextInput = undefined;\n this.tooltipTextInput = undefined;\n this.bookmarkTextInput = undefined;\n this.defaultTextLabel = undefined;\n this.defaultTextDiv = undefined;\n this.textFormatLabel = undefined;\n };\n return TextFormFieldDialog;\n}());\nexport { TextFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, DropDownFormField } from '../viewer/page';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * Form field drop-down dialog is used to modify the value in drop-down form field.\n */\nvar DropDownFormFieldDialog = /** @class */ (function () {\n function DropDownFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.addItemtoList = function () {\n _this.dropDownItems.push(_this.drpDownItemsInput.value);\n _this.currentSelectedItem = _this.drpDownItemsInput.value;\n _this.drpDownItemsInput.value = '';\n _this.enableOrDisableButton();\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeItemFromList = function () {\n for (var i = 0; i < _this.dropDownItems.length; i++) {\n if (_this.dropDownItems[i] === _this.currentSelectedItem) {\n _this.dropDownItems.splice(i, 1);\n }\n }\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.currentSelectedItem = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveUpItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveUp(index, (index - 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveDownItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveDown(index, (index + 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertDropDownField = function () {\n var dropDownField = new DropDownFormField();\n dropDownField.dropdownItems = _this.dropDownItems;\n dropDownField.selectedIndex = 0;\n dropDownField.name = _this.bookmarkInput.value;\n dropDownField.helpText = _this.tooltipInput.value;\n dropDownField.enabled = _this.dropDownEnable.checked;\n _this.owner.editor.editFormField('DropDown', dropDownField);\n _this.closeDropDownField();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDropDownField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(DropDownFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n DropDownFormFieldDialog.prototype.getModuleName = function () {\n return 'DropDownFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-drp-dwn-frst-div' });\n this.drpDownItemsInput = createElement('input', {\n className: 'e-input e-bookmark-textbox-input',\n id: 'fielditems_text_box'\n });\n this.drpDownItemsInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n var secondDiv = createElement('div', { className: 'e-de-ff-drpdwn-dlg-scndiv' });\n var itemsDrpItemsLabel = createElement('div', {\n className: 'e-de-ff-dlg-drpdwn-heading',\n innerHTML: localValue.getConstant('Items in dropdown list')\n });\n var listviewDiv = createElement('div', {\n className: 'e-bookmark-listViewDiv e-de-ff-drpdwn-listview',\n attrs: { style: 'height:100%' }\n });\n this.listviewInstance = new ListView({\n cssClass: 'e-bookmark-listview',\n select: this.selectHandler\n });\n var buttonDiv = createElement('div');\n var addButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var addButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('ADD'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n addButtonEle.addEventListener('click', this.addItemtoList.bind(this));\n var editButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n editButtonDiv.style.display = 'none';\n var editButtonEle = createElement('button', {\n innerHTML: 'EDIT',\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.editButton = new Button({ cssClass: 'e-button-custom' });\n var removeButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var removeButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('REMOVE'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.removeButton = new Button({ cssClass: 'e-button-custom' });\n removeButtonEle.addEventListener('click', this.removeItemFromList.bind(this));\n var moveBtnDiv = createElement('div', { attrs: { style: 'display:inline-flex' } });\n var moveUpButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveUpButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvup'\n });\n this.moveUpButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-up' });\n moveUpButtonEle.addEventListener('click', this.moveUpItem.bind(this));\n var moveDownButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveDownButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvdn'\n });\n this.moveDownButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-down' });\n moveDownButtonEle.addEventListener('click', this.moveDownItem.bind(this));\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n this.bookmarkInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var dropDownEnableDiv = createElement('div');\n var dropDownEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.dropDownEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Dropdown enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n listviewDiv.classList.add('e-de-rtl');\n moveUpButtonEle.classList.add('e-de-rtl');\n toolTipDiv.classList.add('e-de-rtl');\n bookmarkDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(this.drpDownItemsInput);\n dialogDiv.appendChild(itemsDrpItemsLabel);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(listviewDiv);\n this.listviewInstance.appendTo(listviewDiv);\n secondDiv.appendChild(buttonDiv);\n buttonDiv.appendChild(addButtonDiv);\n addButtonDiv.appendChild(addButtonEle);\n this.addButton.appendTo(addButtonEle);\n buttonDiv.appendChild(editButtonDiv);\n editButtonDiv.appendChild(editButtonEle);\n this.editButton.appendTo(editButtonEle);\n buttonDiv.appendChild(removeButtonDiv);\n removeButtonDiv.appendChild(removeButtonEle);\n this.removeButton.appendTo(removeButtonEle);\n buttonDiv.appendChild(moveBtnDiv);\n moveBtnDiv.appendChild(moveUpButtonDiv);\n moveUpButtonDiv.appendChild(moveUpButtonEle);\n this.moveUpButton.appendTo(moveUpButtonEle);\n moveBtnDiv.appendChild(moveDownButtonDiv);\n moveDownButtonDiv.appendChild(moveDownButtonEle);\n this.moveDownButton.appendTo(moveDownButtonEle);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipDiv);\n toolTipDiv.appendChild(this.tooltipInput);\n thirdDiv.appendChild(bookmarkDiv);\n bookmarkDiv.appendChild(this.bookmarkInput);\n dialogDiv.appendChild(dropDownEnableDiv);\n dropDownEnableDiv.appendChild(dropDownEnableEle);\n this.dropDownEnable.appendTo(dropDownEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInput);\n new TextBox({ placeholder: localValue.getConstant('Dropdown items'), floatLabelType: 'Always' }, this.drpDownItemsInput);\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadDropDownDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Drop Down Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertDropDownField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.loadDropDownDialog = function () {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n this.dropDownInstance = inline.formFieldData;\n if (this.dropDownInstance.dropdownItems.length > 0) {\n var index = this.dropDownInstance.selectedIndex;\n this.currentSelectedItem = this.dropDownInstance.dropdownItems[index];\n }\n if (this.dropDownInstance.enabled) {\n this.dropDownEnable.checked = true;\n }\n else {\n this.dropDownEnable.disabled = false;\n }\n if (this.dropDownInstance.helpText !== '') {\n this.tooltipInput.value = this.dropDownInstance.helpText;\n }\n else {\n this.tooltipInput.value = '';\n }\n if (this.dropDownInstance.name !== '') {\n this.bookmarkInput.value = this.dropDownInstance.name;\n }\n else {\n this.bookmarkInput.value = '';\n }\n this.dropDownItems = this.dropDownInstance.dropdownItems.slice();\n this.updateList();\n }\n };\n // sets updated list to dialog & refresh the List\n DropDownFormFieldDialog.prototype.updateList = function () {\n this.listviewInstance.dataSource = this.dropDownItems.slice();\n this.listviewInstance.dataBind();\n if (this.currentSelectedItem) {\n var toSelectItem = this.currentSelectedItem;\n this.listviewInstance.selectItem(toSelectItem);\n }\n };\n DropDownFormFieldDialog.prototype.getSelectedIndex = function () {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (this.dropDownItems[i] === this.currentSelectedItem) {\n return i;\n }\n }\n return 0;\n };\n DropDownFormFieldDialog.prototype.moveUp = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === 0) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i < (this.dropDownItems.length - 1)) {\n tempData[i] = this.dropDownItems[i + 1];\n }\n else {\n tempData[i] = this.dropDownItems[0];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.moveDown = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === (this.dropDownItems.length - 1)) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i !== 0) {\n tempData[i] = this.dropDownItems[i - 1];\n }\n else {\n tempData[i] = this.dropDownItems[(this.dropDownItems.length - 1)];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = (this.drpDownItemsInput.value === '');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.destroy = function () {\n var dropDownDialogTarget = this.target;\n if (dropDownDialogTarget) {\n if (dropDownDialogTarget.parentElement) {\n dropDownDialogTarget.parentElement.removeChild(dropDownDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.drpDownItemsInput = undefined;\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n if (this.addButton) {\n this.addButton.destroy();\n this.addButton = undefined;\n }\n if (this.editButton) {\n this.editButton.destroy();\n this.editButton = undefined;\n }\n if (this.removeButton) {\n this.removeButton.destroy();\n this.removeButton = undefined;\n }\n if (this.moveUpButton) {\n this.moveUpButton.destroy();\n this.moveUpButton = undefined;\n }\n if (this.moveDownButton) {\n this.moveDownButton.destroy();\n this.moveDownButton = undefined;\n }\n this.tooltipInput = undefined;\n this.bookmarkInput = undefined;\n if (this.dropDownEnable) {\n this.dropDownEnable.destroy();\n this.dropDownEnable = undefined;\n }\n this.dropDownInstance = undefined;\n };\n return DropDownFormFieldDialog;\n}());\nexport { DropDownFormFieldDialog };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox, CommentCharacterElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/* eslint-disable */\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selection.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphEnd\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection.isParagraphLastLine(this.currentWidget)\n && this.offset === this.owner.selection.getLineLength(this.currentWidget);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isCurrentParaBidi\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.currentWidget.paragraph)) {\n return this.currentWidget.paragraph.paragraphFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n *\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n *\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * @private\n */\n TextPosition.prototype.containsRtlText = function (widget) {\n for (var i = 0; i < widget.children.length; i++) {\n if (widget.children[i].isRightToLeft) {\n return true;\n }\n }\n return false;\n };\n /**\n * Set text position for paragraph and inline\n *\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : line.paragraph.lastChild.getEndOffset() + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n *\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n *\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n *\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.documentHelper.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (value === 'FN' || value === 'EN') {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n if (value === 'FN') {\n widget = page.footnoteWidget.bodyWidgets[value1];\n }\n else {\n widget = page.endnoteWidget.bodyWidgets[value1];\n }\n }\n else if (!isNullOrUndefined(page)) {\n widget = page.bodyWidgets[0];\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.selection.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.selection.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.selection.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n *\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n *\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph index\n * @private\n */\n TextPosition.prototype.isInSameParagraphIndex = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph.index === textPosition.paragraph.index;\n };\n /**\n * Return true if text position is in same paragraph\n *\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true is current text position exist before given text position\n *\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selection.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n *\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (!isNullOrUndefined(startParagraph) && !isNullOrUndefined(endParagraph)) {\n if (startParagraph.containerWidget instanceof BodyWidget && endParagraph.containerWidget instanceof BodyWidget &&\n startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable && endParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selection.isExistAfter(startParagraph, endParagraph);\n }\n return false;\n };\n /**\n * Return hierarchical index of current text position\n *\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (lineWidget.isLastLine()) {\n if (!isNullOrUndefined(lineWidget.paragraph.bodyWidget.footNoteReference)) {\n lineLength = lineLength + lineWidget.paragraph.bodyWidget.footNoteReference.text.length;\n }\n else {\n lineLength = lineLength + 1;\n }\n }\n if (offset > lineLength) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var currentOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, currentOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n *\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && (inline.nextNode instanceof FieldElementBox\n || inline.nextNode instanceof BookmarkElementBox)) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark or Bookmark end.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1\n || nextValidInline instanceof BookmarkElementBox && nextValidInline.bookmarkType === 1) {\n inline = nextValidInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, this.documentHelper.isFormFillProtectedMode ? 0 : 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 1;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n var endOffset = this.currentWidget.getEndOffset();\n this.offset = endOffset > 0 ? endOffset - 1 : endOffset;\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n // line end with page break and updating offset before page break.\n this.offset = this.currentWidget.isEndsWithPageBreak ? this.currentWidget.getEndOffset() - 1 : this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n *\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)\n || inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n *\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n *\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selection.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n this.owner.selection.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n *\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selection.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n this.owner.selection.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selection.start.paragraph;\n var selectionStartIndex = 0;\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selection.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && inline instanceof FieldElementBox && inline.fieldType === 1 &&\n inline.previousNode instanceof ImageElementBox) {\n this.offset = nextOffset;\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n *\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n *\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n start = start.replace(/FN;/g, '');\n end = end.replace(/FN;/g, '');\n start = start.replace(/EN;/g, '');\n end = end.replace(/EN;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n *\n * @param fieldEnd\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (fieldEnd instanceof FieldElementBox && isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n var index = inline instanceof FieldElementBox || inline instanceof BookmarkElementBox && inline.bookmarkType === 1 ? 0 : inline.length;\n this.offset = this.currentWidget.getOffset(inline, index);\n };\n /**\n * Moves the text position to start of the word.\n *\n * @param type\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n this.getNextWordOffsetFieldSeparator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getNextWordOffsetComment(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n this.getNextWordOffsetFieldSeparator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex === -1 && span.nextNode instanceof CommentCharacterElementBox &&\n isNullOrUndefined(span.nextNode.nextNode)) {\n wordEndIndex = span.length;\n }\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n if ((excludeSpace || txt[wordEndIndex] !== ' ') && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n wordEndIndex++;\n while (wordEndIndex < txt.length && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) !== -1) {\n if (txt[wordEndIndex] !== ' ' && txt[wordEndIndex] !== ' ') {\n break;\n }\n wordEndIndex++;\n }\n endSelection = true;\n if (wordEndIndex < txt.length) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldSeparator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetComment = function (comment, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(comment.nextNode)) {\n this.getNextWordOffset(comment.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getPreviousWordOffsetComment(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /* get previous word offset from comment\n * @private\n */\n TextPosition.prototype.getPreviousWordOffsetComment = function (comment, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (comment.previousNode) {\n var inline = comment.previousNode;\n if (comment.previousNode instanceof TextElementBox\n && HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n this.getPreviousWordOffset(comment.previousNode, selection, comment.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n endPosition.setPositionParagraph(comment.line, selection.getStartLineOffset(comment.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n if (fieldBegin.fieldSeparator) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex === -1 && span.previousElement instanceof CommentCharacterElementBox && isNullOrUndefined(span.previousNode.previousNode)) {\n wordStartIndex = span.length;\n }\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n *\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n if (this.selection.start.paragraph !== this.selection.end.paragraph\n || this.selection.start.offset === this.selection.getStartOffset(this.selection.start.paragraph)) {\n // To select Paragraph mark similar to MS WORD\n if (this.selection.end.offset === this.selection.end.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.end.currentWidget)) {\n this.selection.end.setPositionParagraph(this.selection.end.currentWidget, this.selection.end.offset + 1);\n }\n }\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n *\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isSelectParaMark = false;\n if ((this.selection.start.paragraph !== this.selection.end.paragraph\n && this.selection.end.offset !== this.selection.getStartOffset(this.selection.start.paragraph)) ||\n (this.documentHelper.isSelectionChangedOnMouseMoved && this.selection.isParagraphFirstLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getStartOffset(this.selection.start.paragraph))) {\n isSelectParaMark = true;\n }\n // To select Paragraph mark similar to MS WORD\n if (isSelectParaMark && this.selection.start.offset === this.selection.start.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.start.currentWidget)) {\n this.selection.start.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + 1);\n }\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.previousSplitWidget) {\n splittedParagraph = splittedParagraph.previousSplitWidget;\n }\n var startOffset = selection.getStartOffset(splittedParagraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = splittedParagraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n // Here, updating the left position when line widget end with page break\n // to update cursor before page break\n if (this.currentWidget.isEndsWithPageBreak && this.offset === this.currentWidget.getEndOffset() - 1) {\n left = this.location.x;\n }\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var currentLine = this.currentWidget;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n if (nextLine !== currentLine) {\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n }\n };\n /**\n * Moves the text position to start of the line.\n *\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n this.documentHelper.moveCaretPosition = 1;\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = 0;\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n *\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if (this.offset + incrementValue === endOffset || this.offset === endOffset + 1) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n *\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @param {Selection} selection Specifies the selection\n * @param {boolean} moveToNextLine Specifies the move to next line\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var isParaBidi = this.currentWidget.paragraph.paragraphFormat.bidi;\n this.documentHelper.moveCaretPosition = 2;\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = void 0;\n // As per Microsoft Behavior, when current para is RTL and if line widget contains rtl text or mixed inlines(rtl, normal),\n // then need to consider the last element and to update offset to last element\n if (isParaBidi && this.containsRtlText(currentLine)) {\n var endOffset = currentLine.getEndOffset();\n lastElement = currentLine.getInline(endOffset, 0).element;\n }\n else {\n lastElement = currentLine.children[currentLine.children.length - 1];\n if (lastElement instanceof ListTextElementBox && currentLine.children.length > 2) {\n lastElement = currentLine.children[currentLine.children.length - 3];\n }\n }\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n *\n * @param {number} left Specified the left\n * @private\n * @returns {void}\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var isAtLineStart = this.offset === 0 ? true : false;\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n this.moveForward();\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selection.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selection.end;\n var isBackwardSelection = !this.owner.selection.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selection.isEmpty || this.owner.selection.isForward;\n isPositionUpdated = this.owner.selection.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selection.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selection.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n * @returns {void}\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.documentHelper = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.color = '';\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n this.floatingItems = [];\n this.floatingItems = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n this.isCrossRefField = false;\n this.screenTipText = '';\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), true);\n }\n else if ((lowercase.indexOf('ref ') === 0 && lowercase.match('\\\\h'))) {\n this.parseFieldValues(fieldCode.substring(4).trim(), false);\n this.isCrossRefField = true;\n }\n else if (lowercase.substring(0, 7) === 'pageref' && lowercase.match('\\\\h')) {\n this.parseFieldValues(fieldCode.substring(7).trim(), false);\n this.isCrossRefField = true;\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"screenTip\", {\n /**\n * Gets screentip text.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.screenTipText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n *\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"isCrossRef\", {\n /**\n * @private\n */\n get: function () {\n return this.isCrossRefField;\n },\n enumerable: true,\n configurable: true\n });\n Hyperlink.prototype.parseFieldValues = function (value, isHyperlink) {\n var codes = value.split('\\\\o ');\n if (codes.length === 2) {\n this.screenTipText = this.parseFieldValue(codes[1], codes[1] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n this.screenTipText = this.screenTipText.substring(0, this.screenTipText.length - 1);\n value = codes[0];\n codes = undefined;\n }\n codes = value.split(' ');\n var isLocalRef = false;\n if (isHyperlink) {\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n }\n else {\n this.localRef = codes[0];\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar, isHyperlink) {\n value = isHyperlink ? value.substring(1) : value.substring(0);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n this.screenTipText = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageInfo = /** @class */ (function () {\n /**\n * Constructor for image format class\n *\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageInfo(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n }\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n */\n ImageInfo.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n };\n return ImageInfo;\n}());\nexport { ImageInfo };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n get: function () {\n return this.ownerListLevelIn;\n },\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n get: function () {\n return this.modifiedListLevelIn;\n },\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n get: function () {\n return this.ownerFormatIn;\n },\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n get: function () {\n return this.modifiedFormatIn;\n },\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedParagraphFormat.prototype.destroy = function () {\n this.ownerFormat = undefined;\n this.modifiedFormat.destroy();\n this.modifiedFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(startingPoint, rowFormat) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n owner.editorModule.tableResize.updateRowHeight(this.rowFormat.ownerBase, isRedo ? this.displacement : (-this.displacement));\n owner.documentHelper.layout.reLayoutTable(this.rowFormat.ownerBase.ownerTable);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n this.tableFormat.allowAutoFit = table.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.selection.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, FieldElementBox, TableWidget, TableRowWidget, HeaderFooterWidget, CheckBoxFormField, TextFrame } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextPosition, ImageInfo } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox, CommentCharacterElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.ownerIn = node;\n this.documentHelper = node.documentHelper;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n get: function () {\n return this.ownerIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n get: function () {\n return this.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n get: function () {\n return this.actionIn;\n },\n set: function (value) {\n this.actionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n get: function () {\n return this.modifiedPropertiesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /* eslint-enable */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n //gets or sets selection start\n get: function () {\n return this.selectionStartIn;\n },\n set: function (value) {\n this.selectionStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n get: function () {\n return this.selectionEndIn;\n },\n set: function (value) {\n this.selectionEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n get: function () {\n return this.insertPositionIn;\n },\n set: function (value) {\n this.insertPositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n get: function () {\n return this.endPositionIn;\n },\n set: function (value) {\n this.endPositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"viewer\", {\n get: function () {\n return this.ownerIn.viewer;\n },\n enumerable: true,\n configurable: true\n });\n BaseHistoryInfo.prototype.updateSelection = function () {\n var blockInfo = this.owner.selection.getParagraphInfo(this.owner.selection.start);\n this.selectionStart = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.selection.getParagraphInfo(this.owner.selection.end);\n this.selectionEnd = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.setFormFieldInfo = function (field, value) {\n this.removedNodes.push({ 'formField': field, 'value': value });\n };\n BaseHistoryInfo.prototype.setEditRangeInfo = function (editStart) {\n this.removedNodes.push({ 'editStart': editStart, 'startIndex': editStart.indexInOwner, 'endIndex': editStart.editRangeEnd.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertFormTextFormat = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n var text = fieldInfo.value;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var formField = fieldInfo.formField;\n if (this.editorHistory.isUndoing) {\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.recordChanges(this);\n }\n else {\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertFormField = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var field = fieldInfo.formField;\n if (field.formFieldData instanceof CheckBoxFormField) {\n this.owner.editorModule.toggleCheckBoxFormField(field, true, fieldInfo.value);\n }\n else {\n this.owner.editorModule.updateFormField(field, fieldInfo.value);\n }\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n this.documentHelper.bookmarks.add(bookmark.name, bookmark);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = bookmark.name;\n }\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertComment = function () {\n var editPosition = this.insertPosition;\n var comment = this.removedNodes[0];\n var insert = false;\n if (this.action === 'ResolveComment') {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.owner.editor.resolveOrReopenComment(comment, !comment.isResolved);\n return;\n }\n if (this.action === 'InsertCommentWidget') {\n insert = (this.editorHistory.isRedoing);\n }\n else if (this.action === 'DeleteCommentWidget') {\n insert = (this.editorHistory.isUndoing);\n }\n if (insert) {\n if (comment) {\n if (comment.isReply) {\n this.owner.editor.addReplyComment(comment, this.insertPosition);\n }\n else {\n this.owner.editor.addCommentWidget(comment, false, true, true);\n }\n }\n }\n else {\n var commentElement = this.owner.editor.getCommentElementBox(editPosition);\n this.owner.editor.deleteCommentWidget(commentElement);\n }\n };\n BaseHistoryInfo.prototype.revertEditRangeRegion = function () {\n var editRangeInfo = this.removedNodes[0];\n var editStart = editRangeInfo.editStart;\n if (this.editorHistory.isUndoing) {\n var user = editStart.user === '' ? editStart.group : editStart.user;\n this.owner.editor.updateRangeCollection(editStart, user);\n editStart.line.children.splice(editRangeInfo.startIndex, 0, editStart);\n editStart.editRangeEnd.line.children.splice(editRangeInfo.endIndex, 0, editStart.editRangeEnd);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.removeUserRestrictionsInternal(editStart);\n this.editorHistory.undoStack.push(this);\n }\n this.owner.editor.fireContentChange();\n };\n /* eslint-disable */\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'FormTextFormat') {\n this.revertFormTextFormat();\n return;\n }\n if (this.action === 'UpdateFormField') {\n this.revertFormField();\n return;\n }\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n if (this.action === 'RemoveEditRange') {\n this.revertEditRangeRegion();\n return;\n }\n if (this.action === 'InsertCommentWidget' || this.action === 'DeleteCommentWidget' || this.action === 'ResolveComment') {\n this.revertComment();\n return;\n }\n if (this.action === 'ListFormat' && this.owner.editor.listNumberFormat !== '') {\n var abstractList = this.documentHelper.lists[0].abstractList.levels[this.owner.editor.listLevelNumber];\n var currentListLevelPattern = abstractList.listLevelPattern;\n var currentNUmberFormat = abstractList.numberFormat;\n abstractList.listLevelPattern = this.owner.editor.listLevelPattern;\n abstractList.numberFormat = this.owner.editor.listNumberFormat;\n this.owner.editor.listLevelPattern = currentListLevelPattern;\n this.owner.editor.listNumberFormat = currentNUmberFormat;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection'\n || this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(start);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(end);\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n var sel = this.owner.selection;\n var deletedNodes = this.removedNodes;\n this.removedNodesIn = [];\n if (isNullOrUndefined(this.endPosition)) {\n this.endPosition = this.insertPosition;\n }\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.endPosition : this.insertPosition);\n if (this.lastElementRevision && this.editorHistory.isUndoing) {\n if (isNullOrUndefined(this.endRevisionLogicalIndex)) {\n this.updateEndRevisionInfo();\n }\n }\n if (this.action === 'ClearRevisions') {\n this.undoRevisionForElements(insertTextPosition, endTextPosition, deletedNodes[deletedNodes.length - 1]);\n deletedNodes = [];\n }\n if (this.action === 'Uppercase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n sel.selectContent(insertTextPosition, true);\n }\n else {\n sel.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selection.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n var isRemoveContent = false;\n if (this.endRevisionLogicalIndex && deletedNodes.length > 0) {\n if (this.editorHistory.isUndoing || (this.editorHistory.isRedoing && insertTextPosition.isAtSamePosition(endTextPosition))) {\n var currentPosition = sel.getTextPosBasedOnLogicalIndex(this.endRevisionLogicalIndex);\n sel.selectPosition(insertTextPosition, currentPosition);\n }\n if (this.editorHistory.isUndoing) {\n this.owner.editor.deleteSelectedContents(sel, true);\n }\n }\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n var skipDelete = (deletedNodes.length > 0 && this.action === 'ParaMarkTrack') || this.action === 'ClearRevisions' || this.action === 'AcceptTOC';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n sel.end.setPositionInternal(endTextPosition);\n if (!this.owner.selection.isEmpty && !skipDelete) {\n if (this.editorHistory.isRedoing && this.action !== 'Accept Change' && this.action !== 'ParaMarkTrack' &&\n this.action !== 'ParaMarkReject' && this.action !== 'RemoveRowTrack') {\n this.owner.editorModule.removeSelectedContents(sel);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(sel, true);\n }\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && this.documentHelper.blockToShift) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n }\n }\n var isRedoAction = (this.editorHistory.isRedoing && !isRemoveContent);\n isRemoveContent = this.lastElementRevision ? false : isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end);\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition);\n }\n //this.owner.editorModule.reLayout(this.documentHelper.selection);\n }\n var isSelectionChanged = false;\n var updateSelection = false;\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'Accept All')) {\n updateSelection = true;\n }\n if (!this.owner.trackChangesPane.isTrackingPageBreak && ((this.editorHistory.isUndoing || this.endRevisionLogicalIndex || this.action === 'RemoveRowTrack' || updateSelection) && isNullOrUndefined(this.editorHistory.currentHistoryInfo) || updateSelection) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight' || this.action === 'Accept Change' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n if (this.action === 'RemoveRowTrack' && this.editorHistory.isRedoing) {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionStart);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionEnd);\n }\n else {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(start);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(end);\n }\n this.owner.selection.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n isSelectionChanged = true;\n }\n this.owner.trackChangesPane.isTrackingPageBreak = false;\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n (this.editorHistory.currentHistoryInfo.action === 'Accept All'\n || this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'RemoveComment')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n this.owner.editorModule.reLayout(this.owner.selection, this.owner.selection.isEmpty);\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.documentHelper.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget)) ||\n (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TextFrame\n && endTextPosition.paragraph.containerWidget instanceof TextFrame)) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selection.selectRange(insertTextPosition, endTextPosition);\n var isDelete = false;\n if (this.action === 'BackSpace' || this.action === 'Uppercase' || this.action === 'RemoveRowTrack') {\n isDelete = true;\n }\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, isDelete);\n }\n };\n BaseHistoryInfo.prototype.updateEndRevisionInfo = function () {\n this.lastElementRevision = this.checkAdjacentNodeForMarkedRevision(this.lastElementRevision);\n var currentRevision = this.retrieveEndPosition(this.lastElementRevision);\n var blockInfo = this.owner.selection.getParagraphInfo(currentRevision);\n this.endRevisionLogicalIndex = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.lastElementRevision.isMarkedForRevision = false;\n };\n BaseHistoryInfo.prototype.retrieveEndPosition = function (elementBox) {\n var endPosition = new TextPosition(this.owner);\n var offset = elementBox.line.getOffset(elementBox, 0) + elementBox.length;\n endPosition.setPositionFromLine(elementBox.line, offset);\n return endPosition;\n };\n /**\n * Method to retrieve exact spitted node which is marked as last available element.\n *\n * @param {ElementBox} elementBox - Specifies the element box\n * @returns {ElementBox} - Returns element box\n */\n BaseHistoryInfo.prototype.checkAdjacentNodeForMarkedRevision = function (elementBox) {\n var nextItem = elementBox.nextNode;\n var markedNode;\n while (!isNullOrUndefined(nextItem) && nextItem.isMarkedForRevision) {\n markedNode = nextItem;\n nextItem = nextItem.nextNode;\n }\n return !isNullOrUndefined(markedNode) ? markedNode : elementBox;\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n this.owner.selection.selectRange(start, end);\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selection, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selection, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n case 'SectionBreak':\n editor.insertSection(this.owner.selection, true);\n break;\n case 'TableAutoFitToContents':\n editor.autoFitTable('FitToContents');\n break;\n case 'TableAutoFitToWindow':\n editor.autoFitTable('FitToWindow');\n break;\n case 'TableFixedColumnWidth':\n editor.autoFitTable('FixedColumnWidth');\n break;\n case 'RemoveRowTrack':\n this.owner.selection.handleAcceptReject(true);\n break;\n }\n };\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells' || this.action === 'SectionBreak' || this.action === 'TableAutoFitToContents' ||\n this.action === 'TableAutoFitToWindow' || this.action === 'TableFixedColumnWidth' || this.action === 'PasteColumn' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n this.redoAction();\n if (this.action === 'SectionBreak') {\n return;\n }\n }\n if (deletedNodes.length > 0) {\n //tslint:disable-next-line:max-line-length\n if ((this.editorHistory.isUndoing && (this.action === 'RemoveRowTrack' || this.action === 'DeleteCells' ||\n this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n //tslint:disable-next-line:max-line-length\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders' || this.action === 'TableAutoFitToContents' || this.action === 'TableAutoFitToWindow' ||\n this.action === 'TableFixedColumnWidth' || this.action === 'RemoveRowTrack' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n else if (block instanceof ParagraphWidget && block.isInsideTable) {\n block = block.associatedCell.ownerTable;\n }\n block = block.combineWidget(this.viewer);\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n if (this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') {\n this.removedNodes.push(block);\n }\n else {\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n }\n }\n else if (lastNode instanceof TableWidget) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (this.action === 'TrackingPageBreak' || (this.action === 'SectionBreak' && lastNode instanceof BodyWidget ||\n !isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak')) {\n lastNode = deletedNodes[1];\n }\n if (lastNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n if (lastNode.characterFormat.removedIds.length > 0) {\n this.owner.editor.constructRevisionFromID(lastNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selection.getNextRenderedBlock(lastNode);\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraphInternal(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selection.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraphInternal(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n if (firstNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0\n && this.owner.selection.start.offset === this.owner.selection.getLineLength(this.owner.selection.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n if (firstNode.characterFormat.removedIds.length > 0) {\n this.owner.editor.constructRevisionFromID(firstNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste') {\n editor.removeBlock(this.owner.selection.start.paragraph);\n }\n var paragraph = this.documentHelper.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph)) {\n this.owner.selection.selectParagraphInternal(paragraph, true);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block) {\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selection, node);\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget) {\n this.owner.editorModule.insertBlockTable(this.owner.selection, node, block);\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n else if (node instanceof WCharacterFormat) {\n var insertIndex = this.selectionStart;\n var wiget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n if (wiget instanceof ParagraphWidget) {\n if (node.removedIds.length > 0) {\n wiget.characterFormat.removedIds = node.removedIds.slice();\n this.owner.editor.constructRevisionFromID(wiget.characterFormat, true);\n }\n else if (wiget.characterFormat.revisions.length > 0) {\n wiget.characterFormat = node.cloneFormat();\n }\n }\n }\n else if (node instanceof BodyWidget) {\n this.owner.editorModule.insertSection(this.owner.selection, false);\n }\n else if (typeof (node) === 'string' && this.action === 'AcceptTOC') {\n var insertIndex = this.selectionStart;\n var widget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var endWidget = this.owner.editorModule.getBlock({ index: this.selectionEnd }).node;\n var currentRevision = this.owner.documentHelper.revisionsInternal.get(node);\n if (this.editorHistory.isUndoing) {\n while (widget instanceof ParagraphWidget && widget !== endWidget) {\n this.owner.editor.insertRevisionForBlock(widget, currentRevision.revisionType, true, currentRevision);\n widget = this.documentHelper.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.owner.editor.insertRevisionForBlock(endWidget, currentRevision.revisionType, true, currentRevision);\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n this.owner.editor.addRemovedNodes(currentRevision.revisionID);\n }\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.undoRevisionForElements = function (start, end, id) {\n var currentPara = start.paragraph;\n var endPara = end.paragraph;\n var currentRevision = this.documentHelper.revisionsInternal.get(id);\n var startoffset = this.owner.selection.getParagraphInfo(start).offset;\n var endoffset = this.owner.selection.getParagraphInfo(end).offset;\n var isSamePara = start.paragraph === end.paragraph;\n if (this.editorHistory.isUndoing) {\n while (currentPara !== endPara) {\n this.owner.editor.applyRevisionForCurrentPara(currentPara, startoffset, currentPara.getLength(), id, true);\n currentPara = this.documentHelper.selection.getNextParagraphBlock(currentPara.getSplitWidgets().pop());\n if (currentPara !== endPara) {\n startoffset = 0;\n }\n }\n if (currentPara === endPara) {\n if (!isSamePara) {\n startoffset = 0;\n }\n this.owner.editor.applyRevisionForCurrentPara(currentPara, startoffset, endoffset, id, false);\n }\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n this.removedNodes.push(id);\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner);\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selection.selectedWidgets.length === 0) {\n this.owner.selection.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editor.setOffsetValue(this.owner.selection);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selection;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat(previousFormat);\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return value;\n }\n else {\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return undefined;\n }\n }\n if (property === 'borders') {\n value = previousFormat.borders.cloneFormat();\n }\n else if (this.action.indexOf('Border') >= 0) {\n value = previousFormat.borders.getBorder(property.replace('Border', ''));\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.documentHelper.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n this.owner.editorModule.revertContinueNumbering(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editor.setPreviousBlockToLayout();\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageInfo) {\n this.owner.selection.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selection, property, undefined);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.documentHelper.selection);\n }\n };\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n case 'ParagraphBidi':\n case 'TableBidi':\n return 'bidi';\n case 'ContextualSpacing':\n return 'contextualSpacing';\n case 'LeftBorder':\n case 'TopBorder':\n case 'RightBorder':\n case 'BottomBorder':\n case 'HorizontalBorder':\n case 'VerticalBorder':\n case 'Borders':\n return (this.action[0].toLowerCase() + this.action.slice(1));\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox && !(node instanceof CommentCharacterElementBox)) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n this.ownerIn = undefined;\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.editRangeStart = undefined;\n _this.documentHelper = node.documentHelper;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[i];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (this.action === 'RestrictEditing') {\n var user = this.editRangeStart.user !== '' ? this.editRangeStart.user : this.editRangeStart.group;\n if (this.editorHistory.isUndoing) {\n var index = this.owner.documentHelper.editRanges.get(user).indexOf(this.editRangeStart);\n if (index !== -1) {\n this.owner.documentHelper.editRanges.get(user).splice(index, 1);\n }\n }\n else {\n this.owner.editor.updateRangeCollection(this.editRangeStart, user);\n }\n this.owner.selection.updateEditRangeCollection();\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @param {DocumentEditor} node - Specified the document editor.\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n this.historyInfoStack = [];\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.documentHelper = node.documentHelper;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n * @returns {HistoryInfo} - Returns the history info.\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n /**\n * @private\n * @param {HistoryInfo} value - Specified the value.\n */\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the undo stack.\n */\n get: function () {\n return this.undoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the redo stack.\n */\n get: function () {\n return this.redoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets or Sets the limit of undo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n /**\n * Sets the limit of undo operations can be done.\n *\n * @aspType int\n * @param {number} value - Specified the value.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets or Sets the limit of redo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n /**\n * Gets or Sets the limit of redo operations can be done.\n *\n * @aspType int\n * @param {number} value - Specified the value.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether undo operation can be done.\n *\n * @returns {boolean} - Returns the canUndo.\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether redo operation can be done.\n *\n * @returns {boolean} - Returns the canRedo.\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization\n /**\n * initialize EditorHistory\n *\n * @private\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n this.currentBaseHistoryInfo.destroy();\n }\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n this.currentBaseHistoryInfo.updateSelection();\n };\n /**\n * Initialize complex history\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n * @param {Point} startingPoint - Specifies the start point.\n * @param {TableResizer} tableResize - Spcifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n /* eslint-disable-next-line max-len */\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat));\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n }\n }\n };\n /**\n * Update resizing history\n *\n * @private\n * @param {Point} point - Specifies the point.\n * @param {TableResizer} tableResize - Specifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistory.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n *\n * @private\n * @param {BaseHistoryInfo} baseHistoryInfo - Specified the base history info.\n * @returns {void}\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n };\n /**\n * update EditorHistory\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n * @returns {boolean} -Returns isHandleComplexHistory\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n isHandledComplexHistory = this.owner.editorModule.insertRemoveBookMarkElements();\n }\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.documentHelper.selection;\n if (this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink' || this.currentHistoryInfo.action === 'SkipCommentInline'\n || this.currentHistoryInfo.action === 'DeleteCommentInline' || this.currentHistoryInfo.action === 'RemoveComment') {\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistory.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.documentHelper.contentControlCollection = [];\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n this.documentHelper.removeEmptyPages();\n }\n }\n if (this.owner.showRevisions) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n if (this.currentHistoryInfo.action === 'ApplyStyle') {\n this.owner.editor.getOffsetValue(selection);\n }\n else {\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n }\n selection.upDownSelectionLength = selection.end.location.x;\n this.documentHelper.isScrollHandler = true;\n this.viewer.updateScrollBars();\n selection.fireSelectionChanged(true);\n this.documentHelper.isScrollHandler = false;\n this.documentHelper.updateFocus();\n this.updateComplexHistoryInternal();\n this.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n *\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n *\n * @private\n * @param {WAbstractList} currentAbstractList - Specfies the abstractlist.\n * @param {WList} list - Specifies the list.\n * @returns {Dictionary} - Returns the modified action.\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.documentHelper.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.documentHelper.getAbstractListById(list.abstractListId).levels[i];\n this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[i]);\n if (!isNullOrUndefined(levels)) {\n this.documentHelper.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[i]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Dictionary} modifiedLevelsInternal - Specifies the modified levels.\n * @returns {void}\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.documentHelper.listParagraphs.length; i++) {\n var paragraph = this.documentHelper.listParagraphs[i];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.documentHelper.getListById(paraFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n *\n * @private\n * @param {Dictionary} modifiedCollection - Specifies the modified colection.\n * @returns {void }\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.documentHelper.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[i];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.owner.editorModule.layoutWholeDocument();\n var selection = this.documentHelper.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Reverts the last editing action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.undo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly')) ||\n !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.redo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly'))\n || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = -1;\n this.currentResizingTable = undefined;\n /**\n * @private\n */\n this.checkCellMinWidth = false;\n this.owner = node;\n this.documentHelper = this.owner.documentHelper;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateResizingHistory(touchPoint, this);\n }\n this.documentHelper.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.documentHelper.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistory.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[i].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = cellWidget.columnIndex;\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[i].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[i];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n /* eslint-disable-next-line max-len */\n && (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n TableResizer.prototype.handleResizing = function (touchPoint) {\n var dragValue = 0;\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || this.resizerPosition === -1) {\n return;\n }\n var selection = this.owner.selection;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting.\n }\n var row = undefined;\n if (this.resizerPosition > -1) {\n row = table.childWidgets[this.resizerPosition];\n if (row) {\n this.updateRowHeight(row, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.documentHelper.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.documentHelper.layout.reLayoutTable(table);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (row) {\n this.getRowReSizerPosition(undefined, this.startingPoint);\n }\n if (this.currentResizingTable && (this.currentResizingTable.childWidgets === undefined\n || this.currentResizingTable.childWidgets[this.resizerPosition] === undefined)) {\n this.resizerPosition = -1;\n }\n };\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var body = currentPage.headerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, body);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, bodywid);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[j] instanceof TableWidget) {\n var childWidget = widget.childWidgets[j];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= point.x && (childWidget.x + tableWidth) >= point.x &&\n childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y))) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var body = currentPage.headerWidget;\n widget = body.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = bodywid.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.documentHelper.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets) || this.resizerPosition < 0) {\n return;\n }\n if (dragValue < 0) {\n this.checkCellMinWidth = true;\n }\n var selectionFlag = true;\n var selection = this.owner.selection;\n this.owner.editor.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[columnIndex];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minWidth;\n }\n } while (dragValue !== prevDragValue);\n }\n else {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n } while (dragValue !== prevDragValue);\n }\n var dragOffset = dragValue;\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth(0) > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth(0) < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateCellPreferredWidths(table);\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n this.checkCellMinWidth = false;\n };\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n //const newIndent: number = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[i]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[i]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n //const rightColumnCollection: TableCellWidget[] = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth(0) > containerWidth) {\n table.tableFormat.allowAutoFit = false;\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[columnIndex];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateGridValue(table, false, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.documentHelper.layout.getParentTable(table);\n this.documentHelper.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.owner.editor.getOffsetValue(this.documentHelper.selection);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n /* eslint-disable-next-line max-len */\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[i_1];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selection;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n table.tableFormat.allowAutoFit = tableHistoryInfo.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = tableHistoryInfo.rows[i];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = rowFormat.cells[j];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[i].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth));\n }\n if (row.rowFormat.gridAfter > 0) {\n /* eslint-disable-next-line max-len */\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth), row);\n }\n }\n };\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","import { TextPosition, ImageInfo } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, CommentElementBox, CommentCharacterElementBox, CheckBoxFormField, DropDownFormField, TextFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods, Base64 } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList, L10n } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { protectionTypeChangeEvent } from '../../base/index';\nimport { SelectionCharacterFormat } from '../index';\nimport { PageLayoutViewer } from '../index';\nimport { WCharacterStyle } from '../format/style';\nimport { HistoryInfo } from '../editor-history/index';\nimport { TableResizer } from './table-resizer';\nimport { Dictionary } from '../../base/dictionary';\nimport { WParagraphStyle } from '../format/style';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Revision } from '../track-changes/track-changes';\nimport { XmlHttpRequestHandler } from '../../base/ajax-helper';\nimport { beforeCommentActionEvent, trackChangeEvent, beforeXmlHttpRequestSend } from '../../base/index';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n *\n * @param {DocumentHelper} documentHelper - Document helper\n * @private\n */\n function Editor(documentHelper) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.formFieldCounter = 1;\n this.skipFieldDeleteTracking = false;\n this.isForHyperlinkFormat = false;\n this.isTrackingFormField = false;\n this.isInsertText = false;\n /**\n * @private\n */\n this.removeEditRange = false;\n /**\n * @private\n */\n this.isRemoveRevision = false;\n /**\n * @private\n */\n this.isFootNoteInsert = false;\n /**\n * @private\n */\n this.isTableInsert = false;\n /**\n * @private\n */\n this.isFootNote = false;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.isUserInsert = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n /**\n * @private\n */\n this.triggerPageSpellCheck = true;\n /**\n * @private\n */\n this.chartType = false;\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n this.pageRefFields = {};\n this.delBlockContinue = false;\n this.delBlock = undefined;\n this.delSection = undefined;\n /**\n * @private\n */\n this.isInsertingTOC = false;\n this.editStartRangeCollection = [];\n this.skipReplace = false;\n this.skipTableElements = false;\n /**\n * @private\n */\n this.listNumberFormat = '';\n /**\n * @private\n */\n this.listLevelNumber = 0;\n /**\n * @private\n */\n this.isXmlMapped = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.copiedContent = '';\n /**\n * @private\n */\n this.copiedTextContent = '';\n /**\n * @private\n */\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.pasteTextPosition = undefined;\n //public isSkipHistory: boolean = false;\n this.isPaste = false;\n this.isPasteListUpdated = false;\n this.isHtmlPaste = false;\n /**\n * @private\n */\n this.isInsertField = false;\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n * @returns {void}\n */\n this.onTextInputInternal = function () {\n if (Browser.isDevice) {\n var documentHelper = _this.documentHelper;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n documentHelper.prefix = documentHelper.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = documentHelper.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (documentHelper.isCompositionStart && documentHelper.isCompositionUpdated) {\n documentHelper.isCompositionUpdated = false;\n if (!documentHelper.owner.isReadOnlyMode && documentHelper.owner.isDocumentLoaded && _this.canEditContentControl) {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (documentHelper.isCompositionStart && documentHelper.isCompositionEnd && documentHelper.suffix === '') {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && documentHelper.isCompositionStart) {\n documentHelper.isCompositionStart = false;\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - documentHelper.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (documentHelper.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n documentHelper.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (documentHelper.prefix.substring(2) === textBoxText && documentHelper.suffix === '') {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n documentHelper.isCompositionEnd = false;\n return;\n }\n else if (documentHelper.isCompositionEnd || documentHelper.isCompositionStart && !documentHelper.isCompositionUpdated) {\n if (textBoxText.length < documentHelper.prefix.length &&\n /* eslint-disable-next-line max-len */\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1) || documentHelper.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (documentHelper.suffix !== '' &&\n documentHelper.editableDiv.innerText[documentHelper.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n documentHelper.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n /* eslint-disable-next-line max-len */\n _this.selection.end.setPositionForLineWidget(documentHelper.selection.end.currentWidget, _this.selection.end.offset + documentHelper.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !documentHelper.owner.isReadOnlyMode && documentHelper.isControlPressed === false && _this.canEditContentControl) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < documentHelper.prefix.length &&\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1)) {\n _this.handleBackKey();\n if (documentHelper.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(documentHelper.prefix) === 0 && text.length > documentHelper.prefix.length) {\n _this.handleTextInput(text.substring(documentHelper.prefix.length));\n }\n else if (text.indexOf(documentHelper.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === documentHelper.prefix.substring(2)) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionParagraph(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.documentHelper.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !_this.owner.isReadOnlyMode && _this.documentHelper.isControlPressed === false && _this.canEditContentControl) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.documentHelper.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @param {ClipboardEvent} event - Specfies clipboard event\n * @private\n * @returns {void}\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode && _this.canEditContentControl) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.documentHelper = documentHelper;\n this.tableResize = new TableResizer(this.documentHelper.owner);\n this.base64 = new Base64();\n }\n Object.defineProperty(Editor.prototype, \"restrictFormatting\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict formatting\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && (this.documentHelper.restrictFormatting\n || (!this.documentHelper.restrictFormatting && !this.selection.isSelectionInEditRegion()));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"restrictEditing\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict editing\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && ((this.documentHelper.protectionType === 'ReadOnly' || this.documentHelper.isCommentOnlyMode)\n && !this.selection.isSelectionInEditRegion() || this.documentHelper.protectionType === 'FormFieldsOnly');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"canEditContentControl\", {\n /**\n * @private\n * @returns {boolean} - Returns the can edit content control.\n */\n get: function () {\n if (this.owner.isReadOnlyMode) {\n return false;\n }\n if (this.selection.checkContentControlLocked()) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"viewer\", {\n get: function () {\n if (!isNullOrUndefined(this.owner)) {\n return this.owner.viewer;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.documentHelper.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n /**\n * Sets the field information for the selected field.\n *\n * @param { FieldInfo } fieldInfo – Specifies the field information.\n * @returns {void}\n * > Nested field gets replaced completely with the specified field information.\n */\n Editor.prototype.setFieldInfo = function (fieldInfo) {\n var field = this.selection.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n this.selection.selectField();\n this.insertField(fieldInfo.code, fieldInfo.result);\n }\n };\n /**\n * Inserts the specified field at cursor position\n *\n * @param {string} code - Specify the field code\n * @param {string} result - Specify the field result\n * @returns {void}\n */\n Editor.prototype.insertField = function (code, result) {\n this.isInsertField = true;\n var fieldCode = code;\n fieldCode = HelperMethods.trimStart(fieldCode);\n if (fieldCode.substring(0, 8) === 'NUMPAGES') {\n this.insertPageCount(result);\n }\n else if (fieldCode.substring(0, 4) === 'PAGE') {\n this.insertPageNumber(result);\n }\n else {\n if (isNullOrUndefined(result)) {\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '«' + fieldCode.substring(0, index).trim() + '»';\n }\n }\n var paragraph = new ParagraphWidget();\n var insertFormat = new WCharacterFormat();\n var selectionFormat = this.copyInsertFormat(insertFormat, false);\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.characterFormat.mergeFormat(selectionFormat);\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.mergeFormat(selectionFormat);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n fieldResultSpan.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.mergeFormat(selectionFormat);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.childWidgets.push(paragraph);\n this.pasteContentsInternal([section], false);\n }\n this.isInsertField = false;\n };\n /**\n * To update style for paragraph\n *\n * @param {string} style - style name\n * @param {boolean} clearDirectFormatting - Removes manual formatting (formatting not applied using a style)\n * from the selected text, to match the formatting of the applied style. Default value is false.\n * @returns {void}\n */\n Editor.prototype.applyStyle = function (style, clearDirectFormatting) {\n clearDirectFormatting = isNullOrUndefined(clearDirectFormatting) ? false : clearDirectFormatting;\n var startPosition = undefined;\n var endPosition = undefined;\n if (clearDirectFormatting) {\n this.initComplexHistory('ApplyStyle');\n this.setOffsetValue(this.selection);\n startPosition = this.startOffset;\n endPosition = this.endOffset;\n var isSelectionEmpty = this.selection.isEmpty;\n this.clearFormatting();\n if (isSelectionEmpty && !this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n var styleObj = this.documentHelper.styles.findByName(style);\n if (styleObj !== undefined) {\n if (styleObj instanceof WCharacterStyle && styleObj.type === 'Character') {\n if (this.selection.isEmpty) {\n var offset = this.selection.start.offset;\n var preservedStartPosition = this.selection.start.clone();\n var preservedEndPosition = this.selection.end.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n this.selection.characterFormat.copyFormat(styleObj.characterFormat);\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('styleName', styleObj, false, true);\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(style)), this.documentHelper.styles);\n this.applyStyle(style);\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ApplyStyle') {\n this.startOffset = startPosition;\n this.endOffset = endPosition;\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n *\n * @returns {void}\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty || !this.canEditContentControl) {\n return;\n }\n this.selection.copySelectedContent(true);\n this.documentHelper.owner.parser.isCutPerformed = true;\n };\n /**\n * Insert editing region in current selection range.\n *\n * @param {string} user - Specified the native rendering\n * @returns {void}\n */\n Editor.prototype.insertEditingRegion = function (user) {\n this.insertEditRangeElement(user && user !== '' ? user : 'Everyone');\n };\n Editor.prototype.enforceProtection = function (credential, restrictFormatType, isReadOnly) {\n var typeOfProtection;\n var limitToFormatting;\n if (typeof (restrictFormatType) === 'boolean') {\n typeOfProtection = isReadOnly ? 'ReadOnly' : this.documentHelper.protectionType;\n limitToFormatting = restrictFormatType;\n }\n else {\n limitToFormatting = true;\n typeOfProtection = restrictFormatType;\n }\n this.documentHelper.restrictFormatting = limitToFormatting;\n this.documentHelper.protectionType = typeOfProtection;\n this.selection.isHighlightEditRegion = true;\n this.addProtection(credential, this.documentHelper.protectionType);\n };\n Editor.prototype.getCommentHierarchicalIndex = function (comment) {\n var index = '';\n while (comment.ownerComment) {\n if (!isNullOrUndefined(comment.ownerComment)) {\n index = comment.ownerComment.replyComments.indexOf(comment) + ';' + index;\n comment = comment.ownerComment;\n }\n else {\n index = comment.replyComments.indexOf(comment) + ';' + index;\n comment = comment;\n }\n }\n index = 'C;' + this.documentHelper.comments.indexOf(comment) + ';' + index;\n return index;\n };\n Editor.prototype.alertBox = function () {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n DialogUtility.alert(localObj.getConstant('Multiple Comment'));\n };\n /**\n * Insert comment\n *\n * @param {string} text - comment text.\n * @returns {void}\n */\n // Comment implementation starts\n Editor.prototype.insertComment = function (text) {\n if (isNullOrUndefined(this.selection.start) || (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || this.viewer.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n if (this.viewer.owner.commentReviewPane.commentPane.isEditMode) {\n return this.alertBox();\n }\n if (isNullOrUndefined(text)) {\n text = '';\n }\n this.insertCommentInternal(text);\n };\n Editor.prototype.insertCommentInternal = function (text) {\n if (this.selection.isEmpty) {\n // If selection is at paragraph end, move selection to previous word similar to MS Word\n if (this.selection.start.isAtSamePosition(this.selection.end) && this.selection.start.isAtParagraphEnd) {\n var startOffset = this.selection.start.offset;\n this.selection.start.offset = startOffset - 1 !== -1 ? startOffset - 1 : startOffset;\n }\n this.selection.selectCurrentWord();\n // If paragraph mark selected, remove paragraph mark selection\n if (this.selection.isParagraphLastLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getLineLength(this.selection.end.currentWidget) + 1) {\n this.selection.end.offset -= 1;\n }\n }\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startIndex = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var endParagraphInfo = this.selection.getParagraphInfo(this.selection.end);\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n this.initComplexHistory('InsertComment');\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n this.initInsertInline(commentRangeStart);\n if (isNullOrUndefined(position.paragraph)) {\n var endIndex_1 = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n var endPos = this.selection.getTextPosBasedOnLogicalIndex(endIndex_1);\n position.setPositionInternal(endPos);\n }\n // Updates the cloned position, since comment start is added in the same line.\n if (isSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var commentAdv = new CommentElementBox(HelperMethods.getUtcDate());\n if (this.owner.editorHistory) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(commentAdv);\n }\n commentAdv.author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n commentAdv.initial = this.constructCommentInitial(commentAdv.author);\n commentAdv.text = text;\n commentAdv.commentId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n commentRangeStart.comment = commentAdv;\n commentRangeStart.commentId = commentAdv.commentId;\n commentRangeEnd.comment = commentAdv;\n commentRangeEnd.commentId = commentAdv.commentId;\n commentAdv.commentStart = commentRangeStart;\n commentAdv.commentEnd = commentRangeEnd;\n this.addCommentWidget(commentAdv, true, true, true);\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(commentAdv);\n this.editorHistory.updateHistory();\n }\n // this.selection.selectPosition(this.selection.getTextPosBasedOnLogicalIndex(startIndex), this.selection.getTextPosBasedOnLogicalIndex(endIndex));\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection, false);\n if (!this.isUserInsert) {\n var comment = this.owner.commentReviewPane.commentPane.comments.get(commentAdv);\n comment.postComment();\n }\n };\n /**\n * Delete all the comments in current document\n *\n * @returns {void}\n */\n Editor.prototype.deleteAllComments = function () {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n // this.documentHelper.clearSearchHighlight();\n this.initComplexHistory('DeleteAllComments');\n this.owner.isLayoutEnabled = false;\n var historyInfo;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo = this.editorHistory.currentHistoryInfo;\n }\n while (this.documentHelper.comments.length > 0) {\n var comment = this.documentHelper.comments[0];\n this.initComplexHistory('DeleteComment');\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo.addModifiedAction(this.editorHistory.currentHistoryInfo);\n }\n }\n this.selection.selectContent(this.owner.documentStart, true);\n if (this.editorHistory) {\n this.editorHistory.currentHistoryInfo = historyInfo;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * Delete current selected comment.\n *\n * @returns {void}\n */\n Editor.prototype.deleteComment = function () {\n if ((this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || isNullOrUndefined(this.owner) || isNullOrUndefined(this.owner.viewer)\n || isNullOrUndefined(this.owner.documentHelper.currentSelectedComment) || this.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n this.deleteCommentInternal(this.owner.documentHelper.currentSelectedComment);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentInternal = function (comment) {\n this.initComplexHistory('DeleteComment');\n if (comment) {\n if (comment.replyComments.length > 0) {\n for (var i = comment.replyComments.length - 1; i >= 0; i--) {\n this.deleteCommentInternal(comment.replyComments[i]);\n }\n }\n this.deleteCommentWidgetInternal(comment);\n var commentStart = comment.commentStart;\n var commentEnd = comment.commentEnd;\n if (commentEnd.indexInOwner !== -1) {\n this.removeInline(commentEnd);\n }\n if (commentStart.indexInOwner !== -1) {\n this.removeInline(commentStart);\n }\n commentStart.removeCommentMark();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.deleteCommentWidgetInternal = function (comment) {\n if (this.owner.editorHistory) {\n this.initHistory('DeleteCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(comment);\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.deleteCommentWidget(comment);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentWidget = function (comment) {\n var commentIndex = this.documentHelper.comments.indexOf(comment);\n if (commentIndex !== -1) {\n this.documentHelper.comments.splice(commentIndex, 1);\n }\n else if (comment.isReply && comment.ownerComment) {\n commentIndex = comment.ownerComment.replyComments.indexOf(comment);\n comment.ownerComment.replyComments.splice(commentIndex, 1);\n }\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.deleteComment(comment);\n if (this.documentHelper.currentSelectedComment === comment) {\n this.documentHelper.currentSelectedComment = undefined;\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.resolveComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Resolve' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Resolve') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, true);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.reopenComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Reopen' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reopen') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, false);\n };\n /**\n * @private\n */\n Editor.prototype.resolveOrReopenComment = function (comment, resolve) {\n comment.isResolved = resolve;\n for (var i = 0; i < comment.replyComments.length; i++) {\n comment.replyComments[i].isResolved = resolve;\n }\n if (this.owner.commentReviewPane) {\n if (resolve) {\n this.owner.commentReviewPane.resolveComment(comment);\n }\n else {\n this.owner.commentReviewPane.reopenComment(comment);\n }\n }\n this.reLayout(this.selection, false, false);\n };\n /**\n * @param {CommentElementBox} parentComment - Specified the parent comment\n * @param {string} text - Specified the text.\n * @private\n * @returns {void}\n */\n Editor.prototype.replyComment = function (parentComment, text) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var commentWidget = parentComment;\n if (parentComment) {\n this.initComplexHistory('InsertComment');\n var currentCmtStart = commentWidget.commentStart;\n var currentCmtEnd = commentWidget.commentEnd;\n var offset = currentCmtStart.line.getOffset(currentCmtStart, 1);\n var startPosition = new TextPosition(this.documentHelper.owner);\n startPosition.setPositionParagraph(currentCmtStart.line, offset);\n var endOffset = currentCmtEnd.line.getOffset(currentCmtEnd, 1);\n var endPosition = new TextPosition(this.documentHelper.owner);\n endPosition.setPositionParagraph(currentCmtEnd.line, endOffset);\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n startPosition = this.selection.start;\n endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isAtSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n this.initInsertInline(commentRangeStart);\n // Updates the cloned position, since comment start is added in the same paragraph.\n if (isAtSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var replyComment = new CommentElementBox(HelperMethods.getUtcDate());\n replyComment.author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n replyComment.text = text ? text : '';\n replyComment.commentId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n replyComment.isReply = true;\n commentWidget.replyComments.push(replyComment);\n replyComment.ownerComment = commentWidget;\n if (this.owner.editorHistory) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(replyComment);\n }\n commentRangeStart.comment = replyComment;\n commentRangeStart.commentId = replyComment.commentId;\n commentRangeEnd.comment = replyComment;\n commentRangeEnd.commentId = replyComment.commentId;\n replyComment.commentStart = commentRangeStart;\n replyComment.commentEnd = commentRangeEnd;\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.addReply(replyComment, false, true);\n }\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(replyComment);\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection);\n }\n };\n Editor.prototype.removeInline = function (element) {\n this.selection.start.setPositionParagraph(element.line, element.line.getOffset(element, 0));\n this.selection.end.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + element.length);\n this.initHistory('RemoveInline');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n }\n this.removeSelectedContents(this.documentHelper.selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @param {CommentElementBox} commentWidget - Specifies the comment\n * @param {boolean} isNewComment - Specifies is new comment\n * @param {boolean} showComments - Specifies show comments\n * @param {boolean} selectComment - Specified select comment\n * @private\n * @returns {void}\n */\n Editor.prototype.addCommentWidget = function (commentWidget, isNewComment, showComments, selectComment) {\n if (this.documentHelper.comments.indexOf(commentWidget) === -1) {\n var isInserted = false;\n if (this.documentHelper.comments.length > 0) {\n var currentStart = this.selection.getElementPosition(commentWidget.commentStart).startPosition;\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n /* eslint-disable-next-line max-len */\n var paraIndex = this.selection.getElementPosition(this.documentHelper.comments[i].commentStart).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.comments.splice(i, 0, commentWidget);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.comments.push(commentWidget);\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = showComments;\n this.owner.commentReviewPane.selectedTab = 0;\n this.owner.commentReviewPane.addComment(commentWidget, isNewComment, selectComment);\n if (selectComment) {\n this.owner.selection.selectComment(commentWidget);\n }\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specifies comment element box\n * @param {string} hierarchicalIndex - Specifies the hierachical index.\n * @private\n * @returns {void}\n */\n Editor.prototype.addReplyComment = function (comment, hierarchicalIndex) {\n var index = hierarchicalIndex.split(';');\n var ownerComment = this.documentHelper.comments[parseInt(index[1], 10)];\n if (index[2] !== '') {\n ownerComment.replyComments.splice(parseInt(index[2], 10), 0, comment);\n comment.ownerComment = ownerComment;\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = true;\n this.owner.commentReviewPane.addReply(comment, false, true);\n this.owner.selection.selectComment(comment);\n }\n };\n /**\n * @param {string} password - Specifies the password\n * @param {string} protectionType - Specifies the protection type\n * @private\n * @returns {void}\n */\n Editor.prototype.addProtection = function (password, protectionType) {\n if (password === '') {\n this.protectDocument(protectionType);\n }\n else {\n this.currentProtectionType = protectionType;\n var enforceProtectionHandler = new XmlHttpRequestHandler();\n var passwordBase64 = this.base64.encodeString(password);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: '',\n spinCount: 100000\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var url = this.owner.serviceUrl + this.owner.serverActionSettings.restrictEditing;\n enforceProtectionHandler.url = url;\n enforceProtectionHandler.contentType = 'application/json;charset=UTF-8';\n enforceProtectionHandler.onSuccess = this.enforceProtectionInternal.bind(this);\n enforceProtectionHandler.onFailure = this.protectionFailureHandler.bind(this);\n enforceProtectionHandler.onError = this.protectionFailureHandler.bind(this);\n enforceProtectionHandler.customHeaders = this.owner.headers;\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (this.documentHelper.dialog.visible) {\n this.documentHelper.dialog.hide();\n }\n }\n else {\n enforceProtectionHandler.send(formObject, httprequestEventArgs);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.protectionFailureHandler = function (result) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (result.name === 'onError') {\n DialogUtility.alert(localeValue.getConstant('Error in establishing connection with web server'));\n }\n else {\n this.owner.fireServiceFailure(result);\n console.error(result.statusText);\n }\n };\n Editor.prototype.enforceProtectionInternal = function (result) {\n var data = JSON.parse(result.data);\n this.documentHelper.saltValue = data[0];\n this.documentHelper.hashValue = data[1];\n this.protectDocument(this.currentProtectionType);\n };\n Editor.prototype.toggleTrackChangesProtection = function (enabled) {\n this.viewer.owner.enableTrackChanges = enabled;\n var eventArgs = { isTrackChangesEnabled: enabled };\n this.owner.trigger(trackChangeEvent, eventArgs);\n };\n Editor.prototype.protectDocument = function (protectionType) {\n this.protect(protectionType);\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(true);\n this.documentHelper.restrictEditingPane.loadPaneValue();\n this.documentHelper.dialog.hide();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n if (protectionType === 'RevisionsOnly') {\n this.toggleTrackChangesProtection(true);\n }\n this.owner.trackChangesPane.enableDisableButton(false);\n };\n /**\n * Stop document protection.\n *\n * @param {string} password - Specifies the password\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.stopProtection = function (password) {\n if (this.documentHelper.isDocumentProtected) {\n if ((!isNullOrUndefined(this.documentHelper.saltValue) || this.documentHelper.saltValue === '')\n && (!isNullOrUndefined(this.documentHelper.hashValue) || this.documentHelper.hashValue === '')\n && (!isNullOrUndefined(password) || password === '')) {\n this.unProtectDocument();\n return;\n }\n var unProtectDocumentHandler = new XmlHttpRequestHandler();\n var passwordBase64 = this.base64.encodeString(password);\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: this.documentHelper.saltValue,\n spinCount: 100000\n };\n unProtectDocumentHandler.url = this.owner.serviceUrl + this.owner.serverActionSettings.restrictEditing;\n unProtectDocumentHandler.contentType = 'application/json;charset=UTF-8';\n unProtectDocumentHandler.customHeaders = this.owner.headers;\n unProtectDocumentHandler.onSuccess = this.onUnProtectionSuccess.bind(this);\n unProtectDocumentHandler.onFailure = this.protectionFailureHandler.bind(this);\n unProtectDocumentHandler.onError = this.protectionFailureHandler.bind(this);\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (this.documentHelper.dialog.visible) {\n this.documentHelper.dialog.hide();\n }\n }\n else {\n unProtectDocumentHandler.send(formObject, httprequestEventArgs);\n }\n this.toggleTrackChangesProtection(false);\n }\n };\n Editor.prototype.onUnProtectionSuccess = function (result) {\n var encodeString = JSON.parse(result.data);\n this.validateHashValue(encodeString[1]);\n };\n Editor.prototype.validateHashValue = function (currentHashValue) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n var decodeUserHashValue = this.base64.decodeString(currentHashValue);\n var documentHashValue = this.documentHelper.hashValue;\n var defaultHashValue = this.base64.decodeString(documentHashValue);\n var stopProtection = true;\n if (decodeUserHashValue.length === defaultHashValue.length) {\n for (var i = 0; i < decodeUserHashValue.length; i++) {\n if (decodeUserHashValue[i] !== defaultHashValue[i]) {\n stopProtection = false;\n break;\n }\n }\n }\n else {\n stopProtection = false;\n }\n if (stopProtection) {\n this.unProtectDocument();\n }\n else {\n DialogUtility.alert(localeValue.getConstant('The password is incorrect'));\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unProtectDocument = function () {\n var previousProtectionType = this.documentHelper.protectionType;\n this.documentHelper.isDocumentProtected = false;\n this.documentHelper.restrictFormatting = false;\n this.documentHelper.protectionType = 'NoProtection';\n this.documentHelper.saltValue = '';\n this.documentHelper.hashValue = '';\n this.documentHelper.selection.highlightEditRegion();\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n }\n if (previousProtectionType === 'RevisionsOnly') {\n this.toggleTrackChangesProtection(false);\n }\n this.owner.trackChangesPane.enableDisableButton(true);\n if (!isNullOrUndefined(this.editorHistory)) {\n this.owner.editorHistory.clearHistory();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n this.documentHelper.dialog.hide();\n };\n /**\n * Notify content change event\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.fireContentChange = function () {\n if (this.selection.isHighlightEditRegion) {\n if (this.owner.enableLockAndEdit) {\n this.owner.collaborativeEditingModule.updateLockRegion();\n }\n else {\n this.selection.onHighlight();\n }\n }\n this.selection.highlightFormFields();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousSectionFormat = undefined;\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n if (this.documentHelper.owner.isLayoutEnabled && !this.documentHelper.owner.editor.isUserInsert && !this.documentHelper.owner.isShiftingEnabled) {\n this.documentHelper.owner.fireContentChange();\n }\n if (!isNullOrUndefined(this.selection.editPosition)) {\n this.triggerPageSpellCheck = false;\n }\n };\n /**\n * Update physical location for text position\n *\n * @param {boolean} isSelectionChanged - Specifies the selection change\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.predictText = function () {\n this.documentHelper.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.documentHelper.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.documentHelper.prefix = '@' + String.fromCharCode(160) + this.documentHelper.prefix; //  \n this.documentHelper.editableDiv.innerText = this.documentHelper.prefix;\n this.documentHelper.selection.setEditableDivCaretPosition(this.documentHelper.prefix.length);\n };\n /* eslint-disable */\n Editor.prototype.getPrefixAndSuffix = function () {\n //let viewer: LayoutViewer = this.owner.viewer;\n var editor = this.owner;\n var documentHelper = editor.documentHelper;\n if (this.selection.text !== '') {\n documentHelper.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n documentHelper.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* eslint-disable no-cond-assign */\n while ((spaceIndex = documentHelper.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && documentHelper.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n break;\n }\n }\n if (!(documentHelper.prefix.length > 1 && documentHelper.prefix[documentHelper.prefix.length - 1] === ' ' &&\n documentHelper.prefix[documentHelper.prefix.length - 2] === '.')) {\n spaceIndex = documentHelper.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n documentHelper.prefix = '';\n }\n documentHelper.prefix = spaceIndex < 0 ? documentHelper.prefix : documentHelper.prefix.substring(spaceIndex);\n if (documentHelper.prefix.indexOf(' ') === 0 && documentHelper.prefix.length >= 1) {\n documentHelper.prefix = documentHelper.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n documentHelper.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = documentHelper.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && documentHelper.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = documentHelper.suffix.indexOf(' ');\n documentHelper.suffix = spaceIndex < 0 ? documentHelper.suffix : documentHelper.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleCtrlBackKey();\n break;\n case 46:\n event.preventDefault();\n this.handleCtrlDelete();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.insertPageBreak();\n break;\n case 48:\n event.preventDefault();\n var value = 0;\n var beforeSpacing = this.documentHelper.selection.start.paragraph.paragraphFormat.beforeSpacing;\n if (beforeSpacing > 12) {\n value = 12;\n }\n else if (beforeSpacing > 0 && beforeSpacing <= 12) {\n value = 0;\n }\n else if (beforeSpacing === 0) {\n value = 12;\n }\n this.onApplyParagraphFormat('beforeSpacing', value, true, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selection.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selection.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editor.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, true);\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n break;\n case 69:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n var eventArgs = { isTrackChangesEnabled: !this.owner.enableTrackChanges };\n this.owner.trigger(trackChangeEvent, eventArgs);\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n case 70:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertFootnote();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertEndnote();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(true, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.documentHelper.triggerSpellCheck = true;\n this.handleEnterKey();\n this.documentHelper.triggerSpellCheck = false;\n break;\n case 27:\n event.preventDefault();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n case 32:\n this.selection.handleSpaceBarKey();\n break;\n case 120:\n var textPosition = this.selection.getDocumentEnd();\n textPosition.offset = (this.selection.getDocumentEnd().offset + 1);\n if (this.selection.start.isAtSamePosition(this.selection.getDocumentStart()) &&\n this.selection.end.isAtSamePosition(textPosition)) {\n this.owner.updateFields();\n }\n else {\n this.selection.updateRefField();\n }\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleBackKey = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.delete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleEnterKey = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n if (Browser.isDevice) {\n this.documentHelper.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles Control back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlBackKey = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isForward) {\n start = end;\n }\n if (this.selection.isEmpty) {\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n /* eslint-disable max-len */\n }\n else if (((isNullOrUndefined(start.paragraph.previousRenderedWidget) || start.paragraph.previousRenderedWidget instanceof TableWidget)\n && start.offset === 0)) {\n return;\n }\n else {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n }\n }\n };\n /**\n * Handles Ctrl delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isEmpty) {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftRightKey();\n var selectedText = this.selection.text;\n var checkSpace = HelperMethods.endsWith(selectedText);\n if (checkSpace) {\n this.selection.handleShiftLeftKey();\n }\n this.owner.editorModule.delete();\n }\n else {\n this.selection.handleControlShiftRightKey();\n this.owner.editorModule.delete();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode && this.canEditContentControl || this.selection.isInlineFormFillMode()) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text);\n /* eslint-disable @typescript-eslint/indent */\n this.animationTimer = setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600);\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n Editor.prototype.getResultContentControlText = function (element) {\n var ele = element.nextNode;\n var text = '';\n while (!(ele instanceof ContentControl)) {\n if (ele instanceof TextElementBox) {\n text += ele.text;\n }\n if (isNullOrUndefined(ele)) {\n break;\n }\n if (isNullOrUndefined(ele.nextNode)) {\n if (ele.paragraph.nextRenderedWidget) {\n ele = ele.paragraph.nextRenderedWidget.firstChild.children[0];\n }\n else {\n break;\n }\n }\n else {\n ele = ele.nextNode;\n }\n }\n return text;\n };\n Editor.prototype.updateXmlMappedContentControl = function () {\n if (this.isXmlMapped) {\n var startInlineEle = this.getContentControl();\n if (startInlineEle && startInlineEle.contentControlProperties) {\n this.updateCustomXml(startInlineEle.contentControlProperties.xmlMapping.storeItemId, startInlineEle.contentControlProperties.xmlMapping.xPath, this.getResultContentControlText(startInlineEle));\n }\n }\n };\n Editor.prototype.updateCustomXml = function (itemId, xPath, text) {\n if (this.documentHelper.customXmlData.containsKey(itemId)) {\n var xml = this.documentHelper.customXmlData.get(itemId);\n var parser = new DOMParser();\n var xmlDoc = parser.parseFromString(xml, 'text/xml');\n var lastText = xPath.substring(xPath.lastIndexOf('/') + 1);\n lastText = lastText.split('[')[0];\n lastText = lastText.substring(lastText.lastIndexOf(':') + 1);\n lastText = lastText.substring(lastText.lastIndexOf('@') + 1);\n var htmlCollec = xmlDoc.getElementsByTagName(lastText);\n if (htmlCollec.length > 0) {\n htmlCollec[0].childNodes[0].nodeValue = text;\n }\n else if (xmlDoc.documentElement.attributes.length > 0 && xmlDoc.documentElement.attributes.getNamedItem(lastText) !== null) {\n xmlDoc.documentElement.attributes.getNamedItem(lastText).value = text;\n }\n else {\n return;\n }\n var newXml = new XMLSerializer();\n var xmlString = newXml.serializeToString(xmlDoc);\n this.documentHelper.customXmlData.set(itemId, xmlString);\n }\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text - text to insert\n */\n Editor.prototype.insertText = function (text) {\n if (isNullOrUndefined(text) || text === '') {\n return;\n }\n this.insertTextInternal(text, false);\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.insertTextInternal = function (text, isReplace, revisionType) {\n if (text.indexOf('\\r') >= 0 || text.indexOf('\\n') >= 0) {\n if (text === '\\r' || text === '\\n' || text === '\\r\\n') {\n this.onEnter();\n }\n else {\n this.isInsertText = true;\n this.pasteContents(text);\n this.isInsertText = false;\n }\n return;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode()) {\n var inline = this.selection.getCurrentFormField();\n var resultText = this.getFieldResultText(inline);\n var rex = new RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.length > 0 && resultText.replace(rex, '') === '') {\n resultText = '';\n this.selection.selectFieldInternal(inline);\n }\n var maxLength = inline.formFieldData.maxLength;\n if (maxLength !== 0 && resultText.length >= maxLength) {\n return;\n }\n }\n var selection = this.documentHelper.selection;\n var insertPosition;\n var isRemoved = true;\n revisionType = (this.owner.enableTrackChanges && isNullOrUndefined(revisionType)) ? 'Insertion' : revisionType;\n var commentStarts = this.checkAndRemoveComments();\n this.isListTextSelected();\n if (isNullOrUndefined(revisionType) || revisionType === 'Insertion') {\n this.initHistory('Insert');\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var paraFormat = paragraphInfo.paragraph.paragraphFormat;\n selection.editPosition = selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var bidi = selection.start.paragraph.paragraphFormat.bidi;\n if ((!selection.isEmpty && !selection.isImageSelected) ||\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n var endPosition = undefined;\n if (this.owner.enableTrackChanges) {\n if (!this.selection.start.isExistBefore(this.selection.end)) {\n endPosition = this.selection.start.clone();\n }\n else {\n endPosition = this.selection.end.clone();\n }\n this.skipReplace = true;\n }\n isRemoved = this.removeSelectedContents(selection);\n this.skipReplace = false;\n if (!isNullOrUndefined(endPosition)) {\n if (this.owner.search.isRepalceTracking) {\n this.owner.search.isRepalceTracking = false;\n }\n this.selection.start.setPositionInternal(this.selection.start);\n this.selection.end.setPositionInternal(endPosition);\n }\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n else if (selection.isEmpty && !this.documentHelper.isListTextSelected && !isReplace) {\n this.documentHelper.isTextInput = true;\n }\n paragraphInfo = this.selection.getParagraphInfo(selection.start);\n paragraphInfo.paragraph.paragraphFormat.copyFormat(paraFormat);\n var isSpecialChars = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n span.characterFormat.bidi = isBidi;\n span.isRightToLeft = isBidi;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n if (this.owner.enableTrackChanges) {\n if (span.paragraph.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(span.paragraph.characterFormat.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, span.paragraph.characterFormat, span, true);\n }\n }\n else if (!this.checkToCombineRevisionWithPrevPara(span, revisionType)) {\n this.insertRevision(span, revisionType);\n }\n }\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline, bidi, (isReplace) ? false : true);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n inline.ischangeDetected = true;\n if (inline instanceof TextElementBox && text !== ' ' && this.documentHelper.owner.isSpellCheck) {\n this.owner.spellChecker.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n if (!isReplace) {\n inline.ignoreOnceItems = [];\n }\n }\n if (inline.canTrigger && inline.text.length <= 1) {\n inline.canTrigger = false;\n }\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n var insertLangId = this.documentHelper.textHelper.getRtlLanguage(text).id;\n var inlineLangId = 0;\n var isRtl = false;\n var isInlineContainsSpecChar = false;\n var isTextContainsSpecChar = false;\n if (inline instanceof TextElementBox) {\n inlineLangId = this.documentHelper.textHelper.getRtlLanguage(inline.text).id;\n isRtl = this.documentHelper.textHelper.getRtlLanguage(inline.text).isRtl;\n isTextContainsSpecChar = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n }\n if ((!isBidi && inline.characterFormat.bidi && (inlineLangId !== 0 || (isTextContainsSpecChar && isRtl)))\n || (text === ' ' && this.selection.characterFormat.bidi)) {\n isBidi = true;\n }\n if (isBidi || !this.documentHelper.owner.isSpellCheck) {\n insertFormat.bidi = isBidi;\n }\n if ((!this.documentHelper.owner.isSpellCheck || (text !== ' ' && inline.text !== ' ')) && insertFormat.isSameFormat(inline.characterFormat) && this.canInsertRevision(inline, revisionType)\n || (text.trim() === '' && !isBidi && inline.characterFormat.bidi) || isRtl && insertFormat.isSameFormat(inline.characterFormat) && isSpecialChars) {\n this.insertTextInline(inline, selection, text, indexInInline);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.isRightToLeft = isRtl;\n tempSpan.characterFormat.copyFormat(insertFormat);\n if (inline instanceof FootnoteElementBox) {\n tempSpan.characterFormat.baselineAlignment = 'Normal';\n }\n var isRevisionCombined = false;\n var insertIndex = inline.indexInOwner;\n var prevRevisionCount = tempSpan.revisions.length;\n if (indexInInline === inline.length) {\n var index = -1;\n index = insertIndex + 1;\n if (this.owner.enableTrackChanges && !(inline instanceof BookmarkElementBox)) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === prevRevisionCount) {\n if (inline.nextNode != undefined && inline.nextNode.revisions.length == 1) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n else if (inline.paragraph.characterFormat.revisions.length == 1 && inline.paragraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType, inline.paragraph);\n }\n else {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(index, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else if (indexInInline === 0) {\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === 0) {\n this.checkToMapRevisionWithPreviousNode(inline.previousNode, tempSpan, isBidi, revisionType);\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n if (!this.owner.enableTrackChanges && !this.selection.isInField) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n }\n inline.text = inline.text.slice(0, indexInInline);\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (isRevisionCombined || tempSpan.revisions.length > prevRevisionCount) {\n this.copyElementRevision(inline, splittedSpan, true);\n }\n else if (tempSpan.revisions.length === prevRevisionCount) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n this.insertRevision(tempSpan, revisionType);\n }\n }\n else if (this.selection.isInField) {\n this.copyElementRevision(inline, splittedSpan, false);\n this.updateElementInFieldRevision(inline, tempSpan, inline.revisions, true);\n }\n if (this.owner.isSpellCheck) {\n this.owner.spellChecker.updateSplittedElementError(inline, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.documentHelper.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n if (isNullOrUndefined(revisionType) || revisionType === 'Insertion') {\n this.reLayout(selection);\n }\n this.documentHelper.isTextInput = false;\n }\n this.updateXmlMappedContentControl();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var isList = false;\n if (!(text === '\\v')) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (!isList) {\n if (!isNullOrUndefined(selection.getHyperlinkField())) {\n return;\n }\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.updateElementInFieldRevision = function (revisionElement, elementToInclude, revisions, isEnd) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice(isEnd ? rangeIndex + 1 : rangeIndex, 0, elementToInclude);\n }\n };\n Editor.prototype.retrieveFieldResultantText = function (item) {\n var resultantText = '';\n if (item.fieldType === 1) {\n var textElement = item.previousElement;\n while (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n resultantText = textElement.text + resultantText;\n textElement = (!isNullOrUndefined(textElement.previousNode)) ? textElement.previousNode.previousValidNodeForTracking : undefined;\n }\n }\n return resultantText;\n };\n Editor.prototype.checkToCombineRevisionsinBlocks = function (tempSpan, checkWidget, isEnd, revisionType) {\n if (!checkWidget || !this.owner.enableTrackChanges) {\n return;\n }\n // if (tempSpan instanceof FieldElementBox && tempSpan.fieldType === 2) {\n // return;\n // }\n if (tempSpan instanceof BookmarkElementBox || tempSpan instanceof CommentCharacterElementBox || tempSpan instanceof EditRangeStartElementBox || tempSpan instanceof EditRangeEndElementBox) {\n return;\n }\n var isCombined = false;\n if (isEnd) {\n isCombined = this.combineRevisionWithNextPara(tempSpan, revisionType);\n }\n else {\n isCombined = this.combineRevisionWithPrevPara(tempSpan, revisionType);\n }\n if (!isCombined) {\n this.insertRevision(tempSpan, revisionType);\n }\n };\n Editor.prototype.checkToMapRevisionWithNextNode = function (inline, tempSpan, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara) && inlinePara.characterFormat.revisions.length == 1) {\n var nextElementPara = inlinePara.characterFormat;\n if (!isNullOrUndefined(nextElementPara)) {\n return this.checkToMapRevisionWithInlineText(undefined, 0, tempSpan, isBidi, revisionType, nextElementPara);\n }\n return false;\n }\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var nextElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(nextElement)) {\n return this.checkToMapRevisionWithInlineText(nextElement, 0, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithPreviousNode = function (inline, tempSpan, isBidi, revisionType) {\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var prevElement = inline.previousValidNodeForTracking;\n if (!isNullOrUndefined(prevElement)) {\n return this.checkToMapRevisionWithInlineText(prevElement, prevElement.length, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithInlineText = function (inline, indexInInline, newElement, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (!isNullOrUndefined(inlinePara) && inlinePara.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(undefined, newElement, indexInInline, true, isBidi, revisionType, inlinePara);\n }\n }\n else if (!isNullOrUndefined(inline)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (inline.length === indexInInline && inline.previousValidNodeForTracking != undefined) {\n inline = inline.previousValidNodeForTracking;\n indexInInline = inline.length;\n if (inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, false, isBidi, revisionType);\n }\n }\n else if (indexInInline === 0) {\n inline = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(inline) && inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, true, isBidi, revisionType);\n }\n }\n }\n return false;\n };\n Editor.prototype.combineElementRevisions = function (inline, elementToCombine) {\n if (inline.revisions.length === 0 || elementToCombine.revisions.length === 0) {\n return;\n }\n for (var i = 0; i < inline.revisions.length; i++) {\n var prevRevision = inline.revisions[i];\n for (var j = 0; j < elementToCombine.revisions.length; j++) {\n var currentRevision = elementToCombine.revisions[i];\n if (prevRevision.range.indexOf(elementToCombine) === -1 && currentRevision.revisionType === prevRevision.revisionType && currentRevision.author === prevRevision.author) {\n elementToCombine.revisions.splice(j, 1);\n prevRevision.range.push(elementToCombine);\n elementToCombine.revisions.splice(j, 0, prevRevision);\n }\n }\n }\n };\n Editor.prototype.applyMatchedRevisionInorder = function (inline, newElement, indexInInline, isBegin, isBidi, revisionType, inlinePara) {\n var revisionsMatched;\n if (!isNullOrUndefined(inlinePara) && isNullOrUndefined(inline)) {\n revisionsMatched = this.getMatchedRevisionsToCombine(inlinePara.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inlinePara, newElement, isBegin);\n }\n return false;\n }\n else {\n revisionsMatched = this.getMatchedRevisionsToCombine(inline.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inline, newElement, isBegin);\n }\n return false;\n }\n };\n Editor.prototype.copyElementRevision = function (elementToCopy, elementToInclude, isSplitElementMerged) {\n if (!this.isTrackingFormField) {\n for (var i = 0; i < elementToCopy.revisions.length; i++) {\n var currentRevision = elementToCopy.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(elementToCopy);\n elementToInclude.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex + ((isSplitElementMerged) ? 2 : 1), 0, elementToInclude);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.mapMatchedRevisions = function (revisions, revisionElement, elementToInclude, isBegin) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n if (!this.isRevisionAlreadyIn(elementToInclude, currentRevision) || elementToInclude instanceof WCharacterFormat) {\n elementToInclude.revisions.splice(0, 0, currentRevision);\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice((isBegin) ? rangeIndex : rangeIndex + 1, 0, elementToInclude);\n }\n }\n };\n Editor.prototype.isRevisionAlreadyIn = function (element, revision) {\n if (element.revisions.length > 0) {\n for (var i = 0; i < element.revisions.length; i++) {\n var elementRevision = element.revisions[i];\n if (elementRevision.revisionID === revision.revisionID) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.getMatchedRevisionsToCombine = function (revisions, revisionType) {\n var matchedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n if (this.isRevisionMatched(revisions[i], revisionType)) {\n matchedRevisions.push(revisions[i]);\n }\n }\n return matchedRevisions;\n };\n Editor.prototype.decideInlineForTrackChanges = function (inline, revisionType) {\n var matched = false;\n if (this.owner.enableTrackChanges && !this.canInsertRevision(inline, revisionType)) {\n var currentElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(currentElement) && this.canInsertRevision(currentElement, revisionType)) {\n inline = currentElement;\n matched = true;\n }\n }\n return { 'element': inline, 'isMatched': matched };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertIMEText = function (text, isUpdate) {\n if (this.documentHelper.lastComposedText === text && isUpdate) {\n return;\n }\n // Clone selection start position\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n // Insert IME text in current selection\n this.insertText(text);\n this.documentHelper.lastComposedText = text;\n // update selection start\n var start = this.selection.start;\n this.setPositionForCurrentIndex(start, startPosition);\n // Update selection end\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionForLineWidget(start.currentWidget, start.offset + text.length);\n this.selection.selectPosition(isUpdate ? start : endPosition, endPosition);\n };\n /**\n * Insert Section break at cursor position\n *\n * @returns {void}\n */\n Editor.prototype.insertSectionBreak = function () {\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(selection) || this.owner.isReadOnlyMode || selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initHistory('SectionBreak');\n if (!selection.isEmpty) {\n selection.selectContent(selection.isForward ? selection.start : selection.end, true);\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.insertSection(selection, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n if (this.owner.layoutType === 'Continuous') {\n this.layoutWholeDocument();\n }\n };\n Editor.prototype.combineRevisionWithBlocks = function (elementBox, revisionType) {\n if (!this.owner.enableTrackChanges || isNullOrUndefined(elementBox)) {\n return;\n }\n while (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox) {\n elementBox = elementBox.nextElement;\n }\n if (isNullOrUndefined(elementBox)) {\n return;\n }\n var prevPara = elementBox.paragraph.previousRenderedWidget;\n if (prevPara instanceof TableWidget) {\n return;\n }\n var isNew = true;\n if (!isNullOrUndefined(prevPara) && !prevPara.isEmpty() && prevPara.characterFormat.revisions.length > 0) {\n var lastLine_1 = prevPara.lastChild;\n if (isNullOrUndefined(lastLine_1) || lastLine_1.children.length === 0) {\n return;\n }\n var lastElement_1 = lastLine_1.children[lastLine_1.children.length - 1];\n while (lastElement_1 instanceof BookmarkElementBox || lastElement_1 instanceof CommentCharacterElementBox) {\n lastElement_1 = lastElement_1.previousElement;\n }\n if (lastElement_1.revisions.length > 0) {\n if (this.compareElementRevision(prevPara.characterFormat, elementBox)) {\n var currentRevision = elementBox.revisions[elementBox.revisions.length - 1];\n if (this.compareElementRevision(lastElement_1, elementBox)) {\n var lastElementRevision = lastElement_1.revisions[lastElement_1.revisions.length - 1];\n isNew = false;\n if (currentRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(currentRevision.range, lastElementRevision, lastElementRevision.range.indexOf(lastElement_1) + 1);\n }\n }\n }\n }\n }\n prevPara = null;\n var lastLine = elementBox.paragraph.lastChild;\n var lastElement = lastLine.children[lastLine.children.length - 1];\n elementBox = lastElement;\n var nextPara = elementBox.paragraph.nextRenderedWidget;\n if (nextPara instanceof TableWidget) {\n return;\n }\n if (!isNullOrUndefined(nextPara) && !nextPara.isEmpty() && elementBox.paragraph.characterFormat.revisions.length > 0) {\n // let lastLine: LineWidget = elementBox.paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox) {\n firstElement = firstElement.previousElement;\n }\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n if (firstElement.revisions.length > 0) {\n var firstEleRevision = firstElement.revisions[firstElement.revisions.length - 1];\n if (this.compareElementRevision(elementBox.paragraph.characterFormat, firstElement)) {\n if (this.compareElementRevision(elementBox, firstElement)) {\n var lastElementRevision = elementBox.revisions[elementBox.revisions.length - 1];\n isNew = false;\n if (firstEleRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(firstEleRevision.range, lastElementRevision, lastElementRevision.range.indexOf(elementBox) + 1);\n }\n }\n }\n }\n }\n if (elementBox.revisions.length === 0) {\n this.insertRevision(elementBox, revisionType);\n }\n };\n Editor.prototype.checkToCombineRevisionWithNextPara = function (elementBox, revisionType) {\n var nextPara = elementBox.paragraph.nextRenderedWidget;\n if (nextPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(nextPara) && !nextPara.isEmpty()) {\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox) {\n firstElement = firstElement.previousElement;\n }\n if (isNullOrUndefined(firstElement)) {\n return false;\n }\n if (firstElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, firstElement, elementBox, true);\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkToCombineRevisionWithPrevPara = function (elementBox, revisionType) {\n var prevPara = elementBox.paragraph.previousRenderedWidget;\n if (prevPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(prevPara) && prevPara.characterFormat.revisions.length > 0) {\n if (!this.isRevisionMatched(prevPara.characterFormat, revisionType)) {\n return false;\n }\n // let firstLine: LineWidget = prevPara.firstChild as LineWidget;\n // let lastLine: LineWidget = prevPara.lastChild as LineWidget;\n // if (isNullOrUndefined(lastLine) || lastLine.children.length === 0) {\n // return false;\n // }\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n // if (lastElement instanceof BookmarkElementBox || lastElement instanceof CommentCharacterElementBox) {\n // lastElement = lastElement.previousValidNodeForTracking;\n // }\n // if (isNullOrUndefined(lastElement)) {\n // return false;\n // }\n // if (lastElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevPara.characterFormat, elementBox, false);\n return true;\n }\n // }\n }\n return false;\n };\n Editor.prototype.combineRevisionWithNextPara = function (elementBox, revisionType) {\n var isLastLine = elementBox.line.isLastLine();\n var nextElement = elementBox.nextNode;\n if (isLastLine && isNullOrUndefined(nextElement)) {\n return this.checkToCombineRevisionWithNextPara(elementBox, revisionType);\n }\n return false;\n };\n Editor.prototype.combineRevisionWithPrevPara = function (elementBox, revisionType) {\n var isFirstLine = elementBox.line.isFirstLine();\n var prevElement = elementBox.previousNode;\n if (isFirstLine && isNullOrUndefined(prevElement)) {\n return this.checkToCombineRevisionWithPrevPara(elementBox, revisionType);\n }\n return false;\n };\n Editor.prototype.removeRevision = function (revisionToRemove) {\n var elementInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset + 1, 0);\n var elementBox = elementInfo.element;\n if (elementInfo.element.revisions.length > 0) {\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === revisionToRemove.revisionType) {\n var revision = elementBox.revisions[i];\n var startIndex = revision.range.indexOf(elementBox);\n for (var j = startIndex; startIndex < revision.range.length; startIndex++) {\n revision.range[j].revisions.splice(i, 1);\n revision.range.splice(j, 1);\n }\n }\n }\n }\n };\n Editor.prototype.clearElementRevision = function (revision) {\n if (isNullOrUndefined(revision)) {\n return;\n }\n for (var i = 0; i < revision.range.length; i++) {\n if (revision.range[i] instanceof ElementBox) {\n var currentElement = revision.range[i];\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n revision.range.splice(i, 1);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.insertRevision = function (item, type, author, date, spittedRange) {\n author = !isNullOrUndefined(author) ? author : this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n var currentDate = !isNullOrUndefined(date) ? date : HelperMethods.getUtcDate();\n if (item instanceof ElementBox && !isNullOrUndefined(item.line) && item.line.paragraph.associatedCell || (item instanceof WCharacterFormat && item.ownerBase instanceof ParagraphWidget && item.ownerBase.associatedCell)) {\n var cellWidget = undefined;\n if (item instanceof ElementBox) {\n cellWidget = item.line.paragraph.associatedCell;\n }\n else if (item instanceof WCharacterFormat) {\n cellWidget = item.ownerBase.associatedCell;\n }\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var rowFormat = cellWidget.ownerRow.rowFormat;\n var matchedRevisions = this.getMatchedRevisionsToCombine(rowFormat.revisions, type);\n if (matchedRevisions.length > 0) {\n for (var i = 0; i < matchedRevisions.length; i++) {\n item.revisions.splice(0, 0, matchedRevisions[i]);\n matchedRevisions[i].range.push(item);\n }\n return;\n }\n }\n }\n var revision = new Revision(this.owner, author, currentDate);\n revision.revisionType = type;\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n if (!isNullOrUndefined(spittedRange) && spittedRange.length > 0) {\n this.clearAndUpdateRevisons(spittedRange, revision, spittedRange.indexOf(item));\n }\n else {\n item.revisions.push(revision);\n revision.range.push(item);\n }\n this.updateRevisionCollection(revision);\n };\n /**\n * Method help to clear previous revisions and include new revision at specified index\n *\n * @param range - range of elements to be cleared\n * @param revision - revision to be inserted\n * @param index - index at which to be included in the revision range\n * @returns {void}\n */\n Editor.prototype.clearAndUpdateRevisons = function (range, revision, index) {\n for (var i = 0; i < range.length; i++) {\n if (range[i] instanceof ElementBox) {\n var currentElement = range[i];\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n currentElement.revisions.push(revision);\n revision.range.splice(index + i, 0, currentElement);\n }\n }\n };\n Editor.prototype.splitRevisionByElement = function (item, revision) {\n if (item.revisions.length > 0) {\n var range = revision.range;\n var index = range.indexOf(item);\n revision.range = range.splice(0, index + 1);\n return range;\n }\n return undefined;\n };\n /**\n * Method to update revision for the splitted text element\n * @param inline - Original text element\n * @param splittedSpan - Splitted element\n */\n Editor.prototype.updateRevisionForSpittedTextElement = function (inline, splittedSpan) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedRange = this.splitRevisionByElement(inline, revision);\n this.insertRevision(splittedSpan, revision.revisionType, revision.author, revision.date, splittedRange);\n }\n };\n Editor.prototype.isRevisionMatched = function (item, type) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n if (item instanceof Revision) {\n if ((isNullOrUndefined(type) || type === item.revisionType) && item.author === author) {\n return true;\n }\n }\n else if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var elementRevision = item.revisions[i];\n if ((isNullOrUndefined(type) || type === elementRevision.revisionType) && elementRevision.author === author) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.compareElementRevision = function (element, compare) {\n if (element.revisions.length === 0 || compare.revisions.length === 0) {\n return false;\n }\n for (var i = 0; i < element.revisions.length; i++) {\n var currentRevision = element.revisions[i];\n for (var j = 0; j < compare.revisions.length; j++) {\n if (currentRevision.author === compare.revisions[i].author && currentRevision.revisionType === compare.revisions[i].revisionType) {\n return true;\n }\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canInsertRevision = function (item, type) {\n var revisionType = isNullOrUndefined(type) ? 'Insertion' : type;\n if (revisionType === 'Deletion') {\n return false;\n }\n if (this.owner.enableTrackChanges) {\n return this.isRevisionMatched(item, revisionType);\n //if it has revision\n }\n else if (item.revisions.length > 0) {\n return false;\n }\n return true;\n };\n Editor.prototype.insertRevisionAtEnd = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.previousValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, true, revisionType);\n };\n Editor.prototype.insertRevisionAtPosition = function (item, newElement, isEnd, revisionType) {\n // if (newElement instanceof FieldElementBox && (newElement as FieldElementBox).fieldType === 2) {\n // return false;\n // }\n var prevRevisionLength = newElement.revisions.length;\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(item, (isEnd) ? item.length : 0, newElement, false, revisionType);\n // Check to combine with previous and next element\n if (isEnd) {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(item.nextNode, newElement, false, revisionType);\n }\n }\n else {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithPreviousNode(item.previousNode, newElement, false, revisionType);\n }\n }\n return isRevisionCombined;\n };\n Editor.prototype.insertRevisionAtBegining = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.nextValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, false, revisionType);\n };\n Editor.prototype.splitRevisionForSpittedElement = function (element, spittedElement) {\n for (var i = element.revisions.length - 1; i >= 0; i--) {\n var revision = element.revisions[i];\n var splittedRange = this.splitRevisionByElement(element, revision);\n this.insertRevision(spittedElement, revision.revisionType, revision.author, revision.date, splittedRange);\n }\n };\n /**\n * Method to combine element revision if not inserts new revision\n */\n // private checkToCombineRevision(element: ElementBox, newElement: ElementBox, revisionType: RevisionType): boolean {\n // let isCombined: boolean = false;\n // if (this.isRevisionMatched(element, revisionType)) {\n // isCombined = true;\n // this.combineElementRevision(element, newElement, true);\n // } else {\n // this.insertRevision(newElement, revisionType);\n // }\n // return isCombined;\n // }\n Editor.prototype.combineElementRevision = function (currentElementRevisions, elementToCombine) {\n for (var i = 0; i < currentElementRevisions.length; i++) {\n for (var j = 0; j < elementToCombine.length; j++) {\n var currentRevision = currentElementRevisions[i];\n var revisionToCombine = elementToCombine[i];\n if (currentRevision.author === revisionToCombine.author && currentRevision.revisionType === revisionToCombine.revisionType) {\n var rangeLength = revisionToCombine.range.length;\n for (var k = 0; k < rangeLength; k++) {\n var item = revisionToCombine.range[0];\n item.revisions.splice(item.revisions.indexOf(revisionToCombine), 1);\n revisionToCombine.range.splice(0, 1);\n currentRevision.range.push(item);\n item.revisions.push(currentRevision);\n }\n if (revisionToCombine.range.length === 0) {\n this.owner.revisions.remove(revisionToCombine);\n }\n }\n }\n }\n };\n Editor.prototype.combineRevisions = function (block, startPosition, endposition) {\n if (!this.owner.enableTrackChanges) {\n return;\n }\n var info = this.selection.getLineInfo(block, startPosition.offset);\n var elementInfo = info.line.getInline(startPosition.offset, 0);\n var currentElement = elementInfo.element;\n if (currentElement.revisions.length > 0) {\n if (this.isRevisionMatched(currentElement, 'Insertion')) {\n var nextElement = currentElement.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement.revisions.length > 0) {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var range = nextElement.revisions[nextElement.revisions.length - 1].range;\n this.clearAndUpdateRevisons(range, revision, revision.range.indexOf(currentElement) + 1);\n }\n }\n }\n // let startOffset: number = startPosition.currentWidget.getOffset(firstElement, 0);\n // let endOffset: number = endposition.currentWidget.getOffset(lastElement, 0);\n };\n /**\n * Method to update the revision for whole block\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.insertRevisionForBlock = function (widget, revisionType, isTOC, revision) {\n if (widget.childWidgets.length === 0 || !this.owner.enableTrackChanges) {\n return;\n }\n if (revisionType === 'Deletion') {\n var editPostion = this.selection.editPosition;\n var start = this.selection.start.clone();\n var end = this.selection.end.clone();\n this.documentHelper.layout.clearListElementBox(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var line = (widget.childWidgets[i]);\n this.removeContent(line, 0, this.documentHelper.selection.getLineLength(line));\n }\n this.selection.editPosition = editPostion;\n this.selection.start.setPositionInternal(start);\n this.selection.end.setPositionInternal(end);\n // let textPosition: TextPosition = this.selection.getTextPosBasedOnLogicalIndex(editPostion);\n // this.selection.selectContent(textPosition, true);\n this.removeEmptyLine(widget);\n this.documentHelper.layout.reLayoutParagraph(widget, 0, 0);\n }\n else {\n var skipParaMark = false;\n if (isNullOrUndefined(revision)) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n revision = new Revision(this.owner, author, HelperMethods.getUtcDate());\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n revision.revisionType = revisionType;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var elemets = widget.childWidgets[i].children;\n if (elemets.length === 0) {\n var paraIndex = widget.containerWidget.childWidgets.indexOf(widget);\n var prevWidget = undefined;\n if (paraIndex > 0) {\n prevWidget = widget.containerWidget.childWidgets[paraIndex - 1];\n }\n if (!isNullOrUndefined(prevWidget) && prevWidget instanceof ParagraphWidget && prevWidget.characterFormat.revisions.length > 0) {\n if (this.isRevisionMatched(prevWidget.characterFormat, revisionType)) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevWidget.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevWidget.characterFormat, widget.characterFormat, false);\n skipParaMark = true;\n revision = undefined;\n }\n }\n }\n }\n for (var j = 0; j < elemets.length; j++) {\n if (j === 0 && !isTOC) {\n var prevRevisionCount = elemets[i].revisions.length;\n this.checkToCombineRevisionsinBlocks(elemets[i], true, false, 'Insertion');\n if (elemets[i].revisions.length > prevRevisionCount) {\n revision = elemets[i].revisions[elemets[i].revisions.length - 1];\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n }\n if (!isTOC && !skipParaMark) {\n widget.characterFormat.revisions.push(revision);\n revision.range.push(widget.characterFormat);\n }\n if (!isNullOrUndefined(revision)) {\n this.updateRevisionCollection(revision);\n }\n }\n };\n Editor.prototype.updateRevisionCollection = function (revision) {\n var isInserted = false;\n var paraIndex = undefined;\n if (this.owner.revisions.changes.indexOf(revision) < 0) {\n if (!this.documentHelper.revisionsInternal.containsKey(revision.revisionID)) {\n this.documentHelper.revisionsInternal.add(revision.revisionID, revision);\n }\n if (this.owner.revisions.changes.length > 0) {\n var currentStart = this.owner.selection.start;\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var currentRange = this.owner.revisions.changes[i].range[0];\n if (currentRange instanceof ElementBox && !isNullOrUndefined(currentRange.line) && currentRange.line.paragraph.bodyWidget) {\n paraIndex = this.selection.getElementPosition(this.owner.revisions.changes[i].range[0]).startPosition;\n }\n else if (currentRange instanceof WRowFormat) {\n var rowWidget = currentRange.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n var firstPara = this.selection.getFirstParagraph(firstCell);\n if (firstPara.bodyWidget) {\n var selection = this.documentHelper.selection;\n this.updateEditPosition(firstCell, selection);\n paraIndex = this.selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n }\n }\n else if (currentRange instanceof WCharacterFormat) {\n var paraWidget = currentRange.ownerBase;\n if (paraWidget.lastChild && paraWidget.lastChild.paragraph.bodyWidget) {\n var offset = paraWidget.getLength();\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(paraWidget.lastChild, offset);\n paraIndex = startPosition;\n }\n }\n if (!isNullOrUndefined(paraIndex) && !isNullOrUndefined(currentStart)) {\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.owner.revisions.changes.splice(i, 0, revision);\n break;\n }\n }\n }\n }\n if (!isInserted) {\n this.owner.revisions.changes.push(revision);\n }\n this.documentHelper.updateAuthorIdentity();\n }\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Editor.prototype.insertSection = function (selection, selectFirstBlock) {\n var newSectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat.cloneFormat();\n var lastBlock;\n var firstBlock;\n if (selection.start.paragraph.isInsideTable) {\n var table = this.documentHelper.layout.getParentTable(selection.start.paragraph);\n table = table.combineWidget(this.owner.viewer);\n var insertBefore = false;\n if (selection.start.paragraph.associatedCell.rowIndex === 0) {\n insertBefore = true;\n }\n var newParagraph = new ParagraphWidget();\n var previousBlock = table.previousRenderedWidget;\n if (!insertBefore) {\n lastBlock = this.splitTable(table, selection.start.paragraph.associatedCell.ownerRow);\n this.documentHelper.layout.layoutBodyWidgetCollection(lastBlock.index, lastBlock.containerWidget, lastBlock, false);\n lastBlock = lastBlock.getSplitWidgets().pop();\n }\n else {\n lastBlock = table;\n }\n var insertIndex = 0;\n if ((isNullOrUndefined(previousBlock) || !previousBlock.bodyWidget.equals(lastBlock.bodyWidget)) && insertBefore) {\n insertIndex = 0;\n newParagraph.index = 0;\n }\n else {\n insertIndex = lastBlock.indexInOwner + 1;\n newParagraph.index = lastBlock.index + 1;\n }\n lastBlock.containerWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n newParagraph.containerWidget = lastBlock.containerWidget;\n this.updateNextBlocksIndex(newParagraph, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.containerWidget, newParagraph, false);\n lastBlock = newParagraph;\n }\n else {\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var selectionStart = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n //Split Paragraph\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, selectionStart);\n lastBlock = selection.start.paragraph.getSplitWidgets().pop();\n }\n //Split body widget\n firstBlock = this.splitBodyWidget(lastBlock.bodyWidget, newSectionFormat, lastBlock).firstChild;\n if (firstBlock instanceof TableWidget) {\n firstBlock.updateRowIndex(0);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(firstBlock.index, firstBlock.containerWidget, firstBlock, false);\n if (firstBlock instanceof TableWidget) {\n firstBlock = selection.getFirstParagraphInFirstCell(firstBlock);\n }\n if (selectFirstBlock) {\n selection.selectParagraphInternal(firstBlock, true);\n }\n return firstBlock;\n };\n /**\n * @private\n */\n Editor.prototype.splitBodyWidget = function (bodyWidget, sectionFormat, startBlock) {\n //let sectionIndex: number;\n //Move blocks after the start block to next body widget\n var newBodyWidget = this.documentHelper.layout.moveBlocksToNextPage(startBlock, true);\n //Update SectionIndex for splitted body widget\n this.updateSectionIndex(sectionFormat, newBodyWidget, true);\n // insert New header footer widget in to section index \n this.insertRemoveHeaderFooter(newBodyWidget.sectionIndex, true);\n if (this.documentHelper.viewer instanceof PageLayoutViewer) {\n //update header and footer for splitted widget\n this.documentHelper.layout.layoutHeaderFooter(newBodyWidget, this.owner.viewer, newBodyWidget.page);\n }\n //Update Child item index from 0 for new Section\n this.updateBlockIndex(0, newBodyWidget.firstChild);\n // Start sinfting from first block\n this.owner.viewer.updateClientArea(newBodyWidget.sectionFormat, newBodyWidget.page);\n return newBodyWidget;\n };\n Editor.prototype.insertRemoveHeaderFooter = function (sectionIndex, insert) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n // Need to handle further\n this.documentHelper.headersFooters.splice(sectionIndex, 0, {});\n }\n else {\n this.documentHelper.headersFooters[sectionIndex] = {};\n }\n };\n Editor.prototype.updateBlockIndex = function (blockIndex, block) {\n var blocks;\n var sectionIndex = block.bodyWidget.sectionIndex;\n do {\n blocks = block.getSplitWidgets();\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].index = blockIndex;\n }\n blockIndex++;\n block = blocks.pop().nextRenderedWidget;\n } while (!isNullOrUndefined(block) && block.bodyWidget.sectionIndex === sectionIndex);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionIndex = function (sectionFormat, startBodyWidget, increaseIndex) {\n var currentSectionIndex = startBodyWidget.sectionIndex;\n var blockIndex = 0;\n var bodyWidget = startBodyWidget;\n do {\n if (bodyWidget.index === currentSectionIndex && sectionFormat) {\n bodyWidget.sectionFormat = sectionFormat;\n }\n if (increaseIndex) {\n bodyWidget.index++;\n }\n else {\n bodyWidget.index--;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list) || selection.start.paragraph.containerWidget instanceof FootNoteWidget) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var previousList = undefined;\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n else {\n previousList = this.checkNextLevelAutoList(text);\n if (!isNullOrUndefined(previousList)) {\n convertList = true;\n }\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = String.fromCharCode(61623);\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n if (!isNullOrUndefined(previousList)) {\n selection.paragraphFormat.setList(previousList);\n }\n else {\n this.autoConvertList(selection, listLevel);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.checkNextLevelAutoList = function (text) {\n var selection = this.documentHelper.selection;\n var previousList = undefined;\n var convertList = false;\n var currentParagraph = selection.start.paragraph;\n var prevParagraph = selection.getPreviousParagraphBlock(currentParagraph);\n var isList = false;\n while (!isNullOrUndefined(prevParagraph) && prevParagraph instanceof ParagraphWidget) {\n if (prevParagraph.paragraphFormat.listFormat && prevParagraph.paragraphFormat.listFormat.listId !== -1) {\n isList = true;\n break;\n }\n prevParagraph = selection.getPreviousParagraphBlock(prevParagraph);\n }\n if (isList) {\n var listNumber = this.documentHelper.layout.getListNumber(prevParagraph.paragraphFormat.listFormat, true);\n var prevListText = listNumber.substring(0, listNumber.length - 1);\n var currentListText = text.substring(0, text.length - 1);\n //check if numberFormat equal\n var inputString = void 0;\n if (listNumber.substring(listNumber.length - 1) !== text.substring(text.length - 1)) {\n convertList = false;\n }\n else if (currentListText.match(/^[0-9]+$/) && prevListText.match(/^[0-9]+$/)) {\n inputString = parseInt(currentListText, 10);\n if (parseInt(prevListText, 10) === inputString || parseInt(prevListText, 10) + 1 === inputString\n || parseInt(prevListText, 10) + 2 === inputString) {\n convertList = true;\n }\n }\n else if (currentListText.match(/^[a-zA-Z]+$/) && prevListText.match(/^[a-zA-Z]+$/)) {\n if (prevListText.charCodeAt(0) === text.charCodeAt(0) || prevListText.charCodeAt(0) + 1 === text.charCodeAt(0)\n || prevListText.charCodeAt(0) + 2 === text.charCodeAt(0)) {\n convertList = true;\n }\n else if (currentListText.match(/^[MDCLXVImdclxvi]+$/) && prevListText.match(/^[MDCLXVImdclxvi]+$/)) {\n var prevListNumber = this.getNumber(prevListText.toUpperCase());\n var currentListNumber = this.getNumber(currentListText.toUpperCase());\n if (prevListNumber === currentListNumber || prevListNumber + 1 === currentListNumber\n || prevListNumber + 2 === currentListNumber) {\n convertList = true;\n }\n }\n }\n if (convertList) {\n previousList = this.documentHelper.getListById(prevParagraph.paragraphFormat.listFormat.listId);\n }\n }\n return previousList;\n };\n Editor.prototype.getNumber = function (roman) {\n var conversion = { 'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1 };\n var arr = roman.split('');\n var num = 0;\n for (var i = 0; i < arr.length; i++) {\n var currentValue = conversion[arr[i]];\n var nextValue = conversion[arr[i + 1]];\n if (currentValue < nextValue) {\n num -= (currentValue);\n }\n else {\n num += (currentValue);\n }\n }\n return num;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.documentHelper.lists.length > 0) {\n newList.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.documentHelper;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n newList.abstractList = newAbstractList;\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index, skipReLayout) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n if (isNullOrUndefined(skipReLayout) || !skipReLayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex, element.line.paragraph.bidi);\n }\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox) {\n this.insertBookMarkText(element, text);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.documentHelper.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, text) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n if (element instanceof EditRangeEndElementBox || element instanceof BookmarkElementBox) {\n element.line.children.splice(spanIndex, 0, spanObj);\n }\n else {\n element.line.children.splice(spanIndex + 1, 0, spanObj);\n }\n spanObj.line = element.line;\n this.documentHelper.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.documentHelper.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n if (selection.isInlineFormFillMode() && index == 0) {\n // special case to insert text before fieldEnd while filling a text form field.\n // when spell check enabled the white space and charaters are inserted as saperate text element box and getInline returns fieldEnd with index 0\n fieldEnd.line.children.splice(spanIndex, 0, span);\n }\n else {\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n }\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n if (this.owner.enableTrackChanges) {\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n var revisionType = 'Insertion';\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(fieldEnd, index, span, isBidi, revisionType);\n if (!isRevisionCombined && span.revisions.length === 0) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(fieldEnd.nextNode, span, isBidi, revisionType);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.documentHelper.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n if (this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat && this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousElement instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.documentHelper.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.documentHelper.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.selection.getParagraphInfo(selection.end);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.editorHistory.updateComplexHistory();\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.isForHyperlinkFormat = true;\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n this.isForHyperlinkFormat = false;\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n //this.documentHelper.layout.allowLayout = false;\n this.appylingHyperlinkFormat(selection);\n //this.documentHelper.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkRangeFromRevision = function (inline, removeCollection) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n if (rangeIndex >= 0) {\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0 && removeCollection) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkWholeRangeInRevision = function (item, revision) {\n var currentRevision = revision;\n item.revisions.splice(item.revisions.indexOf(item), 1);\n var rangeLength = currentRevision.range.length;\n for (var rangeIndex = 0; rangeIndex < rangeLength; rangeIndex++) {\n currentRevision.range.splice(0, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n if (inline.fieldEnd) {\n inline.fieldEnd.fieldBegin = undefined;\n }\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.documentHelper.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.documentHelper.fields.splice(fieldIndex, 1);\n }\n var formFieldIndex = this.documentHelper.formFields.indexOf(inline.fieldBegin);\n if (formFieldIndex !== -1) {\n this.documentHelper.formFields.splice(formFieldIndex, 1);\n }\n inline.fieldBegin.fieldEnd = undefined;\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Insert Hyperlink\n *\n * @param {string} address - Hyperlink URL\n * @param {string} displayText - Display text for the hyperlink\n * @param {string} screenTip - The screen tip text.\n * @returns {void}\n */\n Editor.prototype.insertHyperlink = function (address, displayText, screenTip) {\n address = address.replace(/\\s/g, \"\");\n if (isNullOrUndefined(displayText)) {\n displayText = address;\n }\n if (!isNullOrUndefined(screenTip)) {\n address = address + '\\\" \\\\o \\\"' + screenTip;\n }\n this.insertHyperlinkInternal(address, displayText, this.owner.selection.text !== displayText, false);\n };\n /**\n * @private\n */\n Editor.prototype.insertHyperlinkInternal = function (url, displayText, remove, isBookmark) {\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternalInternal(selection, url, displayText, isBookmark);\n }\n else {\n this.documentHelper.layout.allowLayout = false;\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var fieldStartPosition = new TextPosition(this.documentHelper.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.documentHelper.layout.allowLayout = true;\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.selection.getParagraphInfo(endPosition);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternalInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n var commentStarts = this.checkAndRemoveComments();\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n var isTrackEnabled = this.owner.enableTrackChanges;\n this.owner.enableTrackChanges = false;\n isRemoved = this.removeSelectedContents(selection);\n this.owner.enableTrackChanges = isTrackEnabled;\n }\n if (isRemoved) {\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n //let initial: number = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n this.insertElement(element);\n //let paragraph: ParagraphWidget = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n //let offset: number = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n Editor.prototype.initInsertInline = function (element, insertHyperlink) {\n this.initHistory('InsertInline');\n this.insertInlineInSelection(this.documentHelper.selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.insertElementInCurrentLine = function (selection, inline) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection - Specified the selection\n * @param {string} url - Specifies the url\n * @param {string} displayText - Specified the display test\n * @param {boolean} isBookmark - Specifies is bookmark\n * @private\n * @returns {boolean} - Return tru of hyperlink is edited.\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n this.skipFieldDeleteTracking = false;\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.skipFieldDeleteTracking = false;\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n offset = newFieldBegin.fieldEnd.line.getOffset(newFieldBegin.fieldEnd, 1);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraphInternal(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n *\n * @returns {void}\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var blockInfo = this.selection.getParagraphInfo(fieldStartPosition);\n var fieldStartString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n blockInfo = this.selection.getParagraphInfo(fieldSeparatorPosition);\n var fieldSeparatorString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n blockInfo = this.selection.getParagraphInfo(selection.start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n selection.end.setPositionInternal(selection.start);\n this.delete();\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldSeparatorString));\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n selection.end.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(startIndex));\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldStartString));\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event - Specifies the paste event\n * @param {any} pasteWindow - Specifies the paste window\n * @private\n */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n this.currentPasteOptions = this.owner.defaultPasteOption;\n this.isHtmlPaste = false;\n if (this.documentHelper.owner.enableLocalPaste) {\n this.paste();\n }\n else {\n this.selection.isViewPasteOptions = true;\n if (this.selection.pasteElement) {\n this.selection.pasteElement.style.display = 'none';\n }\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n var textContent = '';\n var htmlContent = '';\n var rtfContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n if (Browser.info.name !== 'msie') {\n rtfContent = clipbordData.getData('Text/Rtf');\n htmlContent = clipbordData.getData('Text/Html');\n }\n this.copiedTextContent = textContent = clipbordData.getData('Text');\n this.previousCharFormat = new WCharacterFormat();\n this.previousCharFormat.copyFormat(this.selection.start.paragraph.characterFormat);\n this.previousParaFormat = new WParagraphFormat();\n this.previousParaFormat.copyFormat(this.selection.start.paragraph.paragraphFormat);\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n htmlContent = '';\n rtfContent = '';\n }\n if (rtfContent !== '') {\n this.pasteAjax(rtfContent, '.rtf');\n }\n else if (htmlContent !== '') {\n this.isHtmlPaste = true;\n var doc = new DOMParser().parseFromString(htmlContent, 'text/html');\n var result = new XMLSerializer().serializeToString(doc);\n result = result.replace(//gi, '');\n result = result.replace(//gi, '');\n // Removed namesapce which is added when using XMLSerializer.\n // When copy content from MS Word, the clipboard html content already have same namespace which cause duplicate namespace\n // Here, removed the duplicate namespace.\n result = result.replace('xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n this.pasteAjax(result, '.html');\n }\n else if (textContent !== null && textContent !== '') {\n this.selection.currentPasteAction = 'TextOnly';\n this.pasteContents(textContent);\n this.applyPasteOptions(this.currentPasteOptions, true);\n this.copiedContent = undefined;\n this.documentHelper.editableDiv.innerHTML = '';\n }\n else if (Browser.info.name !== 'msie' && clipbordData.items !== undefined && clipbordData.items.length !== 0) {\n for (var m = 0; m < clipbordData.items.length; m++) {\n var item = clipbordData.items[m];\n if (item.type === 'image/png' || (item.type === \"image/svg+xml\" && item.kind !== 'string')) {\n this.pasteImage(item.getAsFile());\n }\n }\n }\n else if (Browser.info.name === 'msie' && clipbordData.files !== undefined && clipbordData.files.length !== 0 &&\n (clipbordData.files[0].type === 'image/png')) {\n this.pasteImage(clipbordData.files[0]);\n }\n // if (textContent !== '') {\n // this.pasteContents(textContent);\n // this.documentHelper.editableDiv.innerHTML = '';\n // }\n }\n };\n Editor.prototype.pasteImage = function (imgFile) {\n var _this = this;\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.onPasteImage(fileReader.result);\n };\n fileReader.readAsDataURL(imgFile);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPasteImage = function (data) {\n var image = document.createElement('img');\n var editor = this;\n image.addEventListener('load', function () {\n editor.insertImage(data, this.width, this.height);\n });\n image.src = data;\n };\n Editor.prototype.pasteAjax = function (content, type) {\n var proxy = this;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n content: content,\n type: type\n };\n var editor = this;\n this.pasteRequestHandler = new XmlHttpRequestHandler();\n this.owner.documentHelper.viewerContainer.focus();\n showSpinner(this.owner.element);\n this.pasteRequestHandler.url = proxy.owner.serviceUrl + this.owner.serverActionSettings.systemClipboard;\n this.pasteRequestHandler.responseType = 'json';\n this.pasteRequestHandler.contentType = 'application/json;charset=UTF-8';\n this.pasteRequestHandler.customHeaders = proxy.owner.headers;\n this.pasteRequestHandler.onSuccess = this.pasteFormattedContent.bind(this);\n this.pasteRequestHandler.onFailure = this.onPasteFailure.bind(this);\n this.pasteRequestHandler.onError = this.onPasteFailure.bind(this);\n var httprequestEventArgs = { serverActionType: 'SystemClipboard', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n hideSpinner(this.owner.element);\n }\n else {\n this.pasteRequestHandler.send(formObject, httprequestEventArgs);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteFormattedContent = function (result) {\n var _this = this;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.pasteContents(isNullOrUndefined(result.data) ? this.copiedTextContent : result.data);\n if (this.currentPasteOptions !== 'KeepSourceFormatting') {\n this.applyPasteOptions(this.currentPasteOptions);\n }\n hideSpinner(this.owner.element);\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 0);\n };\n Editor.prototype.onPasteFailure = function (result) {\n this.owner.fireServiceFailure(result);\n console.error(result.status, result.statusText);\n hideSpinner(this.owner.element);\n this.documentHelper.updateFocus();\n };\n /**\n * Pastes provided sfdt content or the data present in local clipboard if any.\n *\n * @param {string} sfdt? insert the specified sfdt content at current position\n * @returns {void}\n */\n Editor.prototype.paste = function (sfdt, defaultPasteOption) {\n var _this = this;\n if (isNullOrUndefined(sfdt)) {\n sfdt = this.owner.enableLocalPaste ? this.copiedData : undefined;\n }\n if (!isNullOrUndefined(defaultPasteOption)) {\n this.currentPasteOptions = defaultPasteOption;\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (sfdt) {\n var document_1 = JSON.parse(sfdt);\n this.pasteContents(document_1);\n this.applyPasteOptions(this.currentPasteOptions);\n if (this.chartType) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n this.chartType = false;\n }\n }\n };\n Editor.prototype.getUniqueListOrAbstractListId = function (isList) {\n if (isList && this.documentHelper.lists.length) {\n var sortedList = this.documentHelper.lists.slice().sort(function (a, b) {\n return a.listId - b.listId;\n });\n return sortedList[sortedList.length - 1].listId + 1;\n }\n else if (this.documentHelper.abstractLists.length) {\n var sortedAbsList = this.documentHelper.abstractLists.slice().sort(function (a, b) {\n return a.abstractListId - b.abstractListId;\n });\n return sortedAbsList[sortedAbsList.length - 1].abstractListId + 1;\n }\n return 0;\n };\n Editor.prototype.checkSameLevelFormat = function (lstLevelNo, abstractList, list) {\n return abstractList.levels[lstLevelNo].listLevelPattern === list.abstractList.levels[lstLevelNo].listLevelPattern\n && abstractList.levels[lstLevelNo].numberFormat === list.abstractList.levels[lstLevelNo].numberFormat\n && (abstractList.levels[lstLevelNo].listLevelPattern === 'Bullet'\n || abstractList.levels[lstLevelNo].startAt === list.abstractList.levels[lstLevelNo].startAt);\n };\n Editor.prototype.listLevelPatternInCollection = function (lstLevelNo, listLevel) {\n var _this = this;\n return this.documentHelper.lists.filter(function (list) {\n return list.abstractList.levels[lstLevelNo].listLevelPattern === listLevel.listLevelPattern\n && list.abstractList.levels[lstLevelNo].numberFormat === listLevel.numberFormat\n && (listLevel.listLevelPattern === 'Bullet' || list.abstractList.levels[lstLevelNo].startAt === listLevel.startAt)\n && _this.isEqualParagraphFormat(list.abstractList.levels[lstLevelNo].paragraphFormat, listLevel.paragraphFormat);\n })[0];\n };\n Editor.prototype.isEqualParagraphFormat = function (source, dest) {\n if ((isNullOrUndefined(dest.leftIndent) && source.leftIndent !== 0)\n || (!isNullOrUndefined(dest.leftIndent) && Math.round(source.leftIndent) !== Math.round(dest.leftIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.rightIndent) && source.rightIndent !== 0)\n || (!isNullOrUndefined(dest.rightIndent) && Math.round(source.rightIndent) !== Math.round(dest.rightIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.firstLineIndent) && source.firstLineIndent !== 0)\n || (!isNullOrUndefined(dest.firstLineIndent) && Math.round(source.firstLineIndent) !== Math.round(dest.firstLineIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.beforeSpacing) && source.beforeSpacing !== 0)\n || (!isNullOrUndefined(dest.beforeSpacing) && Math.round(source.beforeSpacing) !== Math.round(dest.beforeSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.afterSpacing) && source.afterSpacing !== 0)\n || (!isNullOrUndefined(dest.afterSpacing) && Math.round(source.afterSpacing) !== Math.round(dest.afterSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.textAlignment) && source.textAlignment !== 'Left')\n || (!isNullOrUndefined(dest.textAlignment) && source.textAlignment !== dest.textAlignment)) {\n return false;\n }\n if ((isNullOrUndefined(dest.bidi) && source.bidi !== false)\n || (!isNullOrUndefined(dest.bidi) && source.bidi !== dest.bidi)) {\n return false;\n }\n if ((isNullOrUndefined(dest.contextualSpacing) && source.contextualSpacing !== false)\n || (!isNullOrUndefined(dest.contextualSpacing) && source.contextualSpacing !== dest.contextualSpacing)) {\n return false;\n }\n if ((isNullOrUndefined(dest.keepWithNext) && source.keepWithNext !== false)\n || (!isNullOrUndefined(dest.keepWithNext) && source.keepWithNext !== dest.keepWithNext)) {\n return false;\n }\n if ((isNullOrUndefined(dest.keepLinesTogether) && source.keepLinesTogether !== false)\n || (!isNullOrUndefined(dest.keepLinesTogether) && source.keepLinesTogether !== dest.keepLinesTogether)) {\n return false;\n }\n if ((isNullOrUndefined(dest.widowControl) && source.widowControl !== false)\n || (!isNullOrUndefined(dest.widowControl) && source.widowControl !== dest.widowControl)) {\n return false;\n }\n if ((isNullOrUndefined(dest.outlineLevel) && source.outlineLevel !== 'BodyText')\n || (!isNullOrUndefined(dest.outlineLevel) && source.outlineLevel !== dest.outlineLevel)) {\n return false;\n }\n if ((isNullOrUndefined(dest.lineSpacing) && source.lineSpacing !== 1)\n || (!isNullOrUndefined(dest.lineSpacing) && Math.round(source.lineSpacing) !== Math.round(dest.lineSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.lineSpacingType) && source.lineSpacingType !== 'Multiple')\n || (!isNullOrUndefined(dest.lineSpacingType) && source.lineSpacingType !== dest.lineSpacingType)) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBlocksToUpdate = function (blocks) {\n var blcks = [];\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj.paragraphFormat && obj.paragraphFormat.listFormat\n && Object.keys(obj.paragraphFormat.listFormat).length > 0) {\n blcks.push(obj);\n }\n else if (obj.rows) {\n for (var j = 0; j < obj.rows.length; j++) {\n var currentRow = obj.rows[j];\n for (var k = 0; k < currentRow.cells.length; k++) {\n var cell = currentRow.cells[k];\n blcks = blcks.concat(this.getBlocksToUpdate(cell.blocks));\n }\n }\n }\n }\n return blcks;\n };\n Editor.prototype.updateListIdForBlocks = function (blocks, abstractList, list, id, idToUpdate) {\n var update = false;\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj.paragraphFormat && obj.paragraphFormat.listFormat\n && Object.keys(obj.paragraphFormat.listFormat).length > 0) {\n var format = obj.paragraphFormat.listFormat;\n var existingList = this.listLevelPatternInCollection(format.listLevelNumber, abstractList.levels[format.listLevelNumber]);\n if (format.listId === id) {\n if (isNullOrUndefined(existingList) && (!list || (list\n && !this.checkSameLevelFormat(format.listLevelNumber, abstractList, list)))) {\n update = true;\n format.listId = idToUpdate;\n }\n else if (!isNullOrUndefined(existingList)\n && this.checkSameLevelFormat(format.listLevelNumber, abstractList, existingList)) {\n if (!format.isUpdated) {\n format.listId = existingList.listId;\n format.isUpdated = true;\n }\n update = false;\n }\n }\n }\n else if (obj.rows) {\n for (var j = 0; j < obj.rows.length; j++) {\n var row = obj.rows[j];\n for (var k = 0; k < row.cells.length; k++) {\n var cell = row.cells[k];\n var toUpdate = this.updateListIdForBlocks(cell.blocks, abstractList, list, id, idToUpdate);\n if (!update) {\n update = toUpdate;\n }\n }\n }\n }\n }\n return update;\n };\n Editor.prototype.updatePasteContent = function (pasteContent, sectionId) {\n var uniqueListId = this.getUniqueListOrAbstractListId(true);\n if (pasteContent.lists.filter(function (obj) { return obj.listId === uniqueListId; }).length > 0) {\n var sortedPasteList = pasteContent.lists.slice().sort(function (a, b) {\n return a.listId - b.listId;\n });\n uniqueListId = sortedPasteList[sortedPasteList.length - 1].listId + 1;\n }\n var uniqueAbsLstId = this.getUniqueListOrAbstractListId(false);\n if (pasteContent.abstractLists.filter(function (obj) {\n return obj.abstractListId === uniqueAbsLstId;\n }).length > 0) {\n var sortedPasteAbsList = pasteContent.abstractLists.slice().sort(function (a, b) {\n return a.abstractListId - b.abstractListId;\n });\n uniqueAbsLstId = sortedPasteAbsList[sortedPasteAbsList.length - 1].abstractListId + 1;\n }\n var _loop_1 = function (k) {\n var list = pasteContent.lists[k];\n var abstractList = pasteContent.abstractLists.filter(function (obj) {\n return obj.abstractListId === list.abstractListId;\n })[0];\n var lstDup = this_1.documentHelper.lists.filter(function (obj) {\n return obj.listId === list.listId;\n });\n if (!isNullOrUndefined(abstractList)) {\n var isUpdate = this_1.updateListIdForBlocks(pasteContent.sections[sectionId].blocks, abstractList, lstDup[0], list.listId, uniqueListId);\n if (isUpdate) {\n abstractList.abstractListId = uniqueAbsLstId;\n list.listId = uniqueListId;\n list.abstractListId = uniqueAbsLstId;\n uniqueListId++;\n uniqueAbsLstId++;\n }\n else {\n pasteContent.lists.splice(k, 1);\n pasteContent.abstractLists.splice(pasteContent.abstractLists.indexOf(abstractList), 1);\n k--;\n }\n }\n out_k_1 = k;\n };\n var this_1 = this, out_k_1;\n for (var k = 0; k < pasteContent.lists.length; k++) {\n _loop_1(k);\n k = out_k_1;\n }\n var blocks = this.getBlocksToUpdate(pasteContent.sections[sectionId].blocks);\n for (var i = 0; i < blocks.length; i++) {\n var blck = blocks[i];\n delete blck.paragraphFormat.listFormat.isUpdated;\n }\n };\n /**\n * @private\n */\n Editor.prototype.getBlocks = function (pasteContent, isPaste, sections, comments, revision) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r\\n/g, '\\r');\n if (this.isInsertText) {\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n txt = txt.replace(/\\r/g, '\\n');\n }\n else {\n txt = txt.replace(/\\n/g, '\\r');\n }\n }\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n arr = txt.split('\\n');\n }\n else {\n arr = txt.split('\\r');\n }\n var widget = [];\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widget;\n for (var i = 0; i < arr.length; i++) {\n if (i === arr.length - 1 && arr[i].length === 0) {\n continue;\n }\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n if (element !== currentInline.element) {\n element = this.selection.getNextValidElement(currentInline.element);\n }\n var insertFormat = void 0;\n if (startParagraph.isEmpty()) {\n insertFormat = startParagraph.characterFormat;\n }\n else if (!isNullOrUndefined(element)) {\n insertFormat = element.characterFormat;\n }\n else {\n this.copyInsertFormat(startParagraph.characterFormat, false);\n }\n var insertParaFormat = this.documentHelper.selection.copySelectionParagraphFormat();\n if (!isNullOrUndefined(this.previousParaFormat)) {\n insertParaFormat = this.previousParaFormat;\n }\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n //Too many character in single line it took time past the content will cause layout performance, so spliting by space.\n var words = arr[i].split(/(\\s+)/);\n for (var j = 0; j < words.length; j++) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = words[j];\n line.children.push(textElement);\n textElement.line = line;\n }\n }\n paragraph.childWidgets.push(line);\n paragraph.containerWidget = bodyWidget;\n widget.push(paragraph);\n }\n widgets.push(bodyWidget);\n }\n else {\n this.viewer.owner.parser.addCustomStyles(pasteContent);\n if (pasteContent.comments && pasteContent.comments.length > 0) {\n this.documentHelper.owner.parser.commentsCollection = new Dictionary();\n this.documentHelper.owner.parser.commentStarts = new Dictionary();\n this.documentHelper.owner.parser.commentEnds = new Dictionary();\n this.documentHelper.owner.parser.parseComments(pasteContent, comments ? comments : this.documentHelper.comments);\n }\n var bodyWidget = void 0;\n this.selection.currentPasteAction = 'DefaultPaste';\n for (var i = 0; i < pasteContent.sections.length; i++) {\n var parser = this.documentHelper.owner.parser;\n parser.isPaste = isPaste;\n parser.isHtmlPaste = this.isHtmlPaste;\n if (!this.isPasteListUpdated && !isNullOrUndefined(pasteContent.lists)) {\n if (this.documentHelper.lists.length > 0) {\n this.updatePasteContent(pasteContent, i);\n }\n this.isPasteListUpdated = true;\n if (!isNullOrUndefined(pasteContent.abstractLists)) {\n parser.parseAbstractList(pasteContent, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(pasteContent.lists)) {\n parser.parseList(pasteContent, this.documentHelper.lists);\n }\n }\n if (!isNullOrUndefined(pasteContent.revisions)) {\n if (isPaste) {\n var revisionChanges = this.viewer.owner.revisionsInternal.changes;\n if (!isNullOrUndefined(parser.revisionCollection)) {\n parser.revisionCollection = undefined;\n }\n parser.revisionCollection = new Dictionary();\n var revisionCollection = parser.revisionCollection;\n if (!(this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && parser.isCutPerformed)) {\n if (pasteContent.revisions.length >= 1) {\n for (var i_1 = 0; i_1 < pasteContent.revisions.length; i_1++) {\n var revisionCheck = true;\n if (revisionCollection.containsKey(pasteContent.revisions[i_1].revisionId)) {\n if (revisionChanges.length > 0) {\n for (var j_1 = 0; j_1 < revisionChanges.length; j_1++) {\n if (revisionChanges[j_1].revisionID === pasteContent.revisions[i_1].revisionId) {\n revisionCheck = false;\n }\n }\n }\n if (revisionCheck) {\n var revision_1 = revisionCollection.get(pasteContent.revisions[i_1].revisionId);\n revisionChanges.push(revision_1);\n }\n }\n else {\n parser.parseRevisions(pasteContent, revisionChanges);\n }\n }\n }\n }\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n else {\n parser.revisionCollection = this.documentHelper.revisionsInternal;\n parser.parseRevisions(pasteContent, revision);\n }\n }\n bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n if (!isPaste) {\n sections.unshift(bodyWidget);\n }\n else {\n widgets.push(bodyWidget);\n }\n parser.parseBody(pasteContent.sections[i].blocks, bodyWidget.childWidgets);\n if (pasteContent.lastParagraphMarkCopied && this.selection.start.paragraph.isEmpty() && this.documentHelper.pages.length == 1 && this.documentHelper.pages[0].bodyWidgets[0].childWidgets.length == 1) {\n parser.parseSectionFormat(pasteContent.sections[i].sectionFormat, bodyWidget.sectionFormat);\n }\n parser.isPaste = false;\n parser.isHtmlPaste = false;\n }\n if (pasteContent.lastParagraphMarkCopied) {\n var paragraphWidget = new ParagraphWidget();\n bodyWidget.childWidgets.push(paragraphWidget);\n }\n }\n if (this.currentPasteOptions === 'MergeWithExistingFormatting') {\n this.applyMergeFormat(widgets);\n }\n return widgets;\n };\n Editor.prototype.applyMergeFormat = function (bodyWidgets) {\n var startParagraph = this.selection.start.paragraph;\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n var insertFormat = element ? element.characterFormat :\n this.copyInsertFormat(startParagraph.characterFormat, false);\n var insertParaFormat = this.documentHelper.selection.copySelectionParagraphFormat();\n for (var k = 0; k < bodyWidgets.length; k++) {\n var widgets = bodyWidgets[k].childWidgets;\n for (var i = 0; i < widgets.length; i++) {\n var widget = widgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.paragraphFormat.copyFormat(insertParaFormat);\n this.applyFormatInternal(widget, insertFormat);\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var row = widget.childWidgets[j];\n for (var k_1 = 0; k_1 < row.childWidgets.length; k_1++) {\n var cell = row.childWidgets[k_1];\n for (var l = 0; l < cell.childWidgets.length; l++) {\n this.applyFormatInternal(cell.childWidgets[l], insertFormat);\n }\n }\n }\n }\n }\n }\n };\n Editor.prototype.applyFormatInternal = function (widget, insertFormat) {\n if (widget instanceof ParagraphWidget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n for (var k = 0; k < lineWidget.children.length; k++) {\n var inlineCharacterFormat = lineWidget.children[k].characterFormat;\n var characterFormat = inlineCharacterFormat.cloneFormat();\n if (characterFormat.bold) {\n lineWidget.children[k].characterFormat.bold = characterFormat.bold;\n }\n if (characterFormat.italic) {\n lineWidget.children[k].characterFormat.italic = characterFormat.italic;\n }\n if (characterFormat.underline !== 'None') {\n lineWidget.children[k].characterFormat.underline = characterFormat.underline;\n }\n }\n }\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var rowWidget = widget.childWidgets[j];\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n for (var l = 0; l < cellWidget.childWidgets.length; l++) {\n this.applyFormatInternal(cellWidget.childWidgets[l], insertFormat);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyPasteOptions = function (options, isPasteOptionTextOnly) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '' || isPasteOptionTextOnly) {\n return;\n }\n //this.isSkipHistory = true;\n this.currentPasteOptions = options;\n var start = this.selection.isForward ? this.selection.start : this.selection.end;\n var currentFormat = start.paragraph.paragraphFormat;\n var copiedContent = this.copiedContent;\n var copiedTextContent = this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n }\n this.copiedContent = copiedContent;\n this.copiedTextContent = copiedTextContent;\n this.selection.isViewPasteOptions = true;\n // }\n switch (options) {\n case 'KeepSourceFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent);\n break;\n case 'MergeWithExistingFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent, currentFormat);\n break;\n case 'KeepTextOnly':\n this.pasteContents(this.copiedTextContent);\n break;\n }\n //this.isSkipHistory = false;\n };\n /**\n * @private\n */\n Editor.prototype.applyTablePasteOptions = function (options) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '') {\n return;\n }\n this.isPaste = true;\n var copiedContent = this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n }\n var widgets = this.getBlocks(copiedContent, true);\n var currentFormat = this.selection.start.paragraph.paragraphFormat;\n switch (options) {\n case 'NestTable':\n this.pasteAsNestedTable(widgets, currentFormat);\n break;\n case 'InsertAsRows':\n this.pasteAsNewRow(widgets[0].childWidgets[0]);\n break;\n case 'InsertAsColumns':\n this.pasteAsNewColumn(widgets[0].childWidgets[0]);\n break;\n case 'OverwriteCells':\n this.pasteOverwriteCell(widgets[0].childWidgets[0]);\n break;\n }\n this.isPaste = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteContents = function (content, currentFormat) {\n if (typeof (content) !== 'string') {\n this.copiedContent = content;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n var inline = this.selection.getCurrentFormField();\n var resultText = this.getFieldResultText();\n var maxLength = inline.formFieldData.maxLength;\n var selectedTextLength = this.documentHelper.selection.text.length;\n if (maxLength > 0) {\n if (selectedTextLength === 0) {\n var contentlength = maxLength - resultText.length;\n content = content.substring(0, contentlength);\n }\n else if (selectedTextLength > 0) {\n content = content.substring(0, selectedTextLength);\n }\n }\n }\n this.pasteContentsInternal(this.getBlocks(content, true), true, currentFormat);\n if (content.comments && content.comments.length > 0) {\n this.documentHelper.layout.layoutComments(this.documentHelper.comments);\n }\n this.isInsertField = false;\n };\n Editor.prototype.pasteContentsInternal = function (widgets, isPaste, currentFormat) {\n this.isPaste = isPaste;\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable) {\n var isTablePaste = false;\n if (widgets.length === 1) {\n var childWidgets = widgets[0].childWidgets;\n if ((childWidgets.length < 3)) {\n if (childWidgets.length === 1 && childWidgets[0] instanceof TableWidget || childWidgets.length === 2 && childWidgets[0] instanceof TableWidget && childWidgets[1].isEmpty()) {\n isTablePaste = true;\n }\n }\n }\n if (isTablePaste) {\n var startCell = selection.start.paragraph.associatedCell;\n var endCell = selection.end.paragraph.associatedCell;\n var newTable = widgets[0].childWidgets[0];\n // tslint:disable-next-line:max-line-length\n if (startCell.ownerTable.equals(endCell.ownerTable)) {\n if (selection.start.paragraph.associatedCell.rowIndex === 0 && selection.end.paragraph.associatedCell.rowIndex === 0\n && startCell.equals(endCell) && !this.selection.isCellSelected(startCell, selection.start, selection.end)) {\n this.selection.currentPasteAction = 'InsertAsColumns';\n this.pasteAsNewColumn(newTable);\n }\n else {\n this.selection.currentPasteAction = 'OverwriteCells';\n this.pasteOverwriteCell(newTable);\n }\n this.isPaste = false;\n return;\n }\n }\n }\n var commentStartToInsert;\n //if (!this.isSkipHistory) {\n commentStartToInsert = this.checkAndRemoveComments();\n //}\n this.defaultPaste(widgets, currentFormat);\n //if (!this.isSkipHistory) {\n this.updateHistoryForComments(commentStartToInsert);\n //}\n };\n Editor.prototype.defaultPaste = function (widgets, currentFormat) {\n var selection = this.documentHelper.selection;\n var isRemoved = true;\n //if (!this.isSkipHistory) {\n this.initComplexHistory('Paste');\n //}\n if (this.documentHelper.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n //if (!this.isSkipHistory) {\n this.initHistory('Paste');\n //}\n if (!selection.isEmpty || this.documentHelper.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n this.pasteContent(widgets, currentFormat);\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n this.isPaste = false;\n };\n Editor.prototype.pasteAsNewColumn = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cloneTable = data.clone();\n var rowWidget = cloneTable.childWidgets[0];\n var numberOfRows = cloneTable.childWidgets.length;\n var numberOfColumns = rowWidget.childWidgets.length;\n var cellIndex = startCell.columnIndex;\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = numberOfColumns;\n var rowSpannedCells = [];\n if (numberOfRows > table.childWidgets.length) {\n this.addRows(numberOfRows - table.childWidgets.length, table);\n this.tableUpdate(table);\n }\n else if (table.childWidgets.length > numberOfRows) {\n this.addRows(table.childWidgets.length - numberOfRows, cloneTable, table);\n this.tableUpdate(table);\n }\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n var rowWidget_1 = cloneTable.childWidgets[j];\n var cellWidget = rowWidget_1.childWidgets[i];\n var cell = row.childWidgets[startCell.columnIndex];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.index;\n newCell.containerWidget = row;\n var prevCell = row.previousWidget;\n var spannedCell = this.rowspannedCollection(row, rowSpannedCells);\n if (cell != null) {\n newCell.cellFormat.copyFormat(cell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n else if (spannedCell.length > 0) {\n for (var z = 0; z < spannedCell.length; z++) {\n if (prevCell.rowIndex + (spannedCell[z].cellFormat.rowSpan - 1) >= row.rowIndex) {\n newCell.cellFormat.copyFormat(spannedCell[z].cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n }\n }\n cellWidget.containerWidget = newCell.containerWidget;\n newCell.childWidgets = cellWidget.childWidgets;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(i, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n }\n }\n this.tableReLayout(table, startParagraph, newCell);\n }\n };\n Editor.prototype.pasteAsNestedTable = function (widgets, currentFormat) {\n var data = widgets[0].childWidgets[0];\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteNested');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var startParagraph = undefined;\n var dataTable = data.clone();\n var endCell = this.selection.end.paragraph.containerWidget;\n var pasteCell = void 0;\n if (startCell != endCell) {\n var row = startCell.ownerRow;\n while (row != endCell.ownerRow.nextRow) {\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n pasteCell = row.childWidgets[cellIndex];\n var clonedTable = dataTable.clone();\n var newPara = new ParagraphWidget();\n pasteCell.childWidgets = [];\n pasteCell.childWidgets[0] = clonedTable;\n pasteCell.childWidgets[1] = newPara;\n newPara.containerWidget = pasteCell;\n clonedTable.containerWidget = pasteCell;\n clonedTable.index = 0;\n newPara.index = 1;\n row.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell);\n }\n else {\n this.defaultPaste(widgets, currentFormat);\n }\n }\n };\n Editor.prototype.pasteOverwriteCell = function (data) {\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteOverwrite');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var cloneTable = data.clone();\n // let rowWidget: TableRowWidget = cloneTable.childWidgets[0] as TableRowWidget;\n var numberOfRows = cloneTable.childWidgets.length;\n var endCell = this.getOwnerCell(!this.selection.isForward);\n // let columnCount: number = numberOfColumns;\n // let newCell: TableCellWidget = undefined;\n var coloumnIndexPaste = startCell.columnIndex;\n var rowIndexPaste = startCell.rowIndex;\n var startParagraph = undefined;\n var row = this.selection.start.paragraph.associatedCell.ownerRow;\n var rowWidget = cloneTable.childWidgets[0];\n var newCells = void 0; // = rowWidget.childWidgets[0] as TableCellWidget;\n var numberOfColumns = rowWidget.childWidgets.length;\n var row2 = startCell.ownerRow;\n if (startCell != endCell) {\n var k = 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var columnSpan = void 0;\n var cloneCells = void 0;\n while (row2 != endCell.ownerRow.nextRow) {\n rowWidget = cloneTable.childWidgets[k] || cloneTable.childWidgets[k = 0];\n var rowWidgetLength = rowWidget.childWidgets.length;\n var cellIndexSE = 0;\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n rowWidget = cloneTable.childWidgets[k];\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n if (columnSpan > 1 && cellIndexSE >= (rowWidgetLength - (columnSpan - 1))) {\n columnSpan = 1;\n cellIndex = cellIndex + (columnSpan - 1);\n cellIndexSE = 0;\n }\n newCells = rowWidget.childWidgets[cellIndexSE] || rowWidget.childWidgets[cellIndexSE = 0];\n cloneCells = newCells.clone();\n var pasteCell = row2.childWidgets[cellIndex];\n for (var x = 0; x < cloneCells.childWidgets.length; x++) {\n var newPara = cloneCells.childWidgets[x];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[x] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan;\n rowSpanIndex = cellIndex;\n }\n if (newCells.cellFormat.columnSpan > 1) {\n columnSpan = newCells.cellFormat.columnSpan;\n }\n row2.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(cloneCells);\n }\n cellIndexSE++;\n }\n row2 = row2.nextRow;\n k++;\n }\n this.tableReLayout(table, startParagraph, cloneCells);\n }\n else {\n var rowsToAdd = void 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var pasteCell = void 0;\n if (numberOfRows > table.childWidgets.length - rowIndexPaste) {\n rowsToAdd = numberOfRows - table.childWidgets.length + rowIndexPaste;\n this.addRows(rowsToAdd, table);\n }\n for (var i = 0; i < numberOfRows; i++) {\n var cellIndex = startCell.columnIndex;\n rowWidget = cloneTable.childWidgets[i];\n var numberOfColumns_1 = rowWidget.childWidgets.length;\n for (var cellIterate = 0; cellIterate < numberOfColumns_1; cellIterate++) {\n newCells = rowWidget.childWidgets[cellIterate];\n var cloneCells = newCells.clone();\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n pasteCell = row.childWidgets[cellIndex];\n if (!pasteCell) {\n pasteCell = cloneCells;\n pasteCell.containerWidget = row;\n pasteCell.index = cellIndex;\n }\n for (var index = 0; index < cloneCells.childWidgets.length; index++) {\n var newPara = cloneCells.childWidgets[index];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[index] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan; //getting span\n rowSpanIndex = cellIndex;\n }\n row.childWidgets.splice(cellIndex++, 1, pasteCell);\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell);\n }\n }\n };\n Editor.prototype.pasteAsNewRow = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteRow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = endCell.ownerRow;\n if (this.editorHistory) {\n this.cloneTableToHistoryInfo(table);\n }\n var rowCount = this.getRowCountToInsert();\n var columncount = this.getColumnCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n index++;\n var pasteRowCount = data.childWidgets.length;\n for (var i = 0; i < pasteRowCount; i++) {\n var newRow = data.childWidgets[i].clone();\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, false);\n var cellWidget = undefined;\n var paragraphWidget = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cellWidget = table.childWidgets[index].firstChild;\n paragraphWidget = this.selection.getFirstParagraph(cellWidget);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraphWidget = this.selection.getFirstParagraphInFirstCell(widget);\n }\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.selectParagraphInternal(paragraphWidget, true);\n this.reLayout(this.selection, true);\n };\n Editor.prototype.tableUpdate = function (table) {\n table.isGridUpdated = false;\n table.calculateGrid();\n table.buildTableColumns();\n table.isGridUpdated = true;\n };\n Editor.prototype.rowspannedCollection = function (row, rowSpannedCells) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n }\n return rowSpannedCells;\n };\n Editor.prototype.insertSpannedCells = function (row, rowSpannedCells, newCell, cellIndex) {\n var isCellInserted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n };\n Editor.prototype.addRows = function (count, table, ownerTable) {\n var rowPlacement = 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = false;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var rows = table.childWidgets.length;\n var rowWidget = table.childWidgets[rows - 1];\n var column = rowWidget.childWidgets.length;\n var cloneTable = ownerTable ? ownerTable : table;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = rowWidget.childWidgets[column - 1];\n var row = endCell.ownerRow;\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n //this.reLayout(this.selection, true);\n };\n Editor.prototype.pasteContent = function (widgets, currentFormat) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var insertPosition = '';\n this.updateInsertPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n insertPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n var position = this.selection.start;\n if (!this.selection.isForward) {\n position = this.selection.end;\n }\n var blockInfo = this.selection.getParagraphInfo(position);\n insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.owner.isPastingContent = true;\n this.pasteCopiedData(widgets, currentFormat);\n var endPosition = '';\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n endPosition = this.editorHistory.currentBaseHistoryInfo.endPosition;\n }\n else {\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n var startPosition = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(startPosition, insertPosition);\n var end = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(end, endPosition);\n this.pasteTextPosition = { startPosition: startPosition, endPosition: end };\n this.documentHelper.owner.isPastingContent = false;\n this.documentHelper.selection.fireSelectionChanged(true);\n };\n Editor.prototype.pasteCopiedData = function (bodyWidget, currentFormat) {\n if (this.documentHelper.layout.isBidiReLayout) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n if (this.isPaste && this.isSectionEmpty(this.selection) && !this.selection.start.paragraph.isInHeaderFooter) {\n this.previousSectionFormat = new WSectionFormat();\n this.previousSectionFormat.copyFormat(this.selection.start.paragraph.bodyWidget.sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.copyFormat(bodyWidget[0].sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.footerDistance = this.previousSectionFormat.footerDistance;\n this.selection.start.paragraph.bodyWidget.sectionFormat.headerDistance = this.previousSectionFormat.headerDistance;\n if (this.owner.viewer instanceof PageLayoutViewer) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n this.owner.viewer.updatePageBoundingRectangle(this.selection.start.paragraph.bodyWidget, page, page.boundingRectangle.y);\n this.owner.viewer.updateClientArea(this.selection.start.paragraph.bodyWidget.sectionFormat, page);\n }\n }\n for (var k = 0; k < bodyWidget.length; k++) {\n var widgets = bodyWidget[k].childWidgets;\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(currentFormat)) {\n widget.paragraphFormat.copyFormat(currentFormat);\n var insertFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, false);\n widget.characterFormat.mergeFormat(insertFormat);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n var insertPosition = this.selection.start;\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n if (this.currentPasteOptions === 'KeepTextOnly') {\n var paraFormat = new WParagraphFormat(this.selection.start.paragraph);\n this.selection.start.paragraph.paragraphFormat = paraFormat;\n }\n this.insertElement(newParagraph.childWidgets[0].children, newParagraph.paragraphFormat);\n }\n }\n else if (widget instanceof BlockWidget) {\n var startParagraph = this.selection.start.paragraph;\n var isTable = widget instanceof TableWidget;\n if (isTable) {\n var table = widget;\n this.generateTableRevision(table);\n if (startParagraph.isInsideTable) {\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (startParagraph.isEmpty() && startParagraph.previousWidget instanceof TableWidget && !this.isPaste) {\n return this.insertTableRows(table, startParagraph.previousWidget);\n }\n }\n this.insertBlockInternal(widget);\n }\n }\n }\n };\n Editor.prototype.generateTableRevision = function (table) {\n if (this.owner.enableTrackChanges && !isNullOrUndefined(table)) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.insertRevision(row.rowFormat, 'Insertion');\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var para = cell.childWidgets[k];\n if (!isNullOrUndefined(para)) {\n this.insertRevisionForBlock(para, 'Insertion');\n }\n }\n }\n }\n }\n };\n Editor.prototype.isSectionEmpty = function (selection) {\n var startParagraph = selection.start.paragraph;\n if (startParagraph) {\n if (startParagraph.isInsideTable || startParagraph.isInHeaderFooter ||\n startParagraph !== selection.end.paragraph) {\n return false;\n }\n var bodyWidget = startParagraph.bodyWidget;\n if (bodyWidget) {\n var page = bodyWidget.page;\n if (page) {\n if ((isNullOrUndefined(page.previousPage) || page.previousPage.sectionIndex !== page.sectionIndex)\n && isNullOrUndefined(page.nextPage) && startParagraph.isEmpty() &&\n bodyWidget.childWidgets.length === 1) {\n return true;\n }\n }\n }\n }\n return false;\n };\n /**\n * Insert table on undo\n *\n * @param {TableWidget} table - Specifies the table\n * @param {TableWidget} newTable - Speciefies the new table\n * @param {boolean} moveRows - Specifies the new row\n * @private\n * @private {void}\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows) {\n //Gets the index of current table.\n var insertIndex = table.getIndex();\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n var owner = table.containerWidget;\n //remove old table revisions if it is present.\n this.constructRevisionsForTable(table, false);\n this.removeBlock(table, true);\n //Inserts table in the current table position. \n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n newTable.index = table.index;\n table.containerWidget = undefined;\n newTable.containerWidget = owner;\n this.documentHelper.layout.clearTableWidget(newTable, true, true, true);\n newTable.buildTableColumns();\n this.constructRevisionsForTable(newTable, true);\n newTable.isGridUpdated = true;\n this.updateNextBlocksIndex(newTable, true);\n this.documentHelper.layout.linkFieldInTable(newTable);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canConstructRevision = function (item) {\n if ((item.revisions.length > 0 && item.revisions[0].range.length === 0) || item.removedIds.length > 0) {\n return true;\n }\n return false;\n };\n Editor.prototype.constructRevisionsForTable = function (table, canConstructRevision) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n if (canConstructRevision) {\n if (this.canConstructRevision(rowWidget.rowFormat)) {\n this.constructRevisionFromID(rowWidget.rowFormat, true);\n }\n for (var rowIndex = 0; rowIndex < rowWidget.childWidgets.length; rowIndex++) {\n var cellWidget = rowWidget.childWidgets[rowIndex];\n for (var paraIndex = 0; paraIndex < cellWidget.childWidgets.length; paraIndex++) {\n if (cellWidget.childWidgets[paraIndex] instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(cellWidget.childWidgets[paraIndex], canConstructRevision);\n }\n }\n }\n }\n else {\n this.removeDeletedCellRevision(rowWidget);\n }\n }\n };\n Editor.prototype.constructRevisionsForBlock = function (paragraph, canConstructRevision) {\n for (var linIndex = 0; linIndex < paragraph.childWidgets.length; linIndex++) {\n var lineWidget = paragraph.childWidgets[linIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n if (canConstructRevision) {\n if (lineWidget.children[elementIndex] instanceof ElementBox && this.canConstructRevision(lineWidget.children[elementIndex])) {\n this.constructRevisionFromID(lineWidget.children[elementIndex], true);\n }\n }\n }\n }\n if (this.canConstructRevision(paragraph.characterFormat)) {\n this.constructRevisionFromID(paragraph.characterFormat, true);\n }\n };\n /**\n * @private\n * @param paraWidget\n * @param startoffset\n * @param endoffset\n * @param revisionId\n * @param isParaMarkIncluded\n * @returns {void}\n */\n Editor.prototype.applyRevisionForCurrentPara = function (paraWidget, startoffset, endoffset, revisionId, isParaMarkIncluded) {\n var elementInfo = paraWidget.getInline(startoffset + 1, 0);\n var currentElement = elementInfo.element;\n var skipElement = false;\n if (startoffset === paraWidget.getLength()) {\n skipElement = true;\n }\n var endElement = paraWidget.getInline(endoffset, 0).element;\n if (endoffset > paraWidget.getLength()) {\n isParaMarkIncluded = true;\n }\n if (!isNullOrUndefined(currentElement) && !isNullOrUndefined(endElement)) {\n if (!skipElement && currentElement === endElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else {\n while (!isNullOrUndefined(currentElement) && currentElement !== endElement) {\n if (!skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n if (!isNullOrUndefined(currentElement.nextNode)) {\n currentElement = currentElement.nextNode.nextValidNodeForTracking;\n }\n skipElement = false;\n }\n if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n }\n }\n else if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else if (!isNullOrUndefined(endElement)) {\n endElement.removedIds.push(revisionId);\n this.constructRevisionFromID(endElement, true);\n }\n if (isParaMarkIncluded) {\n paraWidget.characterFormat.removedIds.push(revisionId);\n this.constructRevisionFromID(paraWidget.characterFormat, true);\n }\n };\n /**\n * Insert table on undo\n *\n * @param {Selection} selection - Specified the selection\n * @param {WBlock} block - Spcifies the block\n * @param {WTable} table - Specifies the table.\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraphInternal(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n *\n * @param {Selection} selection - Specified the selection\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true; \n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n var removedCommentStart = this.checkAndRemoveComments();\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.insertInlineInternal = function (element, revisionType) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n revisionType = (isNullOrUndefined(revisionType) ? 'Insertion' : revisionType);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n if ((paragraph.paragraphFormat.textAlignment === 'Center' || paragraph.paragraphFormat.textAlignment === 'Right')\n && paragraph.paragraphFormat.listFormat.listId === -1) {\n paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n var isUndoing = !isNullOrUndefined(this.editorHistory) ? (this.editorHistory.isUndoing || this.editorHistory.isRedoing) : false;\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n if (this.owner.enableTrackChanges && element.isValidNodeForTracking && !isUndoing) {\n this.insertRevision(element, revisionType);\n }\n if (element.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(element, true);\n }\n element.linkFieldCharacter(this.documentHelper);\n if (element instanceof FootnoteElementBox) {\n if (element.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(element);\n }\n if (element.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(element);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0, undefined, undefined);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, revisionType, true);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element, paragraphFormat) {\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var begin = undefined;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var curInline = undefined;\n var prevElement = undefined;\n var indexInInline = 0;\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) { // Add new Element in current \n insertIndex++;\n begin = false;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n begin = true;\n }\n else {\n insertIndex++;\n prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.slice(0, indexInInline);\n if (curInline.revisions.length > 0 && !this.owner.enableTrackChanges) {\n this.splitRevisionForSpittedElement(curInline, prevElement);\n }\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n if (element[i] instanceof TextElementBox && element[i].text.indexOf(' ') >= 0) {\n this.documentHelper.triggerSpellCheck = true;\n }\n var prevRevisionsCount = element[i].revisions.length;\n element[i].ischangeDetected = true;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.documentHelper);\n var isRevisionCombined = this.updateRevisionForElement(curInline, element[i], indexInInline, (i === 0) ? true : false, prevElement, begin);\n //Check to combine elements with previous / next para\n if (isTrackingEnabled && !isRevisionCombined && element[i].revisions.length === prevRevisionsCount) {\n //if (!(element[i] instanceof FieldElementBox && (element[i] as FieldElementBox).fieldType === 2)) {\n this.checkToCombineRevisionsinBlocks(element[i], prevRevisionsCount === element[i].revisions.length, (i > 0 && i === element.length - 1), 'Insertion');\n //}\n }\n curInline = element[i];\n insertIndex++;\n }\n if (paragraphFormat && (isNullOrUndefined(paragraph.paragraphFormat.listFormat.list) ||\n (!isNullOrUndefined(paragraph.paragraphFormat.listFormat) && paragraph.paragraphFormat.listFormat.listId === -1))) {\n paragraph.paragraphFormat.copyFormat(paragraphFormat);\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, 0, this.isInsertField ? undefined : paragraph.paragraphFormat.bidi);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.updateRevisionForElement = function (currentElement, newElement, indexInInline, isFirstItem, prevElement, isBeginning) {\n if (!this.owner.enableTrackChanges) {\n return false;\n }\n if (isNullOrUndefined(currentElement) && isNullOrUndefined(prevElement)) {\n return false;\n }\n var isMiddle = isNullOrUndefined(isBeginning) ? true : false;\n var prevRevisionCount = newElement.revisions.length;\n if (isFirstItem) {\n if (isMiddle) {\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(currentElement, indexInInline, newElement, false, 'Insertion');\n if (isRevisionCombined || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(currentElement, prevElement, true);\n }\n else if (newElement.revisions.length === 0) {\n this.splitRevisionForSpittedElement(currentElement, prevElement);\n this.insertRevision(newElement, 'Insertion');\n }\n }\n else if (isBeginning) {\n return this.insertRevisionAtBegining(currentElement, newElement, 'Insertion');\n }\n else {\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n }\n else {\n // if (currentElement instanceof FieldElementBox && currentElement.fieldType === 2) {\n // currentElement = (currentElement as FieldElementBox).previousElement;\n // }\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n return false;\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, revisionType, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n var isBidi = paragraph.paragraphFormat.bidi && element.isRightToLeft;\n var isEqualFormat = false;\n revisionType = isNullOrUndefined(revisionType) ? 'Insertion' : revisionType;\n var isUndoing = this.skipTracking();\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isRevisionCombined = false;\n var prevRevisionCount = newElement.revisions.length;\n if (this.owner.editorHistory && (this.owner.editorHistory.isUndoing || this.owner.editorHistory.isRedoing)\n && newElement instanceof TextElementBox) {\n isEqualFormat = element.characterFormat.isEqualFormat(newElement.characterFormat)\n && this.documentHelper.textHelper.isRTLText(newElement.text);\n }\n if (!isEqualFormat) {\n if (index === element.length) {\n // Add new Element in current \n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n if (newElement.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(newElement, true, element);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtEnd(element, newElement, revisionType);\n }\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (newElement.removedIds.length > 0) {\n this.constructRevisionFromID(newElement, false);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtBegining(element, newElement, revisionType);\n }\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else {\n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n if (element.revisions.length > 0 && !isTrackingEnabled && !isUndoing && newElement.removedIds.length === 0) {\n this.splitRevisionForSpittedElement(element, textElement);\n }\n element.text = element.text.substr(0, index);\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n isRevisionCombined = true;\n this.isTrackingFormField = element.previousElement instanceof FieldElementBox ? true : false;\n if (newElement.removedIds.length > 0 && !this.isTrackingFormField) {\n this.constructRevisionFromID(newElement, false);\n this.copyElementRevision(element, textElement, true);\n }\n else if (this.owner.enableTrackChanges) {\n if (!(newElement instanceof BookmarkElementBox) && !(newElement instanceof CommentCharacterElementBox) && !(newElement instanceof EditRangeStartElementBox) && !(newElement instanceof EditRangeEndElementBox)) {\n var isRevisionCombined_1 = this.checkToMapRevisionWithInlineText(element, index, newElement, isBidi, revisionType);\n if (isRevisionCombined_1 || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(element, textElement, true);\n }\n else if (newElement.revisions.length === prevRevisionCount) {\n this.splitRevisionForSpittedElement(element, textElement);\n this.insertRevision(newElement, revisionType);\n }\n }\n else {\n this.copyElementRevision(element, textElement, false);\n }\n }\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n }\n else {\n element.text = element.text.substring(0, index) + newElement.text + element.text.substring(index);\n }\n newElement.line = element.line;\n if (!isNullOrUndefined(newElement.line.paragraph.containerWidget) && !isNullOrUndefined(newElement.line.paragraph.containerWidget.containerWidget) && newElement.line.paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n newElement.line.paragraph.containerWidget.containerWidget.height += newElement.height;\n }\n newElement.linkFieldCharacter(this.documentHelper);\n if (newElement instanceof ContentControl && newElement.type === 0) {\n this.documentHelper.contentControlCollection.push(newElement);\n }\n if (newElement instanceof ShapeBase && newElement.textWrappingStyle !== 'Inline') {\n if (paragraph.floatingElements.indexOf(newElement) === -1) {\n paragraph.floatingElements.push(newElement);\n }\n if (paragraph.bodyWidget.floatingElements.indexOf(newElement) === -1) {\n paragraph.bodyWidget.floatingElements.push(newElement);\n }\n }\n if (isTrackingEnabled && !isRevisionCombined && !isUndoing && !this.skipFieldDeleteTracking) {\n this.checkToCombineRevisionsinBlocks(newElement, prevRevisionCount === newElement.revisions.length, (index === element.length), revisionType);\n }\n if (newElement instanceof FootnoteElementBox) {\n if (isUndoing) {\n // this.documentHelper.layout.isLayoutWhole = true;\n newElement.isLayout = false;\n }\n if (newElement.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(newElement);\n }\n if (newElement.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(newElement);\n }\n }\n if (relayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex, undefined, undefined);\n }\n };\n Editor.prototype.incrementCommentIndex = function (isBidi, element, insertIndex) {\n if (!this.owner.editorHistory || !(this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo) || (this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo\n && (this.owner.editorHistory.currentHistoryInfo.action !== \"SkipCommentInline\" ||\n this.owner.editorHistory.currentHistoryInfo.action === \"SkipCommentInline\" &&\n (this.owner.editorHistory.currentHistoryInfo.modifiedActions[0] === this.editorHistory.currentBaseHistoryInfo\n || (this.owner.editorHistory.currentHistoryInfo.modifiedActions[0] !== this.editorHistory.currentBaseHistoryInfo\n && !(element instanceof CommentCharacterElementBox)))))) {\n insertIndex++;\n }\n return insertIndex;\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.constructRevisionFromID = function (insertElement, isEnd, prevElement) {\n if (insertElement.removedIds.length > 0) {\n for (var i = 0; i < insertElement.removedIds.length; i++) {\n var revisionToInclude = undefined;\n if (this.documentHelper.revisionsInternal.containsKey(insertElement.removedIds[i])) {\n revisionToInclude = this.documentHelper.revisionsInternal.get(insertElement.removedIds[i]);\n insertElement.revisions.push(revisionToInclude);\n isEnd = isEnd ? true : this.skipTracking();\n if (isEnd) {\n if (this.editorHistory.isRedoing && this.owner.editorHistory.currentBaseHistoryInfo && this.owner.editorHistory.currentBaseHistoryInfo.action === 'BackSpace') {\n isEnd = false;\n }\n }\n if (!isNullOrUndefined(prevElement)) {\n var rangeIndex = revisionToInclude.range.indexOf(prevElement);\n if (rangeIndex >= 0) {\n revisionToInclude.range.splice(rangeIndex + ((isEnd) ? 1 : 0), 0, insertElement);\n }\n else {\n revisionToInclude.range.splice(0, 0, insertElement);\n }\n }\n else {\n revisionToInclude.range.splice((isEnd) ? revisionToInclude.range.length : 0, 0, insertElement);\n }\n this.updateRevisionCollection(revisionToInclude);\n }\n }\n insertElement.removedIds = [];\n }\n else {\n // on undoing revisions will be cloned , so need to update range information.\n for (var i = 0; i < insertElement.revisions.length; i++) {\n var currentRevision = insertElement.revisions[i];\n if (this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n currentRevision = this.documentHelper.revisionsInternal.get(currentRevision.revisionID);\n currentRevision.range.splice(isEnd ? currentRevision.range.length : 0, 0, insertElement);\n this.updateRevisionCollection(currentRevision);\n }\n }\n }\n };\n /**\n * Insert block on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {WBlock} block - Specifes the block\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n Editor.prototype.insertBlockInternal = function (block) {\n var selection = this.selection;\n var isRemoved = true;\n var startPara = this.selection.start.paragraph;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n var startPosition = selection.start.clone();\n //let prevBlock: ParagraphWidget = (block as ParagraphWidget).clone()\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n this.insertNewParagraphWidget(block, false);\n if (!this.isInsertingTOC) {\n this.combineRevisions(block, startPosition, this.selection.end);\n }\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.owner.viewer);\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraphInternal(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (!isNullOrUndefined(bodyWidget)) {\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking() && block instanceof ParagraphWidget) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n else if (block instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(block, true);\n }\n else if (block instanceof TableWidget) {\n this.constructRevisionsForTable(block, true);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width? Image width\n * @param {number} height? Image height\n * @returns {void}\n */\n Editor.prototype.insertImage = function (imageString, width, height) {\n this.insertImageInternal(imageString, false, width, height);\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n * @private\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {boolean} isUiInteracted Is image instered from UI interaction.\n * @param {number} width? Image width\n * @param {number} height? Image height\n * @returns {void}\n */\n Editor.prototype.insertImageInternal = function (imageString, isUiInteracted, width, height) {\n var _this = this;\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (isNullOrUndefined(width)) {\n width = 100;\n }\n if (isNullOrUndefined(height)) {\n height = 100;\n }\n this.insertPicture(imageString, width, height, isUiInteracted);\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n };\n /**\n * Inserts a table of specified size at cursor position\n * in the document editor.\n *\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n * @returns {void}\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (columns < 1 || columns > 63) {\n DialogUtility.alert(localeValue.getConstant('Number of columns must be between 1 and 63.'));\n return;\n }\n if (rows < 1 || rows > this.documentHelper.owner.documentEditorSettings.maximumRows) {\n if (this.documentHelper.owner.locale == 'en-US') {\n DialogUtility.alert('Number of rows must be between 1 and ' + this.documentHelper.owner.documentEditorSettings.maximumRows + '.');\n }\n else {\n DialogUtility.alert(localeValue.getConstant('Number of rows must be between 1 and 32767.'));\n }\n return;\n }\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth() - table.tableFormat.leftIndent;\n table.splitWidthToTableCells(clientWidth);\n var removedComment;\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n removedComment = this.checkAndRemoveComments();\n this.initHistory('InsertTable');\n this.documentHelper.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n if (!isNullOrUndefined(table.containerWidget) && !isNullOrUndefined(table.containerWidget.containerWidget) && table.containerWidget.containerWidget instanceof FootNoteWidget) {\n table.containerWidget.containerWidget.height += table.height;\n this.isTableInsert = true;\n }\n }\n var startLine = this.selection.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.selection.getLastParagraphInLastCell(table.getSplitWidgets().pop());\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n this.isTableInsert = false;\n this.updateHistoryForComments(removedComment);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n *\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = true;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.rowInsertion = function (count, rowPlacement, startCell, endCell, row, table, isInsertRow) {\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n row.bottomBorderWidth = 0;\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i, index, table, true);\n newRow.rowFormat.copyFormat(row.rowFormat);\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, isInsertRow);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.selection.getFirstParagraphInFirstCell(widget);\n }\n if (isInsertRow) {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n };\n /**\n * Fits the table based on AutoFitType.\n *\n * @param {AutoFitType} - auto fit type\n * @returns {void}\n */\n Editor.prototype.autoFitTable = function (fitType) {\n if (this.documentHelper.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var tableAdv = this.selection.getTable(startPosition, endPosition);\n tableAdv = tableAdv.getSplitWidgets()[0];\n var parentTable = this.documentHelper.layout.getParentTable(tableAdv);\n if (!isNullOrUndefined(parentTable)) {\n this.setOffsetValue(this.selection);\n parentTable = parentTable.combineWidget(this.owner.viewer);\n this.initHistory(fitType === 'FitToContents' ? 'TableAutoFitToContents' : fitType === 'FitToWindow' ? 'TableAutoFitToWindow' : 'TableFixedColumnWidth');\n if (this.documentHelper.owner.editorHistoryModule) {\n this.cloneTableToHistoryInfo(parentTable);\n }\n parentTable.updateProperties(true, tableAdv, fitType);\n this.documentHelper.owner.isShiftingEnabled = true;\n //Layouts the table.\n this.documentHelper.layout.reLayoutTable(tableAdv);\n this.reLayout(this.selection, true);\n }\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertTableBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.owner.viewer);\n // if (this.editorHistory) {\n // let clonedTable: TableWidget = this.cloneTableToHistoryInfo(prevBlock);\n // }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n prevBlock.insertTableRowsInternal(table.childWidgets, prevBlock.childWidgets.length, true);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n if (this.checkInsertPosition(this.selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n prevBlock.isDefaultFormatUpdated = false;\n this.documentHelper.layout.reLayoutTable(prevBlock);\n this.selection.start.setPosition(paragraph.firstChild, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.selection.end.setPosition(paragraph.firstChild, true);\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n *\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n //let rowSpanCellIndex: number = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n this.copyCellFormats(row, cellIndex);\n }\n }\n this.tableReLayout(table, startParagraph, newCell);\n }\n };\n Editor.prototype.copyCellFormats = function (row, index) {\n var newCell = row.childWidgets[index];\n var newCellPara = newCell.childWidgets[0];\n (index == (row.childWidgets.length - 1)) ? --index : ++index;\n var nextCell = row.childWidgets[index];\n var nextCellpara = nextCell.childWidgets[0];\n var nextCellTextBox = nextCellpara.childWidgets[0].children[0];\n newCellPara.paragraphFormat.copyFormat(nextCellpara.paragraphFormat);\n newCell.cellFormat.copyFormat(nextCell.cellFormat);\n if (!isNullOrUndefined(nextCellTextBox)) {\n newCellPara.characterFormat.copyFormat(nextCellTextBox.characterFormat);\n }\n else {\n newCellPara.characterFormat.copyFormat(nextCellpara.characterFormat);\n }\n };\n Editor.prototype.tableReLayout = function (table, startParagraph, newCell) {\n table.updateRowIndex(0);\n var parentTable = this.documentHelper.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.skipScrollToPosition = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n *\n * @returns {TableWidget}\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat = new WTableFormat(table);\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.leftIndent = this.selection.start.paragraph.leftIndent;\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n if (this.owner.enableTrackChanges) {\n this.insertRevision(tableRow.rowFormat, 'Insertion');\n }\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex, index, table, isNewRow) {\n var tableWidget = table;\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n if (!isNullOrUndefined(index) && !isNullOrUndefined(tableWidget)) {\n if (index && index > 0 && tableWidget.childWidgets[index - 1] && tableWidget.childWidgets[index - 1].childWidgets[i]) {\n startPara = tableWidget.childWidgets[index - 1].childWidgets[i].childWidgets[0];\n }\n else if (index == 0) {\n startPara = tableWidget.childWidgets[index].childWidgets[i].childWidgets[0];\n }\n }\n var tableCell = this.createColumn(startPara, isNewRow);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph, isNewRow) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n var textElementBox = paragraph.childWidgets[0].children[0];\n if (!isNullOrUndefined(textElementBox)) {\n para.characterFormat.copyFormat(textElementBox.characterFormat);\n }\n else {\n para.characterFormat.copyFormat(paragraph.characterFormat);\n }\n if (isNewRow) {\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.paragraphFormat.leftIndent = 0;\n }\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: localizeValue.getConstant('UnTrack'),\n content: localizeValue.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.confirmCellMerge.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.confirmCellMerge();\n }\n };\n Editor.prototype.confirmCellMerge = function () {\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.owner.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var firstParagraph = this.selection.getFirstParagraph(mergedCell);\n startPosition.setPosition(firstParagraph.firstChild, true);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n var firstBlock;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n var lastBlock = cell.lastChild;\n if (lastBlock instanceof ParagraphWidget && lastBlock.isEmpty()) {\n cell.childWidgets.pop();\n }\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n firstBlock = lastBlock;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n var newBlock = block.clone();\n newBlock.containerWidget = mergedCell;\n mergedCell.childWidgets.push(newBlock);\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n }\n }\n }\n //To Ensure minimul content. \n if ((mergedCell.childWidgets.length === 0 || mergedCell.childWidgets.length === 1 && mergedCell.childWidgets[0] instanceof TableWidget) && firstBlock) {\n var newBlock = firstBlock.clone();\n mergedCell.childWidgets.push(newBlock);\n newBlock.containerWidget = mergedCell;\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether merge cell operation can be done.\n *\n * @returns {boolean} - Returns can merge cells.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.documentHelper.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraphInternal(nextParagraph, true);\n }\n else {\n this.selection.selectParagraphInternal(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n if (this.editorHistory && this.editorHistory.isUndoing &&\n this.editorHistory.currentBaseHistoryInfo.action === 'InsertTextParaReplace') {\n offset = 0;\n }\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.owner.viewer);\n if (insertAfter) {\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.constructRevisionsForBlock(newParagraph, true);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n this.documentHelper.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n insertIndex = this.moveContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable) {\n this.documentHelper.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n //let lineIndex: number = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (inline instanceof ShapeElementBox) {\n var shapeIndex = lineWidget.paragraph.floatingElements.indexOf(inline);\n if (shapeIndex !== -1) {\n lineWidget.paragraph.floatingElements.splice(shapeIndex, 1);\n }\n }\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n inline.ischangeDetected = true;\n span.ischangeDetected = true;\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n this.updateRevisionForMovedContent(inline, span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n inline.ischangeDetected = true;\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n Editor.prototype.updateRevisionForMovedContent = function (inline, tempSpan) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n }\n };\n /**\n * update complex changes when history is not preserved\n *\n * @param {number} action - Specifies the action\n * @param {string} start - Specifies the selection start\n * @param {string} end - Specified the selection end\n * @private\n * @returns {void}\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.documentHelper.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.documentHelper.updateFocus();\n this.owner.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * Re-layout content.\n *\n * @param {Selection} selection - Specifies the selection\n * @param isSelectionChanged - Specifies the selection changed\n * @private\n * @returns {void}\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged, isLayoutChanged) {\n if (!isNullOrUndefined(this.previousBlockToLayout)) {\n // Layout content for previous page to fix content based on KeepWithNext format.\n var previousBlock = this.previousBlockToLayout;\n this.documentHelper.layout.layoutBodyWidgetCollection(previousBlock.index, previousBlock.bodyWidget, previousBlock, false, false);\n this.previousBlockToLayout = undefined;\n }\n if (!this.documentHelper.isComposingIME && this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action !== 'ClearFormat') {\n if (this.editorHistory.currentHistoryInfo.action !== 'ApplyStyle') {\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n this.isHandledComplex = false;\n return;\n }\n if (isNullOrUndefined(this.documentHelper.blockToShift)) {\n this.documentHelper.removeEmptyPages();\n this.documentHelper.layout.updateFieldElements();\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }*/\n this.owner.viewer.updateScrollBars();\n if (!selection.owner.isShiftingEnabled) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (this.owner.showRevisions && this.owner.revisions.length > 0) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.shiftLayoutedItems(true);\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n if (!isNullOrUndefined(selection.start.paragraph)) {\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.containerWidget) && selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.documentHelper.layout.isRelayoutFootnote = true;\n this.shiftFootnotePageContent(selection.start.paragraph.bodyWidget.containerWidget);\n //this.documentHelper.layout.layoutfootNote(selection.start.paragraph.bodyWidget.containerWidget);\n }\n else {\n this.documentHelper.layout.isRelayoutFootnote = false;\n this.shiftFootnotePageContent();\n }\n }\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.documentHelper.updateFocus();\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n //this.documentHelper.layout.allowLayout = true;\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n if (!(this.editorHistory.undoStack && this.editorHistory.undoStack.length > 0 && this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1] instanceof HistoryInfo &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions[this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions.length - 1] === this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n else {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n if (isLayoutChanged) {\n return;\n }\n this.fireContentChange();\n if (this.owner.enableLockAndEdit) {\n // Editable region border get updated in content changes event.\n // So, handled rerendering content after applying border.\n this.owner.viewer.updateScrollBars();\n }\n this.owner.documentHelper.layout.isRelayout = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHeaderFooterWidget = function (headerFooterWidget) {\n if (isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget = this.selection.start.paragraph.bodyWidget;\n }\n this.updateHeaderFooterWidgetToPage(headerFooterWidget);\n this.shiftPageContent(headerFooterWidget.headerFooterType, headerFooterWidget.sectionFormat);\n };\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n //node = this.documentHelper.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if ((i + 1 === 1) && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') !== -1) {\n return;\n }\n if (page.index === 0 && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') === -1) {\n continue;\n }\n //if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (i > 0 || !(page.bodyWidgets[0].sectionFormat.differentFirstPage)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n //}\n }\n };\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n var update = false;\n if (isHeader) {\n update = widget != page.headerWidgetIn;\n }\n else {\n update = widget != page.footerWidgetIn;\n }\n if (update) {\n var hfWidget = widget.clone();\n this.documentHelper.layout.clearBlockWidget(hfWidget.childWidgets, true, true, true);\n hfWidget.page = page;\n hfWidget.parentHeaderFooter = widget;\n this.owner.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.documentHelper.layout.layoutHeaderFooterItems(this.owner.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidgetIn;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidgetIn;\n page.footerWidget = hfWidget;\n }\n this.removeFieldInWidget(headerOrFooter);\n this.removeFieldInWidget(headerOrFooter, undefined, true);\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInWidget = function (widget, isBookmark, isContentControl) {\n if (isNullOrUndefined(isBookmark)) {\n isBookmark = false;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n this.removeFieldInBlock(widget.childWidgets[i], isBookmark, isContentControl);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInBlock = function (block, isBookmark, isContentControl) {\n if (block instanceof TableWidget) {\n if (block.wrapTextAround && !isNullOrUndefined(block.bodyWidget)) {\n var index = block.bodyWidget.floatingElements.indexOf(block);\n if (index !== -1) {\n block.bodyWidget.floatingElements.splice(index, 1);\n }\n }\n this.removeFieldTable(block, isBookmark, isContentControl);\n }\n else if (block instanceof TableRowWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n this.removeFieldInWidget(block.childWidgets[i], isBookmark, isContentControl);\n }\n }\n else {\n this.removeField(block, isBookmark, isContentControl);\n }\n };\n Editor.prototype.removeFieldTable = function (table, isBookmark, isContentControl) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.removeFieldInWidget(row.childWidgets[j], isBookmark, isContentControl);\n }\n }\n };\n Editor.prototype.shiftFootnotePageContent = function (foot) {\n var section = this.documentHelper.pages[0].bodyWidgets[0];\n if (!isNullOrUndefined(foot)) {\n var index = this.documentHelper.pages.indexOf(foot.page);\n section = this.documentHelper.pages[index].bodyWidgets[0];\n }\n if (!isNullOrUndefined(section.page.footnoteWidget)) {\n this.checkAndShiftFromBottom(section.page, section.page.footnoteWidget);\n }\n if (!isNullOrUndefined(section.page.endnoteWidget)) {\n //this.checkAndShiftFromBottom(section.page, section.page.endnoteWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.shiftPageContent = function (type, sectionFormat) {\n // let type: HeaderFooterType = headerFooter.headerFooterType;\n var pageIndex;\n if (type.indexOf('First') !== -1) {\n pageIndex = 0;\n }\n else if (sectionFormat.differentOddAndEvenPages) {\n var isEven = type.indexOf('Even') !== -1;\n if (sectionFormat.differentFirstPage) {\n pageIndex = isEven ? 1 : 2;\n }\n else {\n pageIndex = !isEven ? 0 : 1;\n }\n }\n else {\n pageIndex = sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.documentHelper.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var section = this.documentHelper.pages[pageIndex].bodyWidgets[0];\n do {\n if (type.indexOf('Header') !== -1) {\n var widget = section.page.headerWidget;\n var isNotEmpty = !widget.isEmpty || widget.isEmpty && this.owner.enableHeaderAndFooter;\n var firstBlock = section.firstChild;\n var top_1 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n if (isNotEmpty) {\n top_1 = Math.max(headerDistance + section.page.headerWidget.height, top_1);\n }\n if (firstBlock.y !== top_1) {\n this.owner.viewer.updateClientArea(section.sectionFormat, section.page);\n firstBlock = firstBlock.combineWidget(this.owner.viewer);\n var prevWidget = firstBlock.previousRenderedWidget;\n if (prevWidget) {\n if (firstBlock.containerWidget.equals(prevWidget.containerWidget)) {\n this.owner.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n this.documentHelper.layout.updateContainerWidget(firstBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n this.documentHelper.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(section.page, section.page.footerWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n while (section) {\n var splittedSection = section.getSplitWidgets();\n section = splittedSection[splittedSection.length - 1].nextRenderedWidget;\n if (section) {\n if (pageIndex === 0) {\n break;\n }\n else {\n if (section.page.index + 1 % 2 === 0 && pageIndex === 1 ||\n (section.page.index + 1 % 2 !== 0 && pageIndex === 2)) {\n break;\n }\n var nextPage = section.page.nextPage;\n if (!isNullOrUndefined(nextPage) && nextPage.bodyWidgets[0].equals(section)) {\n section = nextPage.bodyWidgets[0];\n break;\n }\n }\n }\n }\n } while (section);\n };\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n if (bodyWidget.childWidgets.length > 1) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (!(footerWidget instanceof FootNoteWidget)) {\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n }\n if (!isNullOrUndefined(blockToShift)) {\n this.owner.viewer.updateClientArea(bodyWidget.sectionFormat, page, true);\n this.owner.viewer.cutFromTop(blockToShift.y);\n this.documentHelper.blockToShift = blockToShift;\n }\n }\n };\n Editor.prototype.allowFormattingInFormFields = function (property) {\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode() &&\n !isNullOrUndefined(this.owner.documentEditorSettings.formFieldSettings.formattingExceptions)) {\n for (var j = 0; j < this.owner.documentEditorSettings.formFieldSettings.formattingExceptions.length; j++) {\n if (property.toLowerCase() === this.owner.documentEditorSettings.formFieldSettings.formattingExceptions[j].toLowerCase()) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.getContentControl = function () {\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n var position = this.selection.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n return contentControlStart;\n }\n }\n return undefined;\n };\n Editor.prototype.checkPlainTextContentControl = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n end = this.selection.start;\n start = this.selection.end;\n }\n var startIndex = 0;\n var endIndex = 0;\n var startInline = start.currentWidget.getInline(start.offset, startIndex);\n var endInline = end.currentWidget.getInline(end.offset, endIndex);\n startIndex = startInline.index;\n endIndex = endInline.index;\n var startInlineEle = startInline.element;\n var endInlineEle = endInline.element;\n var startPosition;\n var endPosition;\n if ((startInlineEle && startInlineEle.contentControlProperties && startInlineEle.contentControlProperties.type === 'Text')\n || (endInlineEle && endInlineEle.contentControlProperties && endInlineEle.contentControlProperties.type === 'Text')) {\n startInlineEle = this.getContentControl();\n if (startInlineEle.contentControlProperties && !isNullOrUndefined(startInlineEle)) {\n var offset = startInlineEle.line.getOffset(startInlineEle, 1);\n startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(startInlineEle.line, offset);\n }\n else {\n startPosition = start;\n }\n if (endInlineEle.contentControlProperties && startInlineEle.reference) {\n endInlineEle = startInlineEle.reference;\n var endoffset = endInlineEle.line.getOffset(endInlineEle, endInlineEle.length);\n endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endInlineEle.line, endoffset);\n }\n else {\n endPosition = end;\n }\n this.selection.selectRange(startPosition, endPosition);\n }\n else if (start.paragraph.contentControlProperties\n && start.paragraph.contentControlProperties.type === 'Text') {\n this.selection.selectParagraph();\n }\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Applies character format for selection.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Spcifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update, applyStyle) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if ((this.restrictFormatting && !allowFormatting) || this.selection.checkContentControlLocked(true)) {\n return;\n }\n this.documentHelper.layout.isBidiReLayout = true;\n var selection = this.documentHelper.selection;\n if ((selection.owner.isReadOnlyMode && !allowFormatting) || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n applyStyle = isNullOrUndefined(applyStyle) ? false : applyStyle;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n this.checkPlainTextContentControl();\n if (selection.isEmpty && selection.contextType !== 'List' && !applyStyle) {\n selection.skipFormatRetrieval = true;\n if (selection.end.isAtParagraphEnd) {\n this.initHistory(action);\n this.documentHelper.owner.isShiftingEnabled = true;\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n this.reLayout(this.documentHelper.selection);\n this.documentHelper.updateFocus();\n }\n else {\n selection.fireSelectionChanged(true);\n }\n selection.skipFormatRetrieval = false;\n return;\n }\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (property === 'highlightColor' && selection.start.isInSameParagraph(selection.end)) {\n var start = selection.start;\n var end = selection.end;\n if (!this.selection.isForward) {\n end = selection.start;\n start = selection.end;\n }\n if (end.offset === selection.getLineLength(end.currentWidget) + 1 && end.offset - 1 === start.offset) {\n return;\n }\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.documentHelper.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.documentHelper.selection);\n // this.documentHelper.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n this.documentHelper.layout.isBidiReLayout = false;\n };\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = selection.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = selection.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.documentHelper.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * Preserve paragraph and offset value for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.selection.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.selection.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @returns {void}\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSubscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSuperscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', -this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n *\n * @returns {void}\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n *\n * @param {string} bullet Bullet character\n * @param {string} fontFamily Bullet font family\n * @returns {void}\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n *\n * @param {string} numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param {ListLevelPattern} listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n * @returns {void}\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n *\n * @param {BaselineAlignment} baseAlignment Specifies the baseline alignment\n * @returns {void}\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n /**\n * Clears the formatting.\n *\n * @returns {void}\n */\n Editor.prototype.clearFormatting = function () {\n var selection = this.documentHelper.selection;\n this.setPreviousBlockToLayout();\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.documentHelper.preDefinedStyles.keys; _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.documentHelper.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.documentHelper.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Creates a new instance of Style.\n *\n * @returns {void}\n */\n Editor.prototype.createStyle = function (styleString) {\n this.createStyleIn(styleString);\n };\n /**\n * Create a Style.\n * @private\n * @returns {object}\n */\n Editor.prototype.createStyleIn = function (styleString) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var style = JSON.parse(styleString);\n var styleObj = this.documentHelper.styles.findByName(style.name);\n if (styleObj !== undefined) {\n //Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.documentHelper.styles);\n return this.documentHelper.styles.findByName(style.name);\n };\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.documentHelper.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.documentHelper.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.documentHelper.layout.isBidiReLayout = false;\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'styleName', values, true, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'allCaps':\n this.updateCharacterFormat('allCaps', values);\n break;\n }\n this.reLayout(this.documentHelper.selection);\n };\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update, styleName) {\n styleName = isNullOrUndefined(styleName) ? false : styleName;\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isEmpty && !selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n if (selection.isEmpty && styleName) {\n var offset = startPosition.offset;\n var preservedStartPosition = startPosition.clone();\n var preservedEndPosition = endPosition.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n }\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.documentHelper.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.documentHelper.selection, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (!(property === 'highlightColor' && selection.isParagraphLastLine(lastLine)\n && start.currentWidget === lastLine && start.offset === selection.getLineLength(lastLine))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && ((endOffset === selection.getLineLength(lastLine) + 1) || (selection.isEmpty && selection.end.isAtParagraphEnd))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n var isStarted = true;\n var endElement = undefined;\n var indexOf = -1;\n var isIncrease = true;\n for (var j = 0; j < line.children.length; isIncrease ? j++ : j--) {\n var inlineObj = line.children[j];\n isStarted = false;\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (endElement === inlineObj) {\n endElement = undefined;\n j = indexOf;\n indexOf = -1;\n isIncrease = true;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n j += index;\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.documentHelper.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleBold = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleItalic = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n /**\n * Change the selected text to uppercase.\n * @private\n */\n Editor.prototype.changeCase = function (property) {\n if (this.selection.isEmpty || ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode())) {\n return;\n }\n this.initHistory('Uppercase');\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.changeSelectedTextCase(selection, startPosition, endPosition, property);\n this.reLayout(selection);\n };\n /**\n * Change the selected text case.\n * @private\n */\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeSelectedTextCase = function (selection, startPosition, endPosition, property, removedTextNodes) {\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n }\n var isRevert = this.editorHistory.isUndoing;\n if (isRevert && !isNullOrUndefined(removedTextNodes) && removedTextNodes.length > 0) {\n this.removedTextNodes = removedTextNodes;\n }\n var endPos = endPosition.selection.endOffset;\n this.changeTextCase(startPosition.paragraph, selection, startPosition, endPosition, property, isRevert);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (endPosition.selection.endOffset !== endPos) {\n endPosition = selection.getTextPosBasedOnLogicalIndex(endPos);\n }\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(endPosition, false);\n }\n selection.selectPosition(startPosition, endPosition);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeTextCase = function (para, selection, startPosition, endPosition, property, isRevert) {\n if (startPosition.paragraph.isInsideTable && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || selection.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n var tableCell = void 0;\n startPosition.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n tableCell = startPosition.paragraph.associatedCell;\n this.changeCaseParaFormatInCell(tableCell, startPosition, endPosition, property, isRevert);\n var table = tableCell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.changeCaseParagraph(para, selection, startPosition, endPosition, property, isRevert);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParagraph = function (para, selection, startPos, endPos, property, isRevert) {\n para = para.combineWidget(this.owner.viewer);\n var startOffsetVal = 0;\n var len = selection.getParagraphLength(para);\n var startLine = para.childWidgets.indexOf(startPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(startPos.currentWidget) : 0;\n var endOffsetVal = endPos.offset;\n var endLine = para.childWidgets.indexOf(endPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(endPos.currentWidget) : para.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (para === startPos.paragraph) {\n startOffsetVal = startPos.offset;\n }\n }\n if (!para.equals(endPos.paragraph)) {\n endOffsetVal = len;\n }\n // let count: number = 0;\n for (var i = startLine; i <= endLine; i++) {\n var line = para.childWidgets[i];\n if (i !== startLine) {\n startOffsetVal = selection.getStartLineOffset(line);\n }\n if (line === endPos.currentWidget) {\n endOffsetVal = endPos.offset;\n }\n else {\n endOffsetVal = selection.getLineLength(line);\n }\n var textCount = 0;\n var isIterationStarted = true;\n var endElementBox = undefined;\n var childIndex = -1;\n var isIncreaseIteration = true;\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < line.children.length; isIncreaseIteration ? j++ : j--) {\n var child = line.children[j];\n isIterationStarted = false;\n if (child instanceof ListTextElementBox) {\n continue;\n }\n if (endElementBox === child) {\n endElementBox = undefined;\n j = childIndex;\n childIndex = -1;\n isIncreaseIteration = true;\n }\n if (startOffsetVal >= textCount + child.length) {\n textCount += child.length;\n continue;\n }\n var startIndex = 0;\n if (startOffsetVal > textCount) {\n startIndex = startOffsetVal - textCount;\n }\n var endIndex = endOffsetVal - textCount;\n var inlineLength = child.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.changeCaseInline(child, selection, startIndex, endIndex, property, isRevert);\n j += index;\n if (endOffsetVal <= textCount + inlineLength) {\n break;\n }\n textCount += inlineLength;\n }\n }\n var endPara = endPos.paragraph;\n this.documentHelper.layout.reLayoutParagraph(para, startLine, 0);\n if (para.equals(endPara)) {\n return;\n }\n this.changeCaseNextBlock(para, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInline = function (inline, selection, startIndex, endIndex, property, isRevert) {\n if (inline instanceof TextElementBox) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert);\n }\n else {\n return this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert);\n }\n }\n return 0;\n };\n Editor.prototype.addRemovedTextNodes = function (inline, newText) {\n if (inline instanceof TextElementBox) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var span = this.editorHistory.currentBaseHistoryInfo.removedNodes[0];\n if (isNullOrUndefined(span)) {\n span = new TextElementBox();\n span.text = '';\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(span);\n }\n span.text += newText;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInlineInternal = function (inlineObj, selection, startIndex, endIndex, property, isRevert) {\n var x = 0;\n var index = inlineObj.line.children.indexOf(inlineObj);\n var paragraph = inlineObj.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inlineObj.line);\n var textElement;\n if (startIndex > 0) {\n var textToChange = inlineObj.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedTextNodes(inlineObj, textToChange);\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.line = inlineObj.line;\n //Change the text case\n textElement.text = this.getChangeCaseText(textToChange, property, isRevert);\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n if (endIndex < inlineObj.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.text = inlineObj.text.substring(endIndex);\n textElement.line = inlineObj.line;\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n var textElementBox = inlineObj;\n if (startIndex === 0) {\n var newText = textElementBox.text.substr(0, endIndex);\n this.addRemovedTextNodes(inlineObj, newText);\n //Change the text case\n textElementBox.text = this.getChangeCaseText(newText, property, isRevert);\n }\n else {\n var preText = textElementBox.text.substr(0, startIndex);\n textElementBox.text = preText;\n }\n return x;\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseNextBlock = function (block, start, end, property, isRevert) {\n block = this.getNextBlockForChangeCase(block, start, end, property, isRevert);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.changeCaseParagraph(block, this.documentHelper.selection, start, end, property, isRevert);\n }\n else {\n this.changeCaseForTable(0, block, this.documentHelper.selection, start, end, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.getNextBlockForChangeCase = function (block, start, end, property, isRevert) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n return block;\n };\n Editor.prototype.getChangeCaseText = function (input, property, isRevert) {\n if (isRevert) {\n if (!isNullOrUndefined(this.removedTextNodes) && this.removedTextNodes.length > 0) {\n var textElement = this.removedTextNodes[0];\n var oldText = textElement.text.substr(0, input.length);\n textElement.text = textElement.text.substr(oldText.length, textElement.length - oldText.length);\n input = oldText;\n if (textElement.text === '') {\n this.removedTextNodes.splice(0, 1);\n }\n }\n }\n else {\n switch (property) {\n case 'Uppercase':\n input = input.toUpperCase();\n break;\n default:\n break;\n }\n }\n return input;\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForTable = function (indexToStart, tableWidget, selection, startPos, endPos, property, isRevert) {\n tableWidget = tableWidget.combineWidget(this.owner.viewer);\n for (var i = indexToStart; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n if (endPos.paragraph.isInsideTable && selection.containsRow(row, endPos.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n this.changeCaseNextBlock(tableWidget, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedCell = function (cell, selection, property, isRevert) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(block, selection, property, isRevert);\n }\n else {\n this.changeCaseForSelTable(block, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedPara = function (paragraph, selection, property, isRevert) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (!isNullOrUndefined(element) && element instanceof TextElementBox) {\n this.addRemovedTextNodes(element, element.text);\n element.text = this.getChangeCaseText(element.text, property, isRevert);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelTable = function (tableWidget, selection, property, isRevert) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n }\n };\n // Cell\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatInCell = function (tableCell, startPos, endPos, property, isRevert) {\n var selection = this.documentHelper.selection;\n if (endPos.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(tableCell, endPos.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(tableCell, cellContainer);\n var endCell = selection.getSelectedCell(endPos.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, endPos.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, startPos, endPos)) {\n this.changeCaseParaForCellInternal(cellContainer, selection, property, isRevert);\n }\n else {\n if (startCell === cellContainer) {\n this.changeCaseParagraph(startPos.paragraph, selection, startPos, endPos, property, isRevert);\n }\n else {\n this.changeCaseParaForRow(startCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n }\n else {\n //Change case of other selected cells in the current table.\n this.changeCaseParaForTableCell(cellContainer.ownerTable, cellContainer, endCell, property, isRevert);\n }\n }\n else {\n this.changeCaseParaForRow(cellContainer.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n else {\n var wCell = selection.getContainerCell(tableCell);\n this.changeCaseParaForRow(wCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForTableCell = function (tableWidget, startCell, endCell, property, isRevert) {\n var selection = this.documentHelper.selection;\n var cellStartValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var cellEndValue = cellStartValue + startCell.cellFormat.cellWidth;\n var cellEndLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var cellEndRight = cellEndLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(cellStartValue, cellEndValue, cellEndLeft, cellEndRight);\n cellStartValue = cellInfo.start;\n cellEndValue = cellInfo.end;\n var count = tableWidget.childWidgets.indexOf(endCell.ownerRow);\n for (var m = tableWidget.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = tableWidget.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(cellStartValue) <= Math.round(left) && Math.round(left) < Math.round(cellEndValue)) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForCellInternal = function (tableCell, selection, property, isRevert) {\n for (var i = 0; i < tableCell.childWidgets.length; i++) {\n var childBlock = tableCell.childWidgets[i];\n if (childBlock instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(childBlock, selection, property, isRevert);\n }\n else {\n this.changeCaseParaFormatTableInternal(childBlock, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatTableInternal = function (table, selection, property, isRevert) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.changeCaseParaForCellInternal(row.childWidgets[y], selection, property, isRevert);\n }\n }\n };\n // Row\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForRow = function (wRow, selection, start, end, property, isRevert) {\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.changeCaseNextBlock(wRow.ownerTable, start, end, property, isRevert);\n };\n /**\n * Toggle All Caps formatting for the selected content.\n *\n * @returns {void}\n */\n Editor.prototype.toggleAllCaps = function () {\n if (this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('allCaps');\n this.selection.characterFormat.allCaps = value;\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var characterFormat = this.getSelectedCharacterFormat();\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n Editor.prototype.getSelectedCharacterFormat = function () {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (this.selection.isEmpty && this.selection.contextType === 'List') {\n var listLevel = this.selection.getListLevel(this.selection.start.paragraph);\n if (listLevel.characterFormat.uniqueCharacterFormat) {\n characterFormat = listLevel.characterFormat;\n }\n }\n else if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n return characterFormat;\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param underline Default value of ‘underline’ parameter is Single.\n * @returns {void}\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n this.updateProperty(1, underline);\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @returns {void}\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var textElement;\n var indexCountForRevision = 0;\n if (startIndex > 0) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n textElement.isRightToLeft = inline.isRightToLeft;\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n textElement.isRightToLeft = inline.isRightToLeft;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n Editor.prototype.updateRevisionForFormattedContent = function (inline, tempSpan, indexCount) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline) + indexCount;\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n }\n };\n // Cell\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else { //Format other selected cells in current table.\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.owner.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.documentHelper.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (this.isForHyperlinkFormat && this.owner.enableTrackChanges && format.ownerBase instanceof ElementBox) {\n var currentElement = format.ownerBase;\n var prevElement = currentElement.previousNode;\n if (isNullOrUndefined(prevElement)) {\n var paraWidget = currentElement.paragraph.previousWidget;\n if (!isNullOrUndefined(paraWidget) && !paraWidget.isEmpty()) {\n var lineWidget = paraWidget.lastChild;\n prevElement = lineWidget.children[lineWidget.children.length - 1];\n }\n }\n while (!isNullOrUndefined(prevElement) && !(prevElement instanceof TextElementBox)) {\n prevElement = prevElement.previousNode;\n }\n if (!isNullOrUndefined(prevElement) && prevElement.revisions.length > 0) {\n var currentRevision = prevElement.revisions[prevElement.revisions.length - 1];\n if (!this.isRevisionAlreadyIn(currentElement, currentRevision)) {\n currentElement.revisions.push(currentRevision);\n currentRevision.range.push(currentElement);\n }\n }\n else {\n this.insertRevision(currentElement, 'Insertion');\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n else if (property === 'allCaps') {\n format.allCaps = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height) {\n var modifiedFormat = new ImageInfo(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n this.documentHelper.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.documentHelper.owner.imageResizerModule) {\n this.documentHelper.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n *\n * @param {TextAlignment} textAlignment - Specified the text alignment.\n * @returns {void}\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n if (!isNullOrUndefined(this.documentHelper.selection.paragraphFormat.textAlignment) && this.documentHelper.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPreviousBlockToLayout = function () {\n var startPosition = this.documentHelper.selection.start;\n if (!this.documentHelper.selection.isForward) {\n startPosition = this.documentHelper.selection.end;\n }\n var startParagraph = startPosition.paragraph;\n if (startParagraph.paragraphFormat.keepWithNext) {\n var bodyWidget = startParagraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget instanceof BodyWidget && bodyWidget.page) {\n var previousPage = bodyWidget.page.previousPage;\n if (previousPage) {\n this.previousBlockToLayout = previousPage.bodyWidgets[0].lastChild;\n }\n }\n }\n };\n /**\n * Apply borders for selected paragraph borders\n * @private\n */\n Editor.prototype.applyParagraphBorders = function (property, bordersType, value) {\n var borders = new WBorder();\n switch (property) {\n case 'color':\n borders.color = value;\n break;\n case 'lineWidth':\n borders.lineWidth = value;\n break;\n case 'lineStyle':\n borders.lineStyle = value;\n break;\n case 'shadow':\n borders.shadow = value;\n break;\n case 'space':\n borders.space = value;\n break;\n }\n this.onApplyParagraphFormat(bordersType, borders, false, false);\n };\n /**\n * Applies paragraph format for the selection ranges.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @param {boolean} isSelectionChanged - Specifies the selection change.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if (this.restrictFormatting && !allowFormatting) {\n return;\n }\n this.setPreviousBlockToLayout();\n var action = property === 'bidi' ? 'ParagraphBidi' : (property[0].toUpperCase() + property.slice(1));\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var currentPara = selection.start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n if (property == 'leftIndent') {\n isFirstParaForList = this.isFirstParaForList(selection, currentPara);\n }\n // To stop the indentation when the paragraph x position is at the clientArea's x position\n if (value <= 0 && property == 'leftIndent') {\n var x = HelperMethods.convertPointToPixel(value);\n if ((currentPara.x + x) < this.viewer.clientArea.x)\n return;\n }\n this.initHistory(action);\n if ((this.owner.isReadOnlyMode && !allowFormatting) || !this.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && update) {\n if (isFirstParaForList) {\n this.updateListLevelIndent(value, currentPara);\n }\n else {\n this.updateListLevel(value > 0);\n }\n return;\n }\n }\n var isSkipSelection = !((value instanceof WCharacterStyle) && property == 'styleName' && selection.isEmpty);\n if (isSkipSelection && selection.isEmpty) {\n this.setOffsetValue(selection);\n var isBidiList = selection.paragraphFormat.bidi &&\n (property === 'listFormat' || selection.paragraphFormat.listId !== -1);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph;\n var layout = this.documentHelper.layout;\n // let footNoteWidgetsInfo: FootNoteWidgetsInfo = layout.getFootNodeWidgetsToShiftToPage(para);\n para = para.combineWidget(this.owner.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.layoutItemBlock(para, false);\n // if (footNoteWidgetsInfo.footNoteWidgets.length > 0) {\n // layout.moveFootNotesToPage(footNoteWidgetsInfo.footNoteWidgets, footNoteWidgetsInfo.fromBodyWidget, footNoteWidgetsInfo.toBodyWidget);\n // layout.layoutfootNote(footNoteWidgetsInfo.toBodyWidget.page.footnoteWidget);\n // }\n }\n else {\n //Iterate and update formatting's. \n if (action !== 'ParagraphBidi') {\n this.setOffsetValue(selection);\n }\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Updates the indent value in the ListLevel\n * @param {Object} value - Specifies the value\n * @param {ParagraphWidget} currentPara - Specifies the selected paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevelIndent = function (value, currentPara) {\n var list = this.documentHelper.getListById(currentPara.paragraphFormat.listFormat.listId);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var level;\n this.initHistory('List');\n if (value < 0) {\n if ((abstractList.levels[0].paragraphFormat.leftIndent + value) <= 0) {\n value = 18 - abstractList.levels[0].paragraphFormat.leftIndent;\n }\n }\n if (value == 0) {\n return;\n }\n for (var i = 0; i < abstractList.levels.length; i++) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForList(abstractList.levels[i]);\n }\n level = abstractList.levels[i];\n level.paragraphFormat.leftIndent += value;\n }\n //To Do, Implement relayouting logic for this listStyle applied paragraphs alone.\n //And shift remaining elements without layouting again.\n //It will improve the performance in large size documents.\n //The same can be reused in style modifications.\n this.documentHelper.owner.isShiftingEnabled = true;\n this.layoutWholeDocument();\n this.documentHelper.owner.isShiftingEnabled = false;\n };\n /**\n * To check the current selection is first paragraph for list\n * @param {Selection} selection - Specifies the selection\n * @param {ParagraphWidget} currentPara - Specifies the current paragraph\n * @private\n * @returns {boolean}\n */\n Editor.prototype.isFirstParaForList = function (selection, currentPara) {\n var isFirstParaForList = false;\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && currentPara.paragraphFormat.listFormat.listLevelNumber === 0) {\n //Getting the previous paragraph with same listId\n var previousParagraph = this.updateWholeListItems(currentPara, true, selection.paragraphFormat.listId);\n if (isNullOrUndefined(previousParagraph)) {\n isFirstParaForList = true;\n }\n }\n return isFirstParaForList;\n };\n /**\n * Update the list level\n *\n * @param {boolean} increaseLevel - Specifies the increase level\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var documentHelper = this.documentHelper;\n var listFormat = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n var list = documentHelper.getListById(paragraphFormat.listFormat.listId);\n var listLevel = documentHelper.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = documentHelper.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n documentHelper.selection.start.updatePhysicalPosition(true);\n documentHelper.selection.end.updatePhysicalPosition(true);\n documentHelper.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n *\n * @param {WList} list - Specified the list\n * @param {number} listLevelNumber - Specified the list level number\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n //let selection: Selection = this.documentHelper.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.documentHelper.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'spaceAfterAuto':\n this.updateParagraphFormat('spaceAfterAuto', value, false);\n break;\n case 'spaceBeforeAuto':\n this.updateParagraphFormat('spaceBeforeAuto', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'borders':\n case 'topBorder':\n case 'bottomBorder':\n case 'leftBorder':\n case 'rightBorder':\n case 'horizontalBorder':\n case 'verticalBorder':\n this.updateParagraphFormat(property, value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'bidi':\n var isBidiList = this.selection.paragraphFormat.listId !== -1;\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.updateParagraphFormat('bidi', value, false);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n break;\n case 'contextualSpacing':\n this.updateParagraphFormat('contextualSpacing', value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.documentHelper.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n *\n * @param {ParagraphWidget} paragraph - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n format.listFormat.ownerBase = format;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.documentHelper.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n var textAlignment = value;\n if (format.bidi && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n else if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n }\n format.textAlignment = textAlignment;\n //this.documentHelper.layout.allowLayout = false;\n }\n else if (property === 'topBorder') {\n this.applyBorder(format.borders.top, value);\n }\n else if (property === 'bottomBorder') {\n this.applyBorder(format.borders.bottom, value);\n }\n else if (property === 'leftBorder') {\n this.applyBorder(format.borders.left, value);\n }\n else if (property === 'rightBorder') {\n this.applyBorder(format.borders.right, value);\n }\n else if (property === 'horizontalBorder') {\n this.applyBorder(format.borders.horizontal, value);\n }\n else if (property === 'verticalBorder') {\n this.applyBorder(format.borders.vertical, value);\n }\n else if (property === 'borders') {\n format.borders.copyFormat(value);\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.documentHelper.styles.findByName(value);\n }\n format.applyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.documentHelper.layout.clearListElementBox(format.ownerBase);\n if (format.listFormat.listId >= 0) {\n format.clearIndent();\n }\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n else if (property === 'bidi') {\n format.bidi = value;\n }\n else if (property === 'keepWithNext') {\n format.keepWithNext = value;\n }\n else if (property === 'keepLinesTogether') {\n format.keepLinesTogether = value;\n }\n else if (property === 'widowControl') {\n format.widowControl = value;\n }\n else if (property === 'contextualSpacing') {\n format.contextualSpacing = value;\n }\n else if (property === 'spaceAfterAuto') {\n format.spaceAfterAuto = value;\n }\n else if (property === 'spaceBeforeAuto') {\n format.spaceBeforeAuto = value;\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.listFormat.ownerBase = destFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n //destFormat.borders = sourceFormat.borders;\n };\n /**\n * Copies list level paragraph format\n *\n * @param {WParagraphFormat} oldFormat - Specifies the old format\n * @param {WParagraphFormat} newFormat - Specifies the new format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * To apply continue numbering from the previous list\n *\n * @returns {void}\n */\n Editor.prototype.applyContinueNumbering = function () {\n var selection = this.selection;\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n }\n this.applyContinueNumberingInternal(selection);\n };\n Editor.prototype.applyContinueNumberingInternal = function (selection) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n var paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n this.documentHelper.updateFocus();\n };\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var documentHelper = this.documentHelper;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId\n && levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n }\n }\n block.paragraphFormat.copyFormat(format);\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n var listLevel = this.selection.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === 0) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else if (listType === listLevel.listLevelPattern\n || this.checkNumberArabic(listType, listLevel.listLevelPattern)) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('RestartNumbering');\n }\n this.restartListAt(selection);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentList = selection.paragraphFormat.getList();\n var list = currentList.clone();\n list.listId = this.documentHelper.lists[(this.documentHelper.lists.length - 1)].listId + 1;\n this.documentHelper.lists.push(list);\n var abstractList = currentList.abstractList.clone();\n abstractList.abstractListId = this.documentHelper.abstractLists[(this.documentHelper.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n this.restartListAtInternal(selection, list.listId);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAtInternal = function (selection, listId) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId);\n this.reLayout(selection, false);\n this.documentHelper.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n }\n }\n block.paragraphFormat.listFormat.listId = listId;\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId);\n };\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.owner.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.layoutItemBlock(paragraph, false);\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n var selection = end.owner.selection;\n var lastLine = end.currentWidget;\n var isParaSelected = start.offset === 0 && (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && end.offset === selection.getLineLength(lastLine) + 1 || end.isAtParagraphEnd);\n if (!isParaSelected && (end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyParaFormatProperty(block, property, value, update);\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.documentHelper.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.documentHelper.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update) {\n table = table.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update);\n }\n }\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n * Update section format\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n var selection = this.documentHelper.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.documentHelper.clearContent();\n var startSectionIndex = startPosition.paragraph.bodyWidget.sectionIndex;\n var endSectionIndex = endPosition.paragraph.bodyWidget.sectionIndex;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (this.documentHelper.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n break;\n }\n }\n for (var i = startPageIndex; i < this.documentHelper.pages.length; i++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n // let startPageIndex: number = this.documentHelper.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.documentHelper.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.documentHelper.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.documentHelper.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(selection, property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n case 'bidi':\n return 'TableBidi';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getRowAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableCellAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n //let selection: Selection = this.documentHelper.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n else if (property === 'pageStartingNumber') {\n sectionFormat.pageStartingNumber = value;\n }\n else if (property === 'restartPageNumbering') {\n sectionFormat.restartPageNumbering = value;\n }\n else if (property === 'endnoteNumberFormat') {\n sectionFormat.endnoteNumberFormat = value;\n }\n else if (property === 'footNoteNumberFormat') {\n sectionFormat.footNoteNumberFormat = value;\n }\n else if (property === 'restartIndexForEndnotes') {\n sectionFormat.restartIndexForEndnotes = value;\n }\n else if (property === 'restartIndexForFootnotes') {\n sectionFormat.restartIndexForFootnotes = value;\n }\n else if (property === 'initialFootNoteNumber') {\n sectionFormat.initialFootNoteNumber = value;\n }\n else if (property === 'initialEndNoteNumber') {\n sectionFormat.initialEndNoteNumber = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutWholeDocument = function (isLayoutChanged) {\n this.documentHelper.layout.isLayoutWhole = true;\n var startPosition = this.documentHelper.selection.start;\n var endPosition = this.documentHelper.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.documentHelper.selection.end;\n endPosition = this.documentHelper.selection.start;\n }\n var startInfo = this.selection.getParagraphInfo(startPosition);\n var endInfo = this.selection.getParagraphInfo(endPosition);\n var startIndex = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n this.documentHelper.clearContent();\n // this.documentHelper.layout.isRelayout = false;\n this.documentHelper.layout.layoutItems(sections, true);\n // this.documentHelper.layout.isRelayout = true;\n this.documentHelper.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.documentHelper.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.documentHelper.selection, undefined, isLayoutChanged);\n this.documentHelper.layout.isLayoutWhole = false;\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.documentHelper.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections);\n } while (nextSection);\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.owner.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.documentHelper.layout.clearTableWidget(block, true, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n previousBodyWidget.page.destroy();\n // this.documentHelper.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.equals(bodyWidget));\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n case 'TableBidi':\n this.editorHistory.initializeHistory(action);\n this.updateTableFormat(selection, 'bidi', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n this.applyTablePropertyValue(selection, property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.documentHelper.layout.reLayoutTable(tableStartPosition.paragraph.associatedCell.ownerTable);\n }\n };\n /**\n * update cell format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * Update row format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.documentHelper.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_2 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer) {\n // let index: number = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n block = block.combineWidget(this.viewer);\n section = block.containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.documentHelper.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n this.documentHelper.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var start = startPos.clone();\n var body = start.paragraph.containerWidget;\n var isFirstLine = start.currentWidget.isFirstLine();\n var isMultipleSectionSelected = this.checkMultipleSectionSelected(start, endPos);\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n if (isMultipleSectionSelected && this.selection.currentPasteAction == \"DefaultPaste\" && isFirstLine && start.offset < 1) {\n var currentParagraph = start.paragraph;\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n line.paragraph = paragraph;\n paragraph.containerWidget = body;\n paragraph.childWidgets.push(line);\n body.childWidgets.push(paragraph);\n paragraph.index = currentParagraph.index;\n paragraph.x = start.location.x;\n paragraph.y = start.location.y;\n }\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.checkMultipleSectionSelected = function (start, end) {\n var startSectionIndex = this.getBodyWidgetIndex(start);\n var endSectionIndex = this.getBodyWidgetIndex(end);\n if (startSectionIndex == endSectionIndex) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBodyWidgetIndex = function (textPosition) {\n var position = textPosition.hierarchicalPosition;\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n index = position.indexOf(';');\n value = position.substring(0, index);\n var bodyWidgetIndex = parseInt(value, 10);\n return bodyWidgetIndex;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== selection.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell.ownerTable.index !== end.paragraph.associatedCell.ownerTable.index)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n // if (inline instanceof FootnoteElementBox) {\n // this.removeFootnote(inline);\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(end.paragraph.associatedCell, start, end))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction);\n }\n else {\n this.deletePara(paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n };\n /**\n * Merge the selected cells.\n *\n * @returns {void}\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.documentHelper) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n *\n * @returns {void}\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.owner.viewer);\n this.selection.selectTable();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var considerTrackChanges = true;\n if (!this.skipTracking()) {\n var count = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.revisions.length === 1 && row.rowFormat.revisions[0].revisionType === 'Insertion'\n && row.rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser)) {\n this.isRemoveRevision = true;\n this.unlinkRangeFromRevision(row.rowFormat, true);\n this.isRemoveRevision = false;\n if (row.rowFormat.revisions[0].range.length === 0) {\n row.rowFormat.revisions.splice(0, 1);\n }\n count++;\n }\n }\n if (count === table.childWidgets.length) {\n considerTrackChanges = false;\n }\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n if (this.owner.enableTrackChanges && considerTrackChanges) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n if (i === 0) {\n var nextCell = table.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n this.trackRowDeletion(table.childWidgets[i]);\n }\n }\n else {\n this.removeBlock(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: locale.getConstant('UnTrack'),\n content: locale.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onDeleteColumnConfirmed.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.onDeleteColumnConfirmed();\n }\n };\n Editor.prototype.onDeleteColumnConfirmed = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.selectColumn();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n }\n };\n /**\n * Deletes the selected row(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n var blockInfo = this.selection.getParagraphInfo(startPos);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n this.selection.selectRow();\n var commentStart = [];\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n startPos = startPos.clone();\n if (!this.selection.isEmpty) {\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n this.removeRow(row);\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n if (this.owner.enableTrackChanges && this.checkIsNotRedoing()) {\n this.trackRowDeletion(tableRow, true, false);\n }\n else {\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n if (this.owner.enableTrackChanges) {\n this.trackRowDeletion(row, true, false);\n }\n else {\n this.removeRow(row);\n }\n }\n if (!this.owner.enableTrackChanges || isNullOrUndefined(table.childWidgets)) {\n this.selection.selectParagraphInternal(paragraph, true);\n }\n else {\n var textPosition = this.selection.getTextPosBasedOnLogicalIndex(startIndex);\n this.selection.selectContent(textPosition, true);\n // this.selection.start.setPositionInternal(startPos);\n // this.selection.end.setPositionInternal(this.selection.start);\n }\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n Editor.prototype.trackRowDeletion = function (row, canremoveRow, updateHistory) {\n var rowFormat = row.rowFormat;\n if (!isNullOrUndefined(rowFormat)) {\n var canInsertRevision = true;\n if (rowFormat.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(rowFormat);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(rowFormat, undefined)) {\n if (isNullOrUndefined(canremoveRow) || canremoveRow) {\n this.removeRow(row);\n }\n else {\n this.removeRevisionsInRow(row);\n }\n return true;\n }\n }\n else if (revision.revisionType === 'Deletion') {\n this.unlinkWholeRangeInRevision(rowFormat, revision);\n }\n }\n if (canInsertRevision) {\n if ((isNullOrUndefined(updateHistory) || updateHistory) && this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n }\n this.insertRevision(rowFormat, 'Deletion');\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n if (cellWidget.childWidgets[j] instanceof TableWidget) {\n this.trackInnerTable(cellWidget.childWidgets[i], canremoveRow, updateHistory);\n }\n else {\n var paraWidget = cellWidget.childWidgets[j];\n // We used this boolean since for table tracking we should add removed nodes only for entire table not for every elements in the table\n this.skipTableElements = true;\n this.insertRevisionForBlock(paraWidget, 'Deletion');\n this.skipTableElements = false;\n }\n }\n }\n }\n return false;\n };\n Editor.prototype.trackInnerTable = function (tableWidget, canremoveRow, updateHistory) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n this.trackRowDeletion(tableWidget.childWidgets[i], canremoveRow, updateHistory);\n }\n };\n Editor.prototype.returnDeleteRevision = function (revisions) {\n for (var i = 0; i < revisions.length; i++) {\n if (revisions[i].revisionType === 'Deletion') {\n return revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (row.rowFormat.revisions.length > 0) {\n this.removeRevisionsInRow(row);\n }\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n /**\n * @private\n * @param {TableWidget} table Specifies the table widget\n * @returns {void}\n */\n Editor.prototype.updateTable = function (table) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n };\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.selection.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n if (end.paragraph.isInsideTable) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.documentHelper.selection.getLineLength(paragraph.lastChild);\n }\n // If previous widget is splitted paragraph, combine paragraph widget.\n var block = paragraph.previousRenderedWidget ?\n paragraph.previousRenderedWidget.combineWidget(this.documentHelper.viewer) : undefined;\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset) ||\n (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentHistoryInfo &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && block && block.isPageBreak()\n && (startOffset === 0 && !start.currentWidget.isFirstLine || startOffset > 0))) {\n isCombineNextParagraph = true;\n }\n var paraEnd = end.clone();\n paraEnd.offset = paraEnd.offset - 1;\n var paraReplace = (start.paragraph === paragraph && start.isAtParagraphStart && paraEnd.isAtParagraphEnd &&\n this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && this.editorHistory.currentBaseHistoryInfo.action === 'Insert');\n if (paraReplace) {\n this.editorHistory.currentBaseHistoryInfo.action = 'InsertTextParaReplace';\n }\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n end.currentWidget === paragraph.lastChild || paraReplace) {\n var isStartParagraph = start.paragraph === paragraph;\n if (!this.isInsertingTOC || this.owner.enableTrackChanges && end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine() || paraReplace) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n var revisionLength = paragraph.characterFormat.revisions.length;\n if (paragraph.isEmpty() && revisionLength > 0) {\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.removeBlock(paragraph);\n }\n if (!isNullOrUndefined(block) && !isStartParagraph && !paraReplace) {\n this.delBlockContinue = true;\n this.delBlock = block;\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && !section.equals(nextSection) && section.index !== nextSection.index) {\n this.delSection = nextSection;\n }\n else {\n this.delSection = undefined;\n }\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n this.delBlockContinue = false;\n this.delBlock = undefined;\n if (editAction === 4) {\n return;\n }\n else {\n if (this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action === 'ParaMarkTrack') {\n this.addRemovedNodes(paragraph.characterFormat.cloneFormat());\n if (paragraph.characterFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(paragraph.characterFormat, true);\n }\n paragraph.characterFormat.revisions = [];\n }\n else {\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC' && this.editorHistory.currentBaseHistoryInfo.action !== 'Reject Change') {\n if (isCombineNextParagraph) {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.deleteParagraphMark(currentParagraph, selection, editAction, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n }\n }\n else {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.addRemovedNodes(paragraph);\n }\n }\n return;\n }\n }\n else {\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC') {\n var removedNodeLength = -1;\n if (this.editorHistory.currentBaseHistoryInfo) {\n removedNodeLength = this.editorHistory.currentBaseHistoryInfo.removedNodes.length;\n }\n this.insertRevisionForBlock(paragraph, 'Deletion');\n if (paragraph.isEmpty() && !(end.paragraph.previousRenderedWidget instanceof TableWidget)) {\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (removedNodeLength === -1) {\n this.addRemovedNodes(paragraph);\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.splice(removedNodeLength, 0, paragraph);\n }\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n }\n else {\n // On deleting para, para items may be added with delete revisions so we need to ensure whether it can be combined with prev/ next para.\n this.combineRevisionWithBlocks(paragraph.firstChild.children[0]);\n }\n if (paragraph === end.paragraph && this.editorHistory.currentBaseHistoryInfo.action === 'Delete') {\n var paraInfo = this.selection.getParagraphInfo(end);\n this.selection.editPosition = this.selection.getHierarchicalIndex(paraInfo.paragraph, paraInfo.offset.toString());\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n return;\n }\n }\n else {\n //this.documentHelper.comments;\n var foot = void 0;\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n }else if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n }*/\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.addRemovedNodes(paragraph);\n this.removeBlock(paragraph);\n /* let widget: IWidget;\n for(let i:number =0;i< foot.childWidgets.length; i++) {\n widget = foot.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n \r\n let para: ParagraphWidget = widget;\n if (!isNullOrUndefined(para)) {\n this.removeBlock(para);\n }}}*/\n }\n if (this.documentHelper.blockToShift === paragraph) {\n this.documentHelper.blockToShift = undefined;\n }\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.selection.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && isNullOrUndefined(nextWidget) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.selection.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n };\n Editor.prototype.deleteSection = function (selection, section, nextSection, editAction) {\n if (editAction < 4) {\n this.combineSectionInternal(selection, section, nextSection);\n }\n //Copies the section properties, if this is last paragraph of section.\n if (editAction > 2) {\n section.sectionFormat.copyFormat(nextSection.sectionFormat);\n }\n };\n Editor.prototype.combineSectionInternal = function (selection, section, nextSection) {\n // if (section.sectionFormat.isEqualFormat(nextSection.sectionFormat)) {\n // } else {\n var bodyWidget = section.getSplitWidgets()[0];\n var currentSection = [];\n this.combineSectionChild(bodyWidget, currentSection);\n bodyWidget = currentSection[0];\n var lastBlockIndex = bodyWidget.lastChild.index;\n this.updateBlockIndex(lastBlockIndex + 1, nextSection.firstChild);\n var insertIndex = 0;\n var containerWidget = nextSection;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets.splice(i, 1)[0];\n containerWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.bodyWidget, block, false);\n block = block.getSplitWidgets().pop();\n containerWidget = block.containerWidget;\n insertIndex = block.indexInOwner + 1;\n i--;\n }\n this.updateSectionIndex(undefined, nextSection, false);\n this.addRemovedNodes(bodyWidget);\n // this.insert\n // }\n };\n /* eslint-disable max-len */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget && !isNullOrUndefined(block.paragraphFormat.baseStyle) && block.paragraphFormat.baseStyle.name === 'Normal') {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n if (block instanceof ParagraphWidget) {\n newParagraph.paragraphFormat.lineSpacing = block.paragraphFormat.lineSpacing;\n newParagraph.paragraphFormat.lineSpacingType = block.paragraphFormat.lineSpacingType;\n var style = this.documentHelper.styles.findByName('Normal');\n if (!isNullOrUndefined(style)) {\n newParagraph.paragraphFormat.baseStyle = new WParagraphStyle();\n newParagraph.paragraphFormat.baseStyle.copyStyle(style);\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine);\n if (paragraphAdv.containerWidget.childWidgets[insertIndex]) {\n var line = (paragraphAdv.containerWidget.childWidgets[insertIndex]);\n for (var i = 0; i < line.childWidgets.length; i++) {\n var linewid = line.childWidgets[i];\n for (var j = 0; j < linewid.children.length; j++) {\n var inline = linewid.children[j];\n if (inline instanceof FootnoteElementBox) {\n this.removeFootnote(inline);\n }\n }\n }\n }\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n Editor.prototype.removeCommentsInBlock = function (block) {\n if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var row = block.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block_1 = cell.childWidgets[k];\n this.removeCommentsInBlock(block_1);\n }\n }\n }\n }\n else {\n this.removeCommentInPara(block);\n }\n };\n Editor.prototype.removeCommentInPara = function (block) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var lineWidget = block.childWidgets[i];\n //Iterate through each line widgets.\n for (var j = 0; j < lineWidget.children.length; j++) {\n this.removeCommentsInline(lineWidget.children[j]);\n }\n }\n };\n Editor.prototype.removeCommentsInline = function (inline) {\n if (inline instanceof CommentCharacterElementBox) {\n if (inline.commentType === 1) {\n // if (!inline.comment.isReply) {\n // for (let i: number = 0; i < inline.comment.replyComments.length; i++) {\n // this.removeCommentsInline(inline.comment.replyComments[i].commentEnd);\n // }\n // }\n // if (inline.comment.commentStart && inline.comment.commentStart.commentMark) {\n // inline.comment.commentStart.removeCommentMark();\n // }\n // if (!inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment) >= 0\n // || inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment.ownerComment) >= 0) {\n // this.deleteCommentWidget(inline.comment);\n // }\n }\n else {\n inline.removeCommentMark();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeBlock = function (block, isSkipShifting, skipElementRemoval) {\n var index;\n var blockCollection;\n var containerWidget;\n if (!skipElementRemoval) {\n this.removeFieldInBlock(block);\n this.removeFieldInBlock(block, true);\n this.removeFieldInBlock(block, undefined, true);\n this.removeCommentsInBlock(block);\n }\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n for (var i = 0; i < block.childWidgets.length; i++) {\n var isSkipTracking = void 0;\n if (!this.isPasteRevertAction()) {\n isSkipTracking = this.skipTracking();\n }\n if (block.childWidgets[i] instanceof TableRowWidget && !isSkipTracking) {\n var tableDelete = block.childWidgets[i];\n this.removeDeletedCellRevision(tableDelete);\n }\n if (block.childWidgets[i] instanceof LineWidget) {\n var line = block.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof FootnoteElementBox && !this.selection.isEmpty) {\n this.removeFootnote(element);\n }\n }\n }\n }\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n if (!isNullOrUndefined(containerWidget.containerWidget) && containerWidget.containerWidget instanceof FootNoteWidget) {\n containerWidget.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false, isSkipShifting);\n }\n };\n Editor.prototype.removePrevParaMarkRevision = function (currentBlock, isFromDelete) {\n isFromDelete = isNullOrUndefined(isFromDelete) ? false : isFromDelete;\n if (this.owner.enableTrackChanges || currentBlock.characterFormat.revisions.length != 0) {\n var currentPara = currentBlock;\n var rangeIndex = -1;\n var revision = void 0;\n var nonEmptyEndPara = currentPara;\n if (!isFromDelete && !isNullOrUndefined(nonEmptyEndPara.previousRenderedWidget)) {\n nonEmptyEndPara = nonEmptyEndPara.previousRenderedWidget;\n }\n if (nonEmptyEndPara.characterFormat.revisions.length > 0) {\n revision = nonEmptyEndPara.characterFormat.revisions[nonEmptyEndPara.characterFormat.revisions.length - 1];\n rangeIndex = revision.range.indexOf(nonEmptyEndPara.characterFormat);\n }\n if (rangeIndex >= 0 && !isNullOrUndefined(revision)) {\n var lastRange = revision.range[rangeIndex];\n var isParaMark = lastRange instanceof WCharacterFormat;\n if (isParaMark) {\n revision.range.splice(rangeIndex, 1);\n if (nonEmptyEndPara.characterFormat && nonEmptyEndPara.characterFormat.revisions.indexOf(revision) > -1) {\n nonEmptyEndPara.characterFormat.revisions.splice(nonEmptyEndPara.characterFormat.revisions.indexOf(revision), 1);\n }\n if (revision.range.length == 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n }\n }\n }\n };\n Editor.prototype.isPasteRevertAction = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n return true;\n }\n return false;\n };\n Editor.prototype.toCheckForTrack = function (block) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (block instanceof TableWidget && block.childWidgets.length > 0) {\n var rowFormat = block.childWidgets[0].rowFormat;\n if ((rowFormat.revisions.length > 0 && rowFormat.revisions[0].revisionType !== 'Insertion'\n && rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser))\n || (rowFormat.revisions.length === 0)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.removeFootnote = function (element, paragraph) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnoteWidget = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnoteWidget.bodyWidgets.length; j++) {\n if (element === (footnoteWidget.bodyWidgets[j]).footNoteReference) {\n footnoteWidget.height -= footnoteWidget.bodyWidgets[j].childWidgets[0].height;\n footnoteWidget.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (footnoteWidget.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(this.documentHelper.footnoteCollection.indexOf(element), 1);\n };\n Editor.prototype.removeEndnote = function (element, paragraph) {\n if (element.paragraph.bodyWidget.page.endnoteWidget) {\n var endnoteWidget = element.paragraph.bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnoteWidget.bodyWidgets.length; j++) {\n if (element === (endnoteWidget.bodyWidgets[j]).footNoteReference) {\n endnoteWidget.height -= endnoteWidget.bodyWidgets[j].childWidgets[0].height;\n endnoteWidget.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (endnoteWidget.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(this.documentHelper.endnoteCollection.indexOf(element), 1);\n };\n Editor.prototype.removeAutoShape = function (inline) {\n var shapeIndex = inline.line.paragraph.floatingElements.indexOf(inline);\n inline.line.paragraph.bodyWidget.floatingElements.splice(inline.line.paragraph.bodyWidget.floatingElements.indexOf(inline), 1);\n inline.line.paragraph.floatingElements.splice(shapeIndex, 1);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeField = function (block, isBookmark, isContentControl) {\n var collection = this.documentHelper.fields;\n if (isBookmark) {\n collection = this.documentHelper.bookmarks.keys;\n }\n else if (isContentControl) {\n collection = this.documentHelper.contentControlCollection;\n }\n if (block.floatingElements.length > 0) {\n for (var z = 0; z < block.floatingElements.length; z++) {\n var inline = block.floatingElements[z];\n this.removeAutoShape(inline);\n }\n }\n for (var i = 0; i < collection.length; i++) {\n var element = isBookmark ?\n this.documentHelper.bookmarks.get(collection[i]) : collection[i];\n if (element.line.paragraph === block) {\n if (isBookmark) {\n this.documentHelper.bookmarks.remove(collection[i]);\n }\n else if (isContentControl) {\n this.documentHelper.contentControlCollection.splice(i, 1);\n }\n else {\n this.documentHelper.fields.splice(i, 1);\n if (this.documentHelper.formFields.indexOf(element) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(element), 1);\n }\n }\n i--;\n }\n }\n if (this.documentHelper.footnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var element = this.documentHelper.footnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnote = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnote.bodyWidgets.length; j++) {\n if (element === (footnote.bodyWidgets[j]).footNoteReference) {\n footnote.height -= (footnote.bodyWidgets[j]).height;\n footnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (footnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (this.documentHelper.endnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var element = this.documentHelper.endnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.endnoteWidget) {\n var endnote = element.paragraph.bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnote.bodyWidgets.length; j++) {\n if (element === (endnote.bodyWidgets[j]).footNoteReference) {\n endnote.height -= (endnote.bodyWidgets[j]).height;\n endnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (endnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * @private\n * @param {IWidget} node Specifies the node.\n * @returns {void}\n */\n Editor.prototype.addRemovedNodes = function (node) {\n if (node instanceof CommentCharacterElementBox && node.commentType === 0 && node.commentMark) {\n node.removeCommentMark();\n }\n if (node instanceof ContentControl && node.type === 0) {\n this.documentHelper.contentControlCollection.splice(this.documentHelper.contentControlCollection.indexOf(node), 1);\n }\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(node) !== -1) {\n this.documentHelper.fields.splice(this.documentHelper.fields.indexOf(node), 1);\n }\n if (this.documentHelper.formFields.indexOf(node) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n if (this.delBlock.indexInOwner !== -1) {\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n }\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n }\n };\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else if (isCellCleared) {\n this.documentHelper.layout.reLayoutTable(containerCell.ownerRow.ownerTable);\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var para = end.paragraph;\n var bodyWidget = para.bodyWidget instanceof BodyWidget ? para.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction, endCells) {\n var clonedTable = undefined;\n var action = 'Delete';\n var isDeleteCells = false;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(endCells)) {\n endCell = endCells;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n clonedTable = this.cloneTableToHistoryInfo(table);\n if (this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack') {\n return;\n }\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n selection.owner.isLayoutEnabled = false;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n //let cells: TableCellWidget[] = [];\n var isRowSelected = this.isWholeRowSelected(startCell.ownerRow, startColumnIndex, endColumnIndex);\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (!isRowSelected) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n var tiltle = localizeValue.getConstant('UnTrack');\n var content = localizeValue.getConstant('Merge Track');\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: tiltle,\n content: content,\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onConfirmedTableCellsDeletion.bind(this, table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action)\n },\n closeOnEscape: true, position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeDeletedCellRevision = function (row) {\n if (row.rowFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(row.rowFormat, true);\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n var paraWidget = cellWidget.childWidgets[j];\n if (!isNullOrUndefined(paraWidget) && paraWidget instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n if (!isNullOrUndefined(lineWidget.children)) {\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.revisions.length > 0) {\n this.unlinkRangeFromRevision(element, true);\n }\n }\n }\n }\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n }\n }\n };\n Editor.prototype.onConfirmedTableCellsDeletion = function (table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var canRemoveRow = false;\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (isRowSelected) {\n canRemoveRow = this.trackRowDeletion(row, false);\n if (canRemoveRow) {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n if (!canRemoveRow && row.childWidgets.length === 0) {\n var rowToRemove = table.childWidgets[i];\n var prevRenderedRow = rowToRemove.previousRenderedWidget;\n while (!isNullOrUndefined(prevRenderedRow)) {\n for (var k = 0; k < prevRenderedRow.childWidgets.length; k++) {\n var cell = prevRenderedRow.childWidgets[k];\n if (rowToRemove.rowIndex < cell.ownerRow.rowIndex + cell.cellFormat.rowSpan) {\n cell.cellFormat.rowSpan--;\n }\n }\n prevRenderedRow = prevRenderedRow.previousRenderedWidget;\n }\n this.updateNextBlocksIndex(rowToRemove, false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.onConfirmedCellDeletion = function (row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction) {\n var isStarted = false;\n var isCellCleared = false;\n this.removeDeletedCellRevision(row);\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n //this.removeRevisionForCell(cell, true);\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n for (var k = 0; k < cell_1.childWidgets.length; k++) {\n var para = cell_1.childWidgets[k];\n for (var l = 0; l < para.childWidgets.length; l++) {\n var block = para.childWidgets[l];\n if (block instanceof LineWidget) {\n var line = block;\n for (var j_2 = 0; j_2 < line.children.length; j_2++) {\n var element = line.children[j_2];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n }\n }\n }\n }\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n };\n Editor.prototype.removeRevisionForRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0 && this.skipTracking()) {\n this.unlinkRangeFromRevision(rowWidget.rowFormat, true);\n this.addRemovedRevisionInfo(rowWidget.rowFormat, undefined);\n }\n };\n Editor.prototype.removeRevisionsInRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0) {\n for (var i = 0; i < rowWidget.rowFormat.revisions.length; i++) {\n var rowRevision = rowWidget.rowFormat.revisions[i];\n this.unlinkWholeRangeInRevision(rowWidget.rowFormat, rowRevision);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForCell = function (cellWidget, removeCollection) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.unlinkRangeFromRevision(currentElement, removeCollection);\n this.addRemovedRevisionInfo(currentElement, undefined);\n }\n }\n }\n }\n else if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.removeRevisionForInnerTable(cellWidget.childWidgets[i]);\n }\n }\n };\n Editor.prototype.removeRevisionForInnerTable = function (tableWidget) {\n if (tableWidget.childWidgets.length > 0) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n if (!isNullOrUndefined(row)) {\n this.removeRevisionForRow(row);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForBlock = function (paraWidget, revision, skipParaMark, addToRevisionInfo) {\n if (paraWidget.characterFormat.revisions.length > 0 && !skipParaMark) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(paraWidget.characterFormat, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n else {\n this.unlinkRangeByRevision(paraWidget.characterFormat, revision);\n }\n paraWidget.characterFormat.revisions = [];\n }\n if (!isNullOrUndefined(paraWidget)) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(currentElement, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(currentElement, true);\n }\n else {\n this.unlinkRangeByRevision(currentElement, revision);\n }\n currentElement.revisions = [];\n }\n }\n }\n }\n };\n Editor.prototype.unlinkRangeByRevision = function (item, revision) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (currentRevision.author === revision.author && currentRevision.revisionType === revision.revisionType) {\n item.revisions.splice(item.revisions.indexOf(revision), 1);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n }\n }\n };\n Editor.prototype.isWholeRowSelected = function (ownerRow, startColumnIndex, endColumnIndex) {\n var columnCount = startColumnIndex + endColumnIndex;\n if (startColumnIndex === 0 && ownerRow.childWidgets.length - 1 === columnCount) {\n return true;\n }\n return false;\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n var totalLength = cell.childWidgets.length - 1;\n for (var i = cell.childWidgets.length - 1; i > -1; i--) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && i === totalLength) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n if (!this.checkClearCells(selection)) {\n for (var j = paragraph.childWidgets.length - 1; j >= 0; j--) {\n var inline = paragraph.childWidgets[j];\n for (var k = inline.children.length - 1; k >= 0; k--) {\n var element = inline.children[k];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n else if (element instanceof BookmarkElementBox && element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n }\n }\n }\n else if (!paragraph.isEmpty()) {\n this.removeInlines(paragraph, paragraph.firstChild, 0, paragraph.lastChild, paragraph.lastChild.getEndOffset(), editAction);\n }\n continue;\n }\n this.removeBlock(block);\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n if (cell.childWidgets.length === 1) {\n //Add Index for line Widget\n selection.editPosition = this.selection.getHierarchicalIndex(cell.childWidgets[0], '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n }\n }\n return true;\n };\n Editor.prototype.paragrapghBookmarkCollection = function (block, existingBookmark) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n var bookmark = this.documentHelper.bookmarks.get(bookmarkCol.keys[i]);\n if (bookmark.paragraph === block) {\n existingBookmark.push(bookmark);\n }\n }\n return existingBookmark;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell)) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n if (this.toCheckForTrack(ownerTable)) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var inline = ownerTable.childWidgets[i];\n this.trackRowDeletion(inline);\n if (end.paragraph.isInsideTable && selection.containsRow(inline, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.owner.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n this.deleteContent(table, selection, editAction);\n }\n else {\n if (this.owner.enableTrackChanges) {\n if (isNullOrUndefined(end.paragraph.associatedCell) && !end.paragraph.isInsideTable) {\n var previousChild = end.paragraph.previousRenderedWidget.lastChild;\n var endCells = previousChild.lastChild;\n this.deleteCellsInTable(table, selection, start, end, editAction, endCells);\n }\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.selection.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n if (this.owner.enableTrackChanges) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n this.trackRowDeletion(table.childWidgets[i]);\n }\n }\n else {\n this.deleteContent(table, selection, editAction);\n }\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = selection.getFirstParagraphInCell(cell);\n selection.editPosition = this.selection.getHierarchicalIndex(firstParagraph, '0');\n };\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.selection.getHierarchicalIndex(paragraph, '');\n var end = this.selection.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n /**\n * @private\n * @param table\n * @returns {TableWidget}\n */\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.documentHelper.selection.start.paragraph.isInsideTable &&\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction);\n }\n };\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.documentHelper.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n var startPosition = this.selection.start.clone();\n var endPosition = this.selection.end.clone();\n var editPosition = this.selection.editPosition;\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset, editAction);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset, editAction);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n }\n }\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n if (this.skipReplace) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = undefined;\n this.updateInsertPosition();\n }\n this.selection.editPosition = editPosition;\n }\n if (isRemoved) {\n this.removeEmptyLine(paragraph);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n };\n Editor.prototype.skipTracking = function () {\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n return true;\n }\n else if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' || this.editorHistory.currentBaseHistoryInfo.action === 'Accept Change')) {\n return true;\n }\n return false;\n };\n Editor.prototype.canHandleDeletion = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'DeleteRow')) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param comment\n * Deletes comment start and end markers along with its comment widgets.\n */\n Editor.prototype.deleteCommentInSelection = function (comment) {\n //if comment end mark is in selection, both comment start and end markers will get deleted along with its comment widgets.\n var curentBaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo\n && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.initComplexHistory('DeleteCommentInline');\n }\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n }\n this.selection.editPosition = curentBaseHistoryInfo.insertPosition;\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.editPosition;\n this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset, editAction) {\n var count = this.selection.getLineLength(lineWidget);\n var startText = undefined;\n var textCount = 0;\n var lastText = undefined;\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n if (isNullOrUndefined(editAction) || editAction !== 2) {\n for (var k = 0; k < lineWidget.children.length; k++) {\n var elementbox = lineWidget.children[k];\n if (elementbox instanceof TextElementBox) {\n var text = elementbox.text;\n if (text.length + textCount > startOffset && !(textCount > startOffset)) {\n startText = text[startOffset - textCount - 1];\n if (isNullOrUndefined(startText) && (startOffset - textCount) === 0) {\n startText = lastText;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text.length + textCount > endOffset) {\n if ((text[endOffset - textCount] === ' ' && startOffset === 0) || (startText === ' ' && text[endOffset - textCount] === ' ')) {\n endOffset += 1;\n }\n }\n lastText = text[text.length - 1];\n }\n textCount += elementbox.length;\n }\n }\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n if (inline instanceof BookmarkElementBox) {\n if (this.documentHelper.bookmarks.containsKey(inline.name)) {\n this.documentHelper.bookmarks.remove(inline.name);\n }\n }\n if (inline instanceof ShapeBase && inline.textWrappingStyle !== 'Inline') {\n this.removeAutoShape(inline);\n }\n //clear form field revisions if it is intentionally deleted.\n if (this.skipFieldDeleteTracking && inline.revisions.length > 0) {\n var fieldInline = inline;\n if (fieldInline instanceof FieldElementBox) {\n if (fieldInline.fieldType === 1 || fieldInline.fieldType === 2) {\n fieldInline = fieldInline.fieldBegin;\n }\n this.clearFieldElementRevisions(fieldInline, inline.revisions);\n }\n }\n if (this.canHandleDeletion() || (this.owner.enableTrackChanges && !this.skipTracking() && !this.skipFieldDeleteTracking && !this.isInsertingTOC)) {\n if (!this.skipTableElements) {\n this.addRemovedNodes(inline.clone());\n }\n this.handleDeleteTracking(inline, startOffset, endOffset, i);\n }\n else {\n // if (editAction < 4) {\n if (inline instanceof FootnoteElementBox) {\n inline.isLayout = false;\n }\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n this.addRemovedNodes(inline);\n lineWidget.children.splice(i, 1);\n }\n }\n else if (inline instanceof TextElementBox) {\n var span = this.handleDeleteTracking(inline, startIndex, endIndex);\n //if (editAction < 4) {\n // let span: TextElementBox = new TextElementBox();\n // span.characterFormat.copyFormat(inline.characterFormat);\n // span.text = inline.text.substr(startIndex, endIndex - startIndex);\n // for (let i = inline.revisions.length - 1; i >= 0; i--) {\n // let revision: Revision = inline.revisions[i];\n // let splittedRange: object[] = this.splitRevisionByElement(inline, revision);\n // this.insertRevision(span, revision.revisionType, revision.author, revision.date, splittedRange);\n // }\n // inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n if (!isNullOrUndefined(span)) {\n if (!this.skipTableElements) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n // else {\n // this.insertTextInternal(span.text, false, 'Deletion');\n // this.editorHistory.currentBaseHistoryInfo.revisionToRemove = inline.revisions[inline.revisions.length - 1];\n // // let info: ElementInfo = this.selection.start.currentWidget.getInline(startOffset +1, 0);\n // // let element: ElementBox = info.element.clone();\n // //this.addRemovedNodes(span);\n // }\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n this.documentHelper.layout.clearListElementBox(lineWidget.paragraph);\n }\n };\n /**\n * Deletes comment widgets from comment pane along with history preservation.\n */\n Editor.prototype.deleteCommentWidgetInline = function (inline) {\n // let curentBaseHistoryInfo: BaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n // if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo) {\n // this.initComplexHistory('DeleteCommentInline');\n // }\n // // if (!this.selection.isElementInSelection(inline.comment.commentStart, true)) {\n // // this.removeCommentCharacters.push(inline.comment.commentStart);\n // // }\n // this.deleteCommentWidgetInternal(inline.comment);\n // if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // // let index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // this.editorHistory.currentHistoryInfo.modifiedActions.push(this.editorHistory.currentHistoryInfo.modifiedActions.splice(index, 1)[0]);\n // let lstActionHistoryInfo: HistoryInfo = this.editorHistory.currentHistoryInfo;\n // let frstAction: BaseHistoryInfo = lstActionHistoryInfo.modifiedActions[0];\n // // if (frstAction.action === \"DeleteCommentWidget\" && frstAction.removedNodes[0] instanceof CommentElementBox\n // // && !(frstAction.removedNodes[0] as CommentElementBox).isReply && (lstActionHistoryInfo.modifiedActions[1].action === \"DeleteCommentWidget\")) {\n // // // index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // // this.editorHistory.currentHistoryInfo.modifiedActions.splice(index - 1, 0, this.editorHistory.currentHistoryInfo.modifiedActions.splice(0, 1)[0]);\n // // }\n // }\n // this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n // this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n // this.selection.editPosition = curentBaseHistoryInfo.insertPosition; \n // this.editorHistory.currentHistoryInfo.insertPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.endPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.selectionStart = curentBaseHistoryInfo.selectionStart;\n // this.editorHistory.currentHistoryInfo.selectionEnd = curentBaseHistoryInfo.selectionEnd;\n };\n Editor.prototype.clearFieldElementRevisions = function (inline, revision) {\n var revisions = revision;\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n for (var j = 0; j < currentRevision.range.length; j++) {\n if (currentRevision.range[j] === inline) {\n for (var k = j; k < currentRevision.range.length; k) {\n if (currentRevision.range[j] instanceof FieldElementBox && currentRevision.range[j].fieldType === 1 && currentRevision.range[j].fieldBegin === inline) {\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n break;\n }\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n }\n }\n }\n }\n };\n Editor.prototype.addRemovedRevisionInfo = function (currentElement, spittedElement, removePrevRevisions) {\n for (var i = 0; i < currentElement.revisions.length; i++) {\n var revisionId = currentElement.revisions[i].revisionID;\n if (!isNullOrUndefined(spittedElement)) {\n spittedElement.removedIds.push(revisionId);\n }\n else {\n currentElement.removedIds.push(revisionId);\n }\n }\n if (isNullOrUndefined(spittedElement) && (isNullOrUndefined(removePrevRevisions) || removePrevRevisions)) {\n currentElement.revisions = [];\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * Clone the list level\n *\n * @param {WListLevel} source - Specifies the source\n * @private\n * @returns {WListLevel} - Returns the list level\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n *\n * @param {WListLevel} destination - Specifies the destination\n * @param {WListLevel} listLevel - Specifies the list level\n * @private\n * @returns {void}\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n *\n * @param {WLevelOverride} source @returns {void} - Specifies the level override\n * @private\n * @returns {WLevelOverride} - Returns the level overeide\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphs = function () {\n this.documentHelper.listParagraphs = [];\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var bodyWidget = this.documentHelper.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (block.paragraphFormat.listFormat.listId >= 0) {\n block.paragraphFormat.clearIndent();\n }\n if (isNullOrUndefined(this.documentHelper.listParagraphs)) {\n this.documentHelper.listParagraphs = [];\n }\n this.documentHelper.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n *\n * @param {WList} list - Specifies the list.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.documentHelper.selection;\n this.setOffsetValue(this.documentHelper.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.reLayout(selection);\n };\n /**\n * Applies bullets or numbering list\n *\n * @param {string} format - Specifies the format\n * @param {ListLevelPattern} listLevelPattern - Specifies the list level patterns\n * @param {string} fontFamily - Specifies the font family.\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.documentHelper.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.previousWidget;\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n if (!isUpdate) {\n while (!isNullOrUndefined(currentParagraph.nextWidget) && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.isEmpty() && currentParagraph.nextWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.nextWidget;\n }\n if (currentParagraph.nextWidget && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.nextWidget;\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n }\n var startListLevel = undefined;\n var levelNumber = -1;\n var initialListLevel = undefined;\n var isSameList = false;\n if (currentParagraph.paragraphFormat.listFormat.listId !== -1 && !isNullOrUndefined(currentParagraph.paragraphFormat.listFormat.listLevel)) {\n this.listNumberFormat = currentParagraph.paragraphFormat.listFormat.listLevel.numberFormat;\n this.listLevelPattern = currentParagraph.paragraphFormat.listFormat.listLevel.listLevelPattern;\n this.listLevelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(list)) {\n levelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (levelNumber > 0) {\n initialListLevel = this.documentHelper.layout.getListLevel(tempList, 0);\n isSameList = !isNullOrUndefined(initialListLevel) && levelNumber > 0 && selection.start.isInSameParagraph(selection.end);\n }\n var abstractList = tempList.abstractList;\n if (!abstractList) {\n abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n }\n if (abstractList.levels.length === 0) {\n startListLevel = this.documentHelper.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isUpdate) {\n if (listLevelPattern !== 'Bullet' && startListLevel.listLevelPattern === listLevelPattern\n && (startListLevel.numberFormat === format || startListLevel.numberFormat.indexOf(format) !== -1)) {\n selection.paragraphFormat.listId = list.listId;\n selection.paragraphFormat.listLevelNumber = levelNumber;\n selection.paragraphFormat.setList(list);\n return;\n }\n else {\n startListLevel = abstractList.levels[0];\n }\n }\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && levelNumber === 0\n && ((startListLevel.listLevelPattern !== listLevelPattern) || startListLevel.numberFormat !== format\n || (startListLevel.characterFormat.fontFamily !== fontFamily && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.documentHelper.lists.length > 0) {\n list.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.documentHelper.abstractLists.length > 0) {\n abstractList.abstractListId = this.documentHelper.abstractLists[this.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (isSameList && !isNullOrUndefined(list)) {\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (listLevelPattern === 'Bullet') {\n listLevel.numberFormat = format;\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n else {\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.characterFormat.fontFamily = fontFamily;\n var currentFormat = listLevel.numberFormat.substring(listLevel.numberFormat.length - 1);\n if (listLevel.numberFormat.length !== format.length && levelNumber > 0) {\n listLevel.numberFormat = format;\n }\n else if (format.substring(format.length - 1) !== listLevel.numberFormat.substring(listLevel.numberFormat.length - 1)) {\n listLevel.numberFormat = listLevel.numberFormat.replace(currentFormat, format.substring(format.length - 1));\n }\n }\n selection.paragraphFormat.setList(tempList);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = [String.fromCharCode(61558), String.fromCharCode(61656), String.fromCharCode(61607), String.fromCharCode(61623), String.fromCharCode(61608)];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * Insert page break at cursor position\n *\n * @returns {void}\n */\n Editor.prototype.insertPageBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.documentHelper.selection.start.paragraph.isInsideTable ||\n this.documentHelper.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('PageBreak');\n this.onEnter(true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.selection.checkForCursorVisibility();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onEnter = function (isInsertPageBreak) {\n var selection = this.documentHelper.selection;\n var format;\n if (isNullOrUndefined(selection.start.paragraph.paragraphFormat.baseStyle) ||\n selection.start.paragraph.paragraphFormat.baseStyle.name === 'Normal') {\n format = new SelectionCharacterFormat(undefined);\n format.cloneFormat(this.selection.characterFormat);\n var eleme = selection.start.paragraph.lastChild.children[selection.start.paragraph.lastChild.children.length - 1];\n if (eleme instanceof FootnoteElementBox) {\n format.baselineAlignment = 'Normal';\n }\n }\n if (this.isXmlMapped) {\n return;\n }\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyListInternal(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n var commentStartToInsert = this.checkAndRemoveComments();\n this.initHistory('Enter');\n var isRemoved = true;\n if (!selection.isEmpty) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n if (isInsertPageBreak) {\n var currentParagraph = selection.start.paragraph;\n var breakParagraph = new ParagraphWidget();\n breakParagraph.characterFormat.copyFormat(currentParagraph.characterFormat);\n breakParagraph.paragraphFormat.copyFormat(currentParagraph.paragraphFormat);\n var pageBreak = new TextElementBox();\n pageBreak.text = '\\f';\n var line = new LineWidget(breakParagraph);\n line.children.push(pageBreak);\n pageBreak.line = line;\n breakParagraph.childWidgets.push(line);\n if (this.owner.enableTrackChanges && currentParagraph.characterFormat.revisions.length > 0) {\n var currentRevision = this.retrieveRevisionInOder(currentParagraph.characterFormat);\n currentRevision.range.push(breakParagraph.characterFormat);\n breakParagraph.characterFormat.revisions.push(currentRevision);\n breakParagraph.characterFormat.removedIds = [];\n }\n this.insertParagraph(breakParagraph, true);\n selection.selectParagraphInternal(breakParagraph, true);\n }\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraphInternal(nextNode, true);\n this.updateEndPosition();\n if (isInsertPageBreak && this.editorHistory) {\n this.owner.editorHistory.updateHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n var currentPara = this.selection.start.paragraph.containerWidget.firstChild;\n if (!isNullOrUndefined(currentPara)) {\n currentPara.isChangeDetected = false;\n var nextPara = currentPara.nextRenderedWidget;\n while (this.owner.isSpellCheck && !isNullOrUndefined(nextPara)) {\n currentPara = nextPara;\n currentPara.isChangeDetected = false;\n nextPara = currentPara.nextRenderedWidget;\n }\n }\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n if (!isNullOrUndefined(format) && !isNullOrUndefined(selection.start.paragraph) && selection.start.paragraph.isEmpty()) {\n this.selection.isRetrieveFormatting = true;\n this.selection.characterFormat.cloneFormat(format);\n this.selection.isRetrieveFormatting = false;\n }\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateHistoryForComments(commentStartToInsert);\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var currentPara = paragraphAdv;\n currentPara.isChangeDetected = (offset === 0) ? true : false;\n while (this.owner.isSpellCheck && !isNullOrUndefined(currentPara.nextRenderedWidget)) {\n currentPara = currentPara.nextRenderedWidget;\n currentPara.isChangeDetected = true;\n }\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Cop ies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine)) {\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n if (paragraphAdv.paragraphFormat.baseStyle.name === paragraphAdv.paragraphFormat.baseStyle.next.name) {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n else {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n if (paragraphAdv.lastChild.children.length > 0) {\n paragraphAdv.characterFormat.copyFormat(paragraphAdv.lastChild.children[paragraphAdv.lastChild.children.length - 1].characterFormat);\n }\n // let revisions: Revision[] = [];\n // if (paragraphAdv.characterFormat.revisions.length > 0) {\n // revisions = paragraphAdv.characterFormat.revisions;\n // } else {\n if (this.owner.enableTrackChanges) {\n var lastLine = paragraphAdv.lastChild;\n if (!isNullOrUndefined(lastLine) && lastLine.children.length > 0) {\n var lastElement = lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n //ensure whether para mark can be combined with element revision\n if (!this.checkParaMarkMatchedWithElement(lastElement, paragraphAdv.characterFormat, false, 'Insertion')) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n //}\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n if (offset > 0 || !currentLine.isFirstLine()) {\n paragraphAdv = paragraphAdv.combineWidget(this.owner.viewer);\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n if (this.owner.enableTrackChanges) {\n this.insertParaRevision(paragraph, paragraphAdv.firstChild);\n }\n }\n else {\n var paragraphWidget = paragraphAdv.previousRenderedWidget;\n var isPreviousRevision = false;\n if (!isNullOrUndefined(paragraphWidget) && paragraphWidget instanceof ParagraphWidget) {\n isPreviousRevision = paragraphWidget.characterFormat.revisions.length > 0 ? true : false;\n }\n if (this.owner.enableTrackChanges) {\n if (!isPreviousRevision) {\n var firstLine = paragraphAdv.firstChild;\n var firstElement = firstLine.children[0].previousValidNodeForTracking;\n //ensure whether para mark can be combined with element revision\n if (!isNullOrUndefined(firstElement) && !this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, 'Insertion')) {\n this.insertParaRevision(paragraph);\n }\n else if (isNullOrUndefined(firstElement)) {\n insertIndex++;\n blockIndex++;\n }\n }\n else {\n if (!this.checkToMatchEmptyParaMark(paragraphAdv, paragraph)) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n }\n paragraphAdv = paragraphAdv.getSplitWidgets()[0];\n }\n insertIndex += paragraphAdv.getIndex();\n var container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n if ((!isNullOrUndefined(container.containerWidget) && container.containerWidget instanceof FootNoteWidget) || (container instanceof TableCellWidget && !isNullOrUndefined(container.bodyWidget) && container.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n var height = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n if (container instanceof TableCellWidget) {\n container.bodyWidget.height += height;\n container.bodyWidget.containerWidget.height += height;\n }\n else {\n container.containerWidget.height += height;\n container.height += height;\n }\n }\n if (this.owner.enableTrackChanges && (paragraph.characterFormat.revisions.length === 0 && paragraphAdv.characterFormat.revisions.length === 0)) {\n if (!this.checkToMatchEmptyParaMark(paragraphAdv)) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n Editor.prototype.insertParaRevision = function (paragraph, firstChild) {\n if (this.owner.enableTrackChanges && isNullOrUndefined(firstChild) && !this.isRevisionMatched(paragraph.characterFormat, 'Insertion')) {\n paragraph.characterFormat.revisions = [];\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n }\n //If it is spitted para, we need to ensure whether first element of the spitted para matches with inserted revision\n if (!isNullOrUndefined(firstChild)) {\n if (firstChild.paragraph.isInsideTable) {\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n return;\n }\n this.applyRevisionForParaMark(paragraph, firstChild, 'Insertion', true);\n // let firstElement: ElementBox = firstChild.children[0];\n // firstElement = firstElement.nextValidNodeForTracking;\n // let lastLine: LineWidget = paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n // let isCombined: boolean = false;\n // //Ensure revision matched with inserted para mark\n // if (!isNullOrUndefined(lastElement)) {\n // isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, true);\n // }\n // if (!isNullOrUndefined(firstElement)) {\n // if (paragraph.characterFormat.revisions.length > 0) {\n // if (this.isRevisionMatched(firstElement, 'Insertion')) {\n // let revisionToInclude: Revision = paragraph.characterFormat.revisions[0];\n // let matchedRevisions: Revision[] = this.getMatchedRevisionsToCombine(firstElement.revisions, 'Insertion');\n // for (let i: number = 0; i < matchedRevisions.length; i++) {\n // isCombined = true;\n // this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n // }\n // }\n // } else {\n // isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, false);\n // }\n // }\n // if (!isCombined) {\n // this.insertRevision(paragraph.characterFormat, 'Insertion');\n // }\n }\n };\n Editor.prototype.applyRevisionForParaMark = function (paragraph, firstChild, revisionType, splitRevision) {\n var firstElement = firstChild.children[0];\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n firstElement = firstElement.nextValidNodeForTracking;\n var lastLine = paragraph.lastChild;\n var lastElement = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n var isCombined = false;\n var prevRevCount = paragraph.characterFormat.revisions.length;\n //Ensure revision matched with inserted para mark\n if (!isNullOrUndefined(lastElement)) {\n isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, false, revisionType);\n }\n if (!isNullOrUndefined(firstElement)) {\n //Ensure previous inserted para mark revision matched with first element of the next paragraph.\n if (paragraph.characterFormat.revisions.length > prevRevCount) {\n if (this.isRevisionMatched(firstElement, revisionType)) {\n var revisionToInclude = paragraph.characterFormat.revisions[0];\n var matchedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n for (var i = 0; i < matchedRevisions.length; i++) {\n if (matchedRevisions[i] !== revisionToInclude) {\n isCombined = true;\n this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n }\n }\n }\n }\n else {\n isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, revisionType);\n }\n }\n if (!isCombined && (this.owner.enableTrackChanges || firstChild.paragraph.characterFormat.revisions.length > 0)) {\n this.insertRevision(paragraph.characterFormat, revisionType);\n // for spitted paragraph on moving content we maintain same revision, so if it not matched with inserted paragraph then we need to spit it.\n if (splitRevision && lastElement.revisions.length > 0 && firstElement.revisions.length > 0) {\n this.updateRevisionForSpittedTextElement(lastElement, firstElement);\n }\n }\n };\n //Combines para mark with element revision\n Editor.prototype.checkParaMarkMatchedWithElement = function (lastElement, characterFormat, isBegin, revisionType) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, characterFormat, isBegin);\n return true;\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMark = function (paraWidget, paragraphAdv) {\n var prevPara = paraWidget.previousRenderedWidget;\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Insertion');\n if (matchedRevisions.length > 0) {\n if (!isNullOrUndefined(paragraphAdv)) {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paragraphAdv.characterFormat, false);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, false);\n }\n return true;\n }\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMarkBack = function (paraWidget) {\n var prevPara = paraWidget.nextRenderedWidget;\n var lineWid = prevPara.childWidgets[0];\n var textWid = lineWid.children[0];\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n if (prevPara != undefined && lineWid != undefined && textWid != undefined && textWid.revisions.length == 1) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, true);\n return true;\n }\n }\n }\n else if (textWid != undefined && textWid.revisions.length == 1) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(textWid.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if ((block.containerWidget instanceof BodyWidget && isNullOrUndefined(block.containerWidget.containerWidget)) || (block.containerWidget instanceof BodyWidget && !isNullOrUndefined(block.containerWidget.containerWidget) && !(block.containerWidget.containerWidget instanceof FootNoteWidget))) {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.documentHelper.pages.indexOf(block.containerWidget.page); j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.rowIndex = row.index;\n cell.index = j;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget || block.containerWidget instanceof TextFrame) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n else if (!isNullOrUndefined(block.containerWidget.containerWidget) && (block.containerWidget.containerWidget instanceof FootNoteWidget)) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateEndPosition = function () {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n Editor.prototype.checkAndRemoveComments = function () {\n var selection = this.selection;\n if (selection.isEmpty) {\n return [];\n }\n var initComplexHistory = false;\n var comments = this.getSelectedComments();\n if (comments.commentEndInfo.length > 0 || comments.commentStartInfo.length > 0) {\n if (!initComplexHistory) {\n initComplexHistory = true;\n this.initComplexHistory('RemoveComment');\n }\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n //Get start and end position in order.\n var startBlockInfo = this.selection.getParagraphInfo(startPosition);\n var endBlockInfo = this.selection.getParagraphInfo(endPosition);\n for (var j = 0; j < comments.commentEndInfo.length; j++) {\n var commentToDelete = comments.commentEndInfo[j].comment;\n var commentStart = commentToDelete.commentStart;\n var commentEndMark = commentToDelete.commentEnd;\n var commentStartBlockInfo = this.selection.getParagraphInfoInternal(commentStart.line, commentStart.line.getOffset(commentStart, 0));\n var commentEndBlockInfo = this.selection.getParagraphInfoInternal(commentEndMark.line, commentEndMark.line.getOffset(commentEndMark, 0));\n if (endBlockInfo.paragraph === commentEndBlockInfo.paragraph) {\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentEnd)) {\n endBlockInfo.offset--;\n }\n }\n }\n endBlockInfo.offset--;\n }\n if (startBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n var updateStartPosition = commentStartBlockInfo.offset < startBlockInfo.offset;\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentStart)) {\n var replyCommentStart = this.selection.getParagraphInfoInternal(replyComment.commentStart.line, replyComment.commentStart.line.getOffset(replyComment.commentStart, 0));\n if (replyCommentStart.offset < startBlockInfo.offset) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n }\n }\n if (updateStartPosition) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n this.deleteCommentInternal(commentToDelete);\n }\n if (comments.commentStartInfo.length > 0) {\n for (var k = 0; k < comments.commentStartInfo.length; k++) {\n if (comments.commentStartInfo[k].line.paragraph.equals(endBlockInfo.paragraph)) {\n endBlockInfo.offset--;\n }\n this.removeInline(comments.commentStartInfo[k]);\n }\n }\n var startLineInfo = selection.getLineInfoBasedOnParagraph(startBlockInfo.paragraph, startBlockInfo.offset);\n selection.start.setPositionFromLine(startLineInfo.line, startLineInfo.offset);\n var endLineInfo = selection.getLineInfoBasedOnParagraph(endBlockInfo.paragraph, endBlockInfo.offset);\n selection.end.setPositionFromLine(endLineInfo.line, endLineInfo.offset);\n }\n return comments.commentStartInfo;\n };\n Editor.prototype.updateHistoryForComments = function (removedCommentStart) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && this.editorHistory.currentHistoryInfo.action === 'RemoveComment') {\n if (!isNullOrUndefined(removedCommentStart)) {\n for (var i = 0; i < removedCommentStart.length; i++) {\n this.initInsertInline(removedCommentStart[i], false);\n }\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onBackSpace = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n this.documentHelper.triggerSpellCheck = true;\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n var comments = this.checkAndRemoveComments();\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n this.insertSpaceInFormField();\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n for (var k = 0; k < comments.length; k++) {\n this.initInsertInline(comments[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.triggerSpellCheck = false;\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.insertRemoveBookMarkElements = function () {\n var isHandledComplexHistory = false;\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n if (!this.documentHelper.bookmarks.containsKey(bookMark.name)) {\n this.documentHelper.bookmarks.add(bookMark.name, bookMark);\n }\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkStart.clone());\n if (this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkEnd.clone());\n if (this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isBackSpace - Specifies is backspace.\n * @returns {boolean}\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end);\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n Editor.prototype.removeWholeElement = function (selection) {\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n };\n Editor.prototype.getSelectedComments = function () {\n var comments = this.documentHelper.comments;\n var commentEnds = [];\n var commentStarts = [];\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n var commentEnd = comment.commentEnd;\n var commentStart = comment.commentStart;\n if (!isNullOrUndefined(commentEnd) && this.selection.isElementInSelection(commentEnd, false)) {\n commentEnds.push(commentEnd);\n }\n else if (!isNullOrUndefined(commentStart) && this.selection.isElementInSelection(commentStart, true)) {\n commentStarts.push(commentStart);\n for (var j = 0; j < comment.replyComments.length; j++) {\n if (comment.replyComments[j].commentStart) {\n commentStarts.push(comment.replyComments[j].commentStart);\n }\n }\n }\n }\n return { commentStartInfo: commentStarts, commentEndInfo: commentEnds };\n };\n /**\n * Remove single character on left of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.selection.getParagraphInfo(selection.start);\n var endBlockInfo = this.selection.getParagraphInfo(selection.end);\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.selection.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.selection.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var isCommentDelete = false;\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n var initComplextHistory = false;\n var previousOffset = offset;\n var updateSelection = false;\n while (inline instanceof CommentCharacterElementBox) {\n var commentMark = inline;\n inline = inline.previousNode;\n if (inline) {\n previousOffset = inline.length;\n }\n if (commentMark.commentType === 0 && (isNullOrUndefined(inline) || !(inline instanceof CommentCharacterElementBox))) {\n if (isNullOrUndefined(inline)) {\n inline = commentMark;\n previousOffset = 0;\n }\n else {\n previousOffset = inline.length;\n }\n updateSelection = true;\n break;\n }\n else if (commentMark.commentType === 1) {\n if (!initComplextHistory) {\n this.initComplexHistory('RemoveComment');\n initComplextHistory = true;\n }\n this.deleteCommentInternal(commentMark.comment);\n updateSelection = true;\n }\n }\n if (updateSelection) {\n //When paragraph has only comment end mark, there will be no previous inline and comment end mark will be delete\n //And paragraph will become empty paragraph.\n //So handled special case to update selection.\n if (isNullOrUndefined(inline)) {\n var lineWidget = paragraph.childWidgets[0];\n selection.start.setPositionParagraph(lineWidget, 0);\n selection.end.setPositionParagraph(lineWidget, 0);\n }\n else {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, previousOffset);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n }\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (resultText.length === 1) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n }\n indexInInline = inlineObj.index;\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n if (begin.nextNode instanceof BookmarkElementBox) {\n end = begin.nextNode.reference;\n }\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (inline && (inline instanceof ContentControl || inline.previousNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.previousNode && !(inline.previousElement instanceof ListTextElementBox)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n var start = inline.previousNode;\n var end = inline.nextNode;\n if (!start.contentControlProperties.lockContentControl) {\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox || inline.previousNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n if (inline.previousNode) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n else {\n // remove paragraph mark and move bookmark to previous paragraph\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = paragraph.previousRenderedWidget;\n var line = prevParagraph.lastChild;\n selection.start.setPositionParagraph(inline.line, inline.line.getOffset(inline, 0));\n selection.end.setPositionParagraph(line, line.getEndOffset());\n this.removeWholeElement(selection);\n return;\n }\n }\n // Remove bookmark if selection is in between bookmark start and end element.\n }\n else if (inline.nextNode instanceof BookmarkElementBox && inline instanceof BookmarkElementBox &&\n inline.bookmarkType === 0 && inline.reference === inline.nextNode) {\n this.deleteBookmark(inline.name);\n return;\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n // if (inline instanceof CommentCharacterElementBox && inline.commentType === 1) {\n // let comment: CommentElementBox = inline.comment;\n // if (comment.isReply) {\n // comment = comment.ownerComment;\n // }\n // while (inline instanceof CommentCharacterElementBox) {\n // inline = inline.previousNode;\n // }\n // this.deleteCommentInternal(comment);\n // paragraph = inline.line.paragraph;\n // offset = inline.line.getOffset(inline, inline.length);\n // selection.start.setPositionParagraph(inline.line, offset);\n // selection.end.setPositionParagraph(inline.line, offset);\n // isCommentDelete = true;\n // }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !this.selection.isInlineFormFillMode()) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline.nextNode instanceof BookmarkElementBox) {\n var start = inline.nextNode.reference;\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n }\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (inline instanceof EditRangeStartElementBox && !(inline.previousNode instanceof EditRangeEndElementBox)) {\n return;\n }\n if (inline instanceof EditRangeEndElementBox) {\n if (!isNullOrUndefined(inline.previousNode)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var start = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (!paragraph.paragraphFormat.bidi && paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.documentHelper.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (this.owner.enableTrackChanges && paragraph.previousRenderedWidget != undefined && paragraph.previousRenderedWidget.characterFormat.revisions.length == 0) {\n if (!this.checkToMatchEmptyParaMarkBack(previousParagraph)) {\n this.insertRevision(previousParagraph.characterFormat, 'Deletion');\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n }\n else if (previousParagraph.isEmpty() && !this.owner.enableTrackChanges) {\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n }\n else if (this.owner.enableTrackChanges && previousParagraph.characterFormat.revisions != undefined && previousParagraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(paragraph, false, true);\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if ((!paragraph.isEmpty() && !this.owner.enableTrackChanges) || (!paragraph.isEmpty() && paragraph.childWidgets[0].children[0] instanceof EditRangeEndElementBox)) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n for (var j = 0; j < lineWidget.children.length; j++) {\n if (lineWidget.children[j] instanceof FootnoteElementBox) {\n var index = this.documentHelper.footnoteCollection.indexOf(lineWidget.children[j]);\n if (index === -1) {\n lineWidget.children[j].isLayout = false;\n var indexcolle = parseInt(lineWidget.children[j].text);\n this.documentHelper.footnoteCollection.splice(indexcolle - 1, 0, lineWidget.children[j]);\n // this.documentHelper.footnoteCollection.push(lineWidget.children[j] as FootnoteElementBox);\n }\n }\n }\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n this.setPositionForHistory();\n var footNoteWidgets = this.documentHelper.layout.getFootNoteWidgetsOf(paragraph);\n if (footNoteWidgets.length > 0) {\n var layout = this.documentHelper.layout;\n var bodyWidget = paragraph.bodyWidget;\n layout.layoutfootNote(bodyWidget.page.footnoteWidget);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.documentHelper.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n if (isCommentDelete) {\n this.owner.editorHistory.undoStack[this.owner.editorHistory.undoStack.length - 2].modifiedActions.push(this.owner.editorHistory.undoStack[this.owner.editorHistory.undoStack.length - 1]);\n this.owner.editorHistory.undoStack.splice(this.owner.editorHistory.undoStack.length - 1, 1);\n isCommentDelete = false;\n }\n }\n else {\n this.fireContentChange();\n }\n }\n if (initComplextHistory && this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n var childLength = lineWidget.children.length;\n for (var i = 0; i < childLength; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n var isBreak = this.removeCharacter(inline, offset, count, lineWidget, lineIndex, i);\n if (isBreak) {\n break;\n }\n count += inline.length;\n }\n };\n Editor.prototype.removeCharacter = function (inline, offset, count, lineWidget, lineIndex, i, isRearrange) {\n var isBreak = false;\n if (inline instanceof BookmarkElementBox && inline.line !== inline.reference.line && !(lineWidget.children[i] instanceof BookmarkElementBox)) {\n if (!isNullOrUndefined(inline.line.previousLine)) {\n inline.line.previousLine.children.splice(inline.line.previousLine.children.length, 0, inline);\n inline.line = inline.line.previousLine;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.previousRenderedWidget)) {\n inline.line.paragraph.previousRenderedWidget.lastChild.children.splice(inline.line.paragraph.previousRenderedWidget.lastChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.previousRenderedWidget.lastChild;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.nextRenderedWidget)) {\n inline.line.paragraph.nextRenderedWidget.firstChild.children.splice(inline.line.paragraph.nextRenderedWidget.firstChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.nextRenderedWidget.firstChild;\n }\n lineWidget.children.splice(i, 1);\n return true;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n inline.ischangeDetected = true;\n if (this.owner.isSpellCheck) {\n this.owner.spellChecker.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n }\n if (!inline.canTrigger) {\n this.documentHelper.triggerSpellCheck = false;\n }\n if (offset === count && inline.length === 1) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.addRemovedNodes(inline.clone());\n this.handleDeleteTracking(inline, indexInInline, 1, i);\n }\n else {\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n this.addRemovedNodes(inline);\n lineWidget.children.splice(i, 1);\n }\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n }\n else {\n var span = this.handleDeleteTracking(inline, indexInInline, 1);\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n if (!isNullOrUndefined(span)) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n isBreak = true;\n }\n return isBreak;\n };\n Editor.prototype.removeCharacterInLine = function (inline, indexInInline, endOffset) {\n var span = new TextElementBox();\n if (inline instanceof TextElementBox) {\n span.characterFormat.copyFormat(inline.characterFormat);\n var removedCount = (endOffset === 1) ? 1 : (endOffset - indexInInline);\n span.text = inline.text.substr(indexInInline, removedCount);\n var text = inline.text;\n inline.text = text.substring(0, indexInInline) + text.substring(indexInInline + removedCount, text.length);\n if (inline.contentControlProperties) {\n span.contentControlProperties = inline.contentControlProperties.clone();\n }\n }\n return span;\n };\n Editor.prototype.removeRevisionsInformation = function (elementBox, indexInInline, endOffset, elementIndex) {\n var removeElement = elementBox.previousElement;\n var revision;\n revision = this.retrieveRevisionInOder(removeElement);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(removeElement, undefined)) {\n elementBox.line.children.splice(elementIndex, 1);\n }\n }\n };\n Editor.prototype.handleDeleteTracking = function (elementBox, indexInInline, endOffset, elementIndex, startIndex, endIndex) {\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isUndoing = isNullOrUndefined(this.editorHistory) ? false : (this.editorHistory.isUndoing || this.editorHistory.isRedoing);\n var removedNode = undefined;\n if (this.canHandleDeletion() || (isTrackingEnabled && !this.skipTracking())) {\n if (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox) {\n if (elementBox instanceof BookmarkElementBox && elementBox.previousElement instanceof FieldElementBox && elementBox.previousElement.formFieldData) {\n if (elementBox.previousElement.revisions.length > 0) {\n this.removeRevisionsInformation(elementBox, indexInInline, endOffset, elementIndex);\n }\n }\n else {\n elementBox.line.children.splice(elementBox.indexInOwner, 1);\n }\n return undefined;\n }\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n if (!this.skipTableElements) {\n this.updateEndRevisionIndex();\n }\n if (elementBox.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(elementBox);\n var index = this.owner.revisions.changes.indexOf(revision);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(elementBox, undefined)) {\n // inserted revision same author as delete revision so we can delete\n if (isNullOrUndefined(elementIndex)) {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n }\n else {\n var index_1 = revision.range.indexOf(elementBox);\n revision.range.splice(index_1, 1);\n if (revision.range.length === 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n this.unLinkFieldCharacter(elementBox);\n elementBox.line.children.splice(elementIndex, 1);\n }\n }\n else {\n //Insert revision and delete revision (which is to be included) haven't matched\n if (isNullOrUndefined(elementIndex)) {\n var text = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n if (indexInInline === 0) {\n var prevElement = elementBox.previousElement;\n this.handleDeletionForInsertRevision(prevElement, elementBox, text, endOffset, indexInInline, true);\n }\n else if (elementBox.length !== indexInInline) {\n for (var i = elementBox.revisions.length - 1; i >= 0; i--) {\n var revision_2 = elementBox.revisions[i];\n var index_2 = revision_2.range.indexOf(elementBox);\n var newElement = new TextElementBox();\n newElement.characterFormat.copyFormat(elementBox.characterFormat);\n newElement.line = elementBox.line;\n newElement.text = elementBox.text.substr(indexInInline);\n newElement.revisions.splice(0, 0, revision_2);\n revision_2.range.splice(index_2 + 1, 0, newElement);\n text.revisions.splice(0, 0, revision_2);\n text.line = elementBox.line;\n revision_2.range.splice(index_2 + 1, 0, text);\n elementBox.text = elementBox.text.substr(0, indexInInline);\n var indexInOwner = elementBox.indexInOwner;\n elementBox.line.children.splice(indexInOwner + 1, 0, newElement);\n elementBox.line.children.splice(indexInOwner + 1, 0, text);\n this.addRemovedNodes(text.clone());\n this.insertRevision(text, 'Deletion');\n this.updateLastElementRevision(text);\n }\n }\n else if (elementBox.length === indexInInline) {\n var nextElement = elementBox.nextElement;\n this.handleDeletionForInsertRevision(nextElement, elementBox, text, endOffset, indexInInline, false);\n }\n else {\n if (endOffset === 1) {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n this.addRemovedNodes(text.clone());\n this.insertInlineInternal(text, 'Deletion');\n }\n }\n else if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.updateLastElementRevision(elementBox);\n }\n }\n }\n else if (revision.revisionType === 'Deletion') {\n if (index !== -1 && revision.author !== this.owner.currentUser) {\n var range = revision.range;\n var startOff = range[0].line.getOffset(range[0], 0);\n var lastEle = range[range.length - 1];\n var endOff = lastEle.line.getOffset(lastEle, lastEle.length);\n if (startOff === indexInInline && endOff === endOffset) {\n elementBox.revisions.splice(elementBox.revisions.indexOf(revision), 1);\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n if (elementBox.line.getOffset(elementBox, 0) === startOff) {\n this.owner.revisions.changes.splice(index, 1);\n }\n }\n }\n if (endOffset === 1) {\n if (isDelete) {\n this.selection.start.moveNextPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n if (this.isRevisionMatched(elementBox, 'Deletion')) {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n else {\n var rangeIndex = revision.range.indexOf(elementBox);\n var endOff = elementBox.line.getOffset(elementBox, elementBox.length);\n if (endOff >= endOffset && (revision.range.length > (rangeIndex + 1))) {\n this.updateRevisionForSpittedTextElement(elementBox, revision.range[(rangeIndex + 1)]);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n }\n else if (revision.range.length === 1 || indexInInline === 0) {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n if (rangeIndex !== -1 && revision.range.length !== 1) {\n this.updateRevisionForSpittedTextElement(revision.range[(rangeIndex - 1)], revision.range[rangeIndex]);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n }\n }\n else {\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n }\n }\n }\n this.updateLastElementRevision(elementBox);\n }\n }\n else {\n //No revision information in the element\n if (!isNullOrUndefined(elementIndex)) {\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n }\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n }\n }\n }\n else {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n }\n return removedNode;\n };\n Editor.prototype.toCombineOrInsertRevision = function (elementBox, type) {\n if (!this.checkToCombineRevisionsInSides(elementBox, type)) {\n this.insertRevision(elementBox, type);\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n };\n Editor.prototype.updateLastElementRevision = function (elementBox) {\n if (!this.skipTableElements) {\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.skipReplace && (!isNullOrUndefined(this.owner.search) ? !this.owner.search.isRepalceTracking : true)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.lastElementRevision)) {\n this.editorHistory.currentBaseHistoryInfo.lastElementRevision = elementBox;\n elementBox.isMarkedForRevision = true;\n }\n }\n }\n };\n Editor.prototype.updateEndRevisionIndex = function () {\n if (!isNullOrUndefined(this.editorHistory.undoStack) && this.editorHistory.undoStack.length > 0) {\n var prevHistoryInfo = this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1];\n if (prevHistoryInfo.lastElementRevision && isNullOrUndefined(prevHistoryInfo.endRevisionLogicalIndex)) {\n prevHistoryInfo.updateEndRevisionInfo();\n }\n }\n };\n Editor.prototype.retrieveRevisionInOder = function (elementBox) {\n if (elementBox.revisions.length === 1) {\n return elementBox.revisions[0];\n }\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === 'Deletion') {\n return elementBox.revisions[i];\n }\n }\n return elementBox.revisions[elementBox.revisions.length - 1];\n };\n Editor.prototype.handleDeletionForInsertRevision = function (elementToEnsure, currentElement, spittedSpan, endOffset, indexInInline, isBegin) {\n if (!isNullOrUndefined(elementToEnsure) && currentElement.revisions.length === 0 && this.isRevisionMatched(elementToEnsure, 'Deletion')) {\n this.addRemovedNodes(spittedSpan.clone());\n this.insertTextInline(elementToEnsure, this.selection, spittedSpan.text, 0);\n }\n else {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var index = revision.range.indexOf(currentElement);\n revision.range.splice((isBegin) ? index : index + 1, 0, spittedSpan);\n spittedSpan.revisions.splice(0, 0, revision);\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n if (endOffset === 1 && !isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.updateCursorForInsertRevision(currentElement, indexInInline, endOffset);\n }\n this.addRemovedNodes(spittedSpan.clone());\n this.insertInlineInternal(spittedSpan, 'Deletion');\n }\n };\n Editor.prototype.handleDeleteBySplitting = function (elementBox, indexInInline, endOffset) {\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n //Update cursor position to insert removed content\n if (endOffset === 1) {\n var startPosition = elementBox.line.getOffset(elementBox, 0);\n if (startPosition > 0) {\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionForLineWidget(elementBox.line, startPosition + indexInInline);\n this.selection.start.setPositionInternal(currentPosition);\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n var spittedElement = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n this.addRemovedNodes(spittedElement.clone());\n this.insertTextInternal(spittedElement.text, false, 'Deletion');\n };\n Editor.prototype.updateCursorForInsertRevision = function (inline, startOffset, endOffset) {\n var startPosition = inline.line.getOffset(inline, 0);\n if (startPosition > 0) {\n startOffset = startPosition + startOffset;\n endOffset = startPosition + endOffset;\n }\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionFromLine(inline.line, startOffset);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionFromLine(inline.line, endOffset);\n if (!currentPosition.isExistBefore(endPosition)) {\n this.selection.start.setPositionInternal(endPosition);\n this.selection.end.setPositionInternal(endPosition);\n }\n else {\n this.selection.end.setPositionInternal(currentPosition);\n this.selection.start.setPositionInternal(currentPosition);\n }\n };\n Editor.prototype.checkToCombineRevisionsInSides = function (currentElement, revisionType) {\n var prevElement = currentElement.previousNode;\n var nextElement = currentElement.nextNode;\n var isCombined = false;\n if (!isNullOrUndefined(prevElement)) {\n prevElement = prevElement.previousValidNodeForTracking;\n if (!isNullOrUndefined(prevElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, prevElement, currentElement, false);\n isCombined = true;\n }\n }\n }\n if (!isNullOrUndefined(nextElement)) {\n nextElement = nextElement.nextValidNodeForTracking;\n if (!isNullOrUndefined(nextElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(nextElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n if (isCombined) {\n this.combineElementRevision(currentElement.revisions, nextElement.revisions);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, nextElement, currentElement, true);\n }\n isCombined = true;\n }\n }\n }\n return isCombined;\n };\n /**\n * Remove the current selected content or one character right of cursor.\n *\n * @returns {void}\n */\n Editor.prototype.delete = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n var commentStarts = this.checkAndRemoveComments();\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.insertSpaceInFormField();\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n for (var k = 0; k < commentStarts.length; k++) {\n this.initInsertInline(commentStarts[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n Editor.prototype.deleteEditElement = function (selection) {\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n };\n Editor.prototype.removeContentControlMark = function (start, end) {\n if (!start.contentControlProperties.lockContentControl) {\n this.selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n this.selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.deleteEditElement(this.selection);\n return true;\n }\n return false;\n };\n /**\n * Remove single character on right of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n var lineWidget = selection.start.currentWidget;\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = lineWidget.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (!(inline instanceof TextElementBox)) {\n inline = inline.nextElement;\n }\n if (resultText.length === 1 && inline instanceof TextElementBox) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n else {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n }\n }\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n if (inline instanceof FieldElementBox && inline.fieldType === 1 &&\n !isNullOrUndefined(inline.fieldBegin.formFieldData)) {\n return;\n }\n if (inline instanceof FootnoteElementBox) {\n return;\n }\n indexInInline = 0;\n }\n var updateSelection = inline instanceof CommentCharacterElementBox;\n //Skip removing comment start/end mark on delete key\n while (inline instanceof CommentCharacterElementBox) {\n if (inline.nextNode) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n else {\n indexInInline = 1;\n break;\n }\n }\n if (updateSelection) {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, indexInInline);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) { //Selects the entire field.\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) { //Updates the offset to delete next content. \n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (this.documentHelper.isDocumentProtected &&\n this.documentHelper.protectionType === 'ReadOnly') {\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n return;\n }\n }\n else {\n if (inline instanceof EditRangeStartElementBox) {\n inline = inline.nextNode;\n offset = inline.line.getOffset(inline, 0);\n paragraph = inline.line.paragraph;\n }\n else if (inline instanceof EditRangeEndElementBox) {\n offset++;\n }\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var editStart = inline.previousNode;\n var editEnd = inline.nextNode;\n selection.start.setPositionParagraph(editStart.line, editStart.line.getOffset(editStart, 0));\n selection.end.setPositionParagraph(editEnd.line, editEnd.line.getOffset(editEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n }\n if (inline && (inline instanceof ContentControl || inline.nextNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.nextNode) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n // Move cursor inbetween content control\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n return;\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n if (this.removeContentControlMark(inline.previousNode, inline.nextNode)) {\n return;\n }\n }\n // Remove content if content control is empty\n if (inline instanceof ContentControl && inline.previousNode instanceof ContentControl\n && inline.previousNode.reference === inline) {\n // Remove content control if there is no element presen in between start and end mark.\n if (this.removeContentControlMark(inline.previousNode, inline)) {\n return;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline.nextNode && inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n if (inline instanceof BookmarkElementBox) {\n offset = inline.line.getOffset(inline, 1);\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.documentHelper.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof FootNoteWidget) {\n return;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n if (paragraph.isEndsWithPageBreak) {\n var lastLine = paragraph.lastChild;\n var lastChild = lastLine.children[lastLine.children.length - 1];\n this.selection.start.setPositionForSelection(lastLine, lastChild, 0, this.selection.start.location);\n }\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removePrevParaMarkRevision(paragraph, true);\n this.removeBlock(paragraph, false, true);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraphInternal(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraphInternal(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraphInternal(nextParagraph, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.removePrevParaMarkRevision(currentParagraph, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n if (this.owner.enableTrackChanges && !isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Delete' && lineLength !== selection.getLineLength(selection.start.currentWidget)) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n else if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + 1, false);\n }\n else {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction, handleParaMark) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // } \n var offset = 0;\n this.removeBlock(paragraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.owner.viewer);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n var canRemoveParaMark = (!isNullOrUndefined(handleParaMark) && handleParaMark) ? this.handleDeleteParaMark(paragraph, nextPara[0]) : true;\n if (canRemoveParaMark) {\n var prevLastLineIndex = paragraph.childWidgets.length - 1;\n var elementIndex = paragraph.childWidgets[prevLastLineIndex].children.length - 1;\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline = nextParagraph.childWidgets[i];\n if (nextParagraph.characterFormat.revisions.length > 0) {\n for (var i_2 = 0; i_2 < nextParagraph.characterFormat.revisions.length; i_2++) {\n for (var j = 0; j < nextParagraph.characterFormat.revisions[i_2].range.length; j++) {\n nextParagraph.characterFormat.revisions[i_2].range[j].ownerBase = paragraph;\n }\n paragraph.characterFormat.revisions.push(nextParagraph.characterFormat.revisions[i_2]);\n }\n }\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline);\n inline.paragraph = paragraph;\n i--;\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.removeBlock(nextParagraph);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n //this.combineRevisionOnDeleteParaMark(paragraph, prevLastLineIndex, elementIndex);\n this.addRemovedNodes(nextParagraph);\n }\n }\n }\n };\n Editor.prototype.handleDeleteParaMark = function (currentPara, nextPara) {\n if (!this.owner.enableTrackChanges && currentPara.characterFormat.revisions.length > 0) {\n // If tracking disabled and revision exists then remove revision from character format\n for (var i = 0; i < currentPara.characterFormat.revisions.length; i++) {\n var currentRevision = currentPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(currentPara.characterFormat);\n currentRevision.range.splice(rangeIndex, 1);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n return true;\n }\n }\n if (this.owner.enableTrackChanges) {\n var canRemoveParaMark = false;\n if (currentPara.characterFormat.revisions.length > 0) {\n var deleteRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Deletion');\n if (!isNullOrUndefined(deleteRevision) && this.isRevisionMatched(deleteRevision, 'Deletion')) {\n var revisionIndex = currentPara.characterFormat.revisions.indexOf(deleteRevision);\n currentPara.characterFormat.revisions.splice(revisionIndex, 1);\n deleteRevision.range.splice(deleteRevision.range.indexOf(currentPara.characterFormat), 1);\n if (deleteRevision.range.length === 0) {\n this.owner.revisions.remove(deleteRevision);\n }\n canRemoveParaMark = true;\n }\n var insertRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Insertion');\n if (!isNullOrUndefined(insertRevision) && this.isRevisionMatched(currentPara.characterFormat, 'Insertion')) {\n var rangeIndex = insertRevision.range.indexOf(currentPara.characterFormat);\n insertRevision.range.splice(rangeIndex, 1);\n if (insertRevision.range.length === 0) {\n this.owner.revisions.remove(insertRevision);\n }\n canRemoveParaMark = true;\n }\n if (canRemoveParaMark) {\n return true;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n }\n return false;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n return false;\n }\n }\n return true;\n };\n Editor.prototype.insertDeleteParaMarkRevision = function (currentPara, nextPara) {\n var lastLine = currentPara.lastChild;\n var lastElement = lastLine.children.length > 0 ? lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking : undefined;\n if (!isNullOrUndefined(lastElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, currentPara.characterFormat, false);\n }\n }\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0].nextValidNodeForTracking;\n };\n Editor.prototype.retrieveRevisionByType = function (item, revisionToRetrieve) {\n for (var i = 0; i < item.revisions.length; i++) {\n if (item.revisions[i].revisionType === revisionToRetrieve) {\n return item.revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.combineRevisionOnDeleteParaMark = function (paragraph, lineIndex, elementIndex) {\n var lastLine = paragraph.childWidgets[lineIndex];\n var lastElement = lastLine.children[elementIndex];\n var firstElement = lastElement.nextNode;\n firstElement = firstElement.nextValidNodeForTracking;\n lastElement = lastElement.nextValidNodeForTracking;\n if (firstElement.revisions.length > 0 && lastElement.revisions.length > 0) {\n this.combineElementRevisions(lastElement, firstElement);\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.documentHelper.selection.editPosition === this.selection.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n this.documentHelper.selection.editPosition = this.selection.getHierarchicalIndex(currentParagraph, this.documentHelper.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.documentHelper.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n /**\n * deleteSelectedContentInternal\n * @private\n */\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.documentHelper.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n *\n * @private\n * @param {string} base64String Base64 string, web URL or file URL.\n * @param {number} width Image width\n * @param {number} height Image height\n * @returns {void}\n */\n Editor.prototype.insertPicture = function (base64String, width, height, isUiInteracted) {\n var imageElementBox = new ImageElementBox(true);\n if (HelperMethods.formatClippedString(base64String).extension === '.svg') {\n imageElementBox.metaFileImageString = base64String;\n imageElementBox.isMetaFile = true;\n this.generateFallBackImage(base64String, width, height, imageElementBox);\n }\n else {\n imageElementBox.imageString = base64String;\n }\n imageElementBox.width = width;\n imageElementBox.height = height;\n imageElementBox.textWrappingStyle = 'Inline';\n this.insertPictureInternal(imageElementBox, isUiInteracted);\n };\n Editor.prototype.generateFallBackImage = function (base64String, width, height, imageElementBox) {\n var drawImage = new Image();\n drawImage.onload = function () {\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n var draw = document.createElement('canvas');\n draw.width = width * displayPixelRatio;\n draw.height = height * displayPixelRatio;\n var context = draw.getContext('2d');\n context.scale(displayPixelRatio, displayPixelRatio);\n context.drawImage(drawImage, 0, 0, width, height);\n imageElementBox.imageString = draw.toDataURL('image/png', 1);\n };\n drawImage.src = base64String;\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox, isUiInteracted) {\n var selection = this.documentHelper.selection;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initHistory('InsertInline');\n if (isUiInteracted) {\n this.fitImageToPage(selection, imageElementBox);\n }\n this.insertInlineInSelection(selection, imageElementBox);\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageWidth = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n //Resizes image to page size.\n if (imageElementBox.width > pageWidth) {\n imageElementBox.height = imageElementBox.height * pageWidth / imageElementBox.width;\n imageElementBox.width = pageWidth;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @param {selection} Selection context.\n * @param {elementBox} Elementbox\n * @param selection\n * @param elementBox\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.documentHelper.selection.sectionFormat.bottomMargin;\n format.topMargin = this.documentHelper.selection.sectionFormat.topMargin;\n format.leftMargin = this.documentHelper.selection.sectionFormat.leftMargin;\n format.rightMargin = this.documentHelper.selection.sectionFormat.rightMargin;\n format.pageHeight = this.documentHelper.selection.sectionFormat.pageHeight;\n format.pageWidth = this.documentHelper.selection.sectionFormat.pageWidth;\n format.footerDistance = this.documentHelper.selection.sectionFormat.footerDistance;\n format.headerDistance = this.documentHelper.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 791.9;\n }\n else {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 1223.9;\n }\n else {\n sectionFormat.pageWidth = 1223.9;\n sectionFormat.pageHeight = 791.9;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 1007.9;\n }\n else {\n sectionFormat.pageWidth = 1007.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 611.9;\n }\n else {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 521.9;\n sectionFormat.pageHeight = 755.9;\n }\n else {\n sectionFormat.pageWidth = 755.9;\n sectionFormat.pageHeight = 521.9;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 1190.4;\n }\n else {\n sectionFormat.pageWidth = 1190.4;\n sectionFormat.pageHeight = 841.8;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 841.8;\n }\n else {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 595.2;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.5;\n sectionFormat.pageHeight = 595.2;\n }\n else {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 419.5;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 1031.7;\n }\n else {\n sectionFormat.pageWidth = 1031.7;\n sectionFormat.pageHeight = 728.4;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.8;\n sectionFormat.pageHeight = 728.4;\n }\n else {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 515.8;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @param blockAdv\n * @param updateNextBlockList\n * @param blockAdv\n * @param updateNextBlockList\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.documentHelper.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block) && !this.documentHelper.isTextInput) {\n //Updates the list value of the rendered paragraph.\n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateWholeListItems = function (block, isFindingListParagraph, listID) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n currentBlock = this.getNextBlockForList(page.bodyWidgets[0].firstChild);\n if (!isNullOrUndefined(currentBlock)) {\n break;\n }\n }\n }\n var isListUpdated = false;\n do {\n var listSearchResultInfo = null;\n if (isFindingListParagraph) {\n listSearchResultInfo = { paragraph: null, listId: listID };\n }\n isListUpdated = this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (isListUpdated) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n if (listSearchResultInfo.paragraph == block) {\n return null;\n }\n else {\n return listSearchResultInfo.paragraph;\n }\n }\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (!isNullOrUndefined(currentBlock)) {\n currentBlock = this.getNextBlockForList(currentBlock);\n }\n } while (currentBlock);\n return null;\n };\n Editor.prototype.getNextBlockForList = function (currentBlock) {\n if (currentBlock instanceof ParagraphWidget &&\n this.documentHelper.layout.isFirstElementWithPageBreak(currentBlock)) {\n var nextBlock = currentBlock.nextRenderedWidget;\n if (!isNullOrUndefined(nextBlock) && nextBlock.equals(currentBlock)) {\n return nextBlock;\n }\n }\n return currentBlock;\n };\n Editor.prototype.updateListItems = function (blockAdv, block, listSearchResultInfo) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block, listSearchResultInfo);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block, listSearchResultInfo);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block, listSearchResultInfo);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block.isInsideTable && row.childWidgets.indexOf(this.documentHelper.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n return true;\n }\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block, listSearchResultInfo) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block, listSearchResultInfo) {\n if (paragraph.equals(block)) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n listSearchResultInfo.paragraph = paragraph;\n }\n return true;\n }\n else {\n var currentList = undefined;\n var levelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n if (!isNullOrUndefined(listSearchResultInfo) && paragraph.paragraphFormat.listFormat.listId === listSearchResultInfo.listId) {\n listSearchResultInfo.paragraph = paragraph;\n return true;\n }\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n levelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[levelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, levelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, false);\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, true);\n }\n }\n };\n Editor.prototype.updateListNumber = function (currentListLevel, paragraph, isUpdate) {\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n var listWholeWidth = void 0;\n if (!isNullOrUndefined(element) && element.nextElement instanceof ListTextElementBox) {\n listWholeWidth = element.width + element.nextElement.width;\n }\n if (!isNullOrUndefined(element) && element instanceof ListTextElementBox) {\n var text = this.documentHelper.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n if (isUpdate) {\n var prevWidth = element.width;\n element.text = text;\n var currentWidth = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n if (currentWidth > prevWidth) {\n element.width = currentWidth;\n }\n if (!isNullOrUndefined(listWholeWidth) && element.width < listWholeWidth) {\n element.nextElement.width = (listWholeWidth - element.width);\n }\n }\n }\n }\n };\n /**\n * Get offset value to update in selection\n *\n * @param selection\n * @private\n * @returns {void}\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.documentHelper.selection;\n var lineInfo = selection.getLineInfoBasedOnParagraph(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @param textPosition\n * @param editPosition\n * @param textPosition\n * @param editPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.selection.getParagraph({ index: editPosition });\n var lineInfo = this.selection.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * Insert page number in the current cursor position.\n *\n * @param {string} numberFormat - Optional switch that overrides the numeral style of the page number.\n * @returns {void}\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @param numberFormat\n * @private\n * @returns {void}\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets.push(paragraph);\n this.pasteContentsInternal([bodyWidget], false);\n };\n /**\n * Insert Bookmark at current selection range\n *\n * @param {string} name - Name of bookmark\n * @returns {void}\n */\n Editor.prototype.insertBookmark = function (name) {\n if (this.documentHelper.bookmarks.containsKey(name)) {\n var existingBookmark = this.documentHelper.bookmarks.get(name);\n existingBookmark.line.children.splice(existingBookmark.line.children.indexOf(existingBookmark), 1);\n /* eslint-disable-next-line max-len */\n existingBookmark.reference.line.children.splice(existingBookmark.reference.line.children.indexOf(existingBookmark.reference), 1);\n this.documentHelper.bookmarks.remove(name);\n }\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n this.initComplexHistory('InsertBookmark');\n this.insertElements([bookmarkEnd], [bookmark]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.documentHelper.bookmarks.add(name, bookmark);\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, 0, this.selection.end.location);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * Deletes specific bookmark\n *\n * @param {string} bookmarkName - Name of bookmark to delete.\n * @returns {void}\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.documentHelper.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n this.initHistory('DeleteBookmark');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n this.editorHistory.updateHistory();\n }\n this.deleteBookmarkInternal(bookmark);\n }\n this.fireContentChange();\n };\n /**\n * @param bookmark\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = '';\n }\n this.documentHelper.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n if (!isNullOrUndefined(bookmark.reference)) {\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n }\n // Remove bookmark from header footer collections\n var paragraph = bookmark.line.paragraph;\n if (bookmark.line.paragraph.isInHeaderFooter) {\n var headerFooterWidget = undefined;\n if (paragraph.containerWidget instanceof TableCellWidget) {\n headerFooterWidget = paragraph.containerWidget.getContainerTable().containerWidget;\n }\n else if (paragraph.containerWidget instanceof HeaderFooterWidget) {\n headerFooterWidget = paragraph.containerWidget;\n }\n this.updateHeaderFooterWidget(headerFooterWidget);\n }\n };\n Editor.prototype.getSelectionInfo = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!(end.offset === this.selection.getLineLength(end.currentWidget) + 1\n && this.selection.isParagraphLastLine(end.currentWidget))) {\n end.offset += 1;\n }\n var blockInfo = this.selection.getParagraphInfo(start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.selection.getParagraphInfo(end);\n var endIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n return { 'start': startIndex, 'end': endIndex };\n };\n Editor.prototype.insertElements = function (endElements, startElements) {\n var info = this.getSelectionInfo();\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.start), startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.end), endElements);\n }\n };\n Editor.prototype.insertElementsInternal = function (position, elements, isRelayout) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n this.updateInsertPosition();\n var indexInInline = 0;\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n if (this.selection.start.paragraph.isEmpty()) {\n var paragraph = this.selection.start.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n elements[0].linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n position.setPositionForSelection(elements[0].line, elements[0], elements[0].length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n else {\n var inlineObj = this.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, undefined, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @param index\n * @private\n * @returns {CommentElementBox}\n */\n Editor.prototype.getCommentElementBox = function (index) {\n var position = index.split(';');\n var comment = this.documentHelper.comments[parseInt(position[1], 10)];\n if (position.length > 2 && position[2] !== '') {\n return comment.replyComments[parseInt(position[2], 10)];\n }\n return comment;\n };\n /**\n * @param position\n * @private\n * @returns {BlockInfo}\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.selection.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.selection.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @param position\n * @param isInsertPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.selection.getParagraphInfo(position);\n hierarchicalIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n *\n * @param {BorderSettings} settings\n * @returns {void}\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially.\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells\n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex + cell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (!isNullOrUndefined(selectedCell.nextWidget)) {\n cells.push(selectedCell.nextWidget);\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n *\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n *\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n * @returns {void}\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color && applyBorder.hasValue('color')) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle && applyBorder.hasValue('lineStyle')) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth && applyBorder.hasValue('lineWidth')) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow && applyBorder.hasValue('shadow')) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space && applyBorder.hasValue('space')) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n *\n * @param {WTableFormat} format Specifies table format\n * @param {boolean} isShading Specifies shading.\n * @private\n * @returns {void}\n */\n Editor.prototype.onTableFormat = function (format, isShading) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n if (isNullOrUndefined(isShading)) {\n isShading = false;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n var table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (isShading) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.shading.copyFormat(format.shading);\n }\n }\n }\n if (!isNullOrUndefined(isShading)) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n rowWidget.rowFormat.borders.copyFormat(format.borders);\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.borders.copyFormat(format.borders);\n }\n }\n }\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(this.documentHelper.selection, undefined, value, table);\n };\n Editor.prototype.applyTablePropertyValue = function (selection, property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n else if (property === 'bidi') {\n sourceFormat.bidi = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('bidi') && applyFormat.bidi !== tableFormat.bidi) {\n tableFormat.bidi = applyFormat.bidi;\n }\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n this.documentHelper.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n *\n * @param {WRowFormat} format Specifies row format\n * @private\n * @returns {void}\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.documentHelper.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n *\n * @param {WCellFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * Applies Paragraph Format changes\n *\n * @param {WParagraphFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onParaFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('ParagraphFormat');\n this.updateParagraphFormat(undefined, format, false);\n this.reLayout(this.selection, false);\n };\n /**\n * @param selection\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n this.documentHelper.owner.cellOptionsDialogModule.applyCellMarginValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.documentHelper.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.owner.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.documentHelper.layout.getTableWidth(table));\n };\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.documentHelper, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.nodes = [];\n };\n /**\n * Updates the table of contents.\n *\n * @param tocField\n * @private\n * @returns {void}\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.documentHelper.layout.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.getUpdatedTabs();\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[tabs.length - 1].tabLeader;\n }\n if (tocSettings.rightAlign && isNullOrUndefined(tocSettings.tabLeader)) {\n tocSettings.tabLeader = 'Dot';\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n *\n * @param {TableOfContentsSettings} tableOfContentsSettings\n * @returns {void}\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.isInsertingTOC = true;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n var offset = 2;\n if (tocField.fieldEnd.paragraph === tocField.fieldEnd.paragraph.bodyWidget.lastChild) {\n offset--;\n }\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, offset, this.selection.end.location);\n this.delete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n title: localizeValue.getConstant('No Headings'),\n content: localizeValue.getConstant('Add Headings'),\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widgets;\n this.pasteContentsInternal([bodyWidget], false);\n this.isInsertingTOC = false;\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n this.updateHistoryForComments(removedCommentStart);\n }\n if (widgets.length === 0) {\n this.owner.editorHistory.undo();\n this.owner.editorHistory.redoStack.pop();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n //For TOC we used to append field end at last we need to map that inserted revision to field end.\n if (fieldBegin.revisions.length > 0) {\n var currentRevision = fieldBegin.revisions[fieldBegin.revisions.length - 1];\n currentRevision.range.push(fieldEnd);\n fieldEnd.revisions.push(currentRevision);\n }\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n *\n * @private\n * @returns {ParagraphWidget[]}\n *\n */\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph) {\n var tocDomBody = this.documentHelper.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var sectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat;\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n Editor.prototype.createHeadingLevels = function (settings) {\n //let normalStyle: string = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode, isSkipRevision) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n var currentRevision = undefined;\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n // If revision enabled.\n return fieldBegin;\n };\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n var emptyParaAppended = false;\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'Toc' + this.tocStyles[styleName];\n var paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(tocStyleName)), this.documentHelper.styles);\n paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n }\n tocPara.paragraphFormat.applyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n emptyParaAppended = true;\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n var isFieldCode = false;\n var paragraph = widget;\n while (paragraph instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paragraph.childWidgets.length; lineIndex++) {\n var lineWidget = paragraph.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.isPageBreak) {\n continue;\n }\n if ((element instanceof FieldElementBox) || (element instanceof BookmarkElementBox) || isFieldCode) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n isFieldCode = true;\n }\n else if (element.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var temp = element.text;\n var tabChar = '\\t';\n if (temp.indexOf(tabChar) !== -1) {\n temp = temp.replace(new RegExp(tabChar, 'g'), ' ');\n }\n text = text + temp;\n }\n }\n }\n paragraph = paragraph.nextSplitWidget;\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n }\n if (this.owner.enableTrackChanges && !isNullOrUndefined(tocPara)) {\n if (widgets.length === 1 || emptyParaAppended) {\n this.insertRevisionForBlock(tocPara, 'Insertion', true);\n }\n else {\n var revision = this.owner.revisionsInternal.changes[0];\n this.insertRevisionForBlock(tocPara, 'Insertion', true, revision);\n }\n }\n };\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n var bodyWidget = widget.containerWidget;\n var text = (bodyWidget.page.currentPageNum).toString();\n //text element.\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.documentHelper.bookmarks.containsKey(key)) {\n var bookmark = this.documentHelper.bookmarks.get(key);\n var bodyWidget = bookmark.paragraph.containerWidget;\n var pageRef = (bodyWidget.page.currentPageNum).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n };\n /**\n * Inserts toc bookmark.\n *\n * @param widget\n * @returns {string}\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var splitParagraph = widget.getSplitWidgets();\n var firstParagraph = splitParagraph[0];\n var lastParagraph = splitParagraph.pop();\n var startLine = firstParagraph.childWidgets[0];\n var endLine = lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n if (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox) {\n do {\n startElement = startElement.nextNode;\n } while (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox);\n }\n //Returns the bookmark if already present for paragraph.\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n Editor.prototype.generateBookmarkName = function () {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n var bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n return bookmarkName;\n };\n /**\n * Change cell content alignment\n *\n * @param verticalAlignment\n * @param textAlignment\n * @param verticalAlignment\n * @param textAlignment\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellContentAlignment = function (verticalAlignment, textAlignment) {\n this.owner.isShiftingEnabled = true;\n var selection = this.owner.selection;\n if (selection.isEmpty && selection.start.paragraph.isInsideTable) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n //Selecting the table cell to update the all the paragraph format.\n selection.selectTableCell();\n this.initHistory('CellContentVerticalAlignment');\n var cellFormat = selection.start.paragraph.associatedCell.cellFormat;\n this.applyCellPropertyValue(selection, 'verticalAlignment', verticalAlignment, cellFormat);\n this.reLayout(selection, false);\n this.initHistory('TextAlignment');\n this.updateParagraphFormat('textAlignment', textAlignment, false);\n this.reLayout(this.owner.selection, false);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n else {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n if (!isNullOrUndefined(selection.getTable(selection.start, selection.end))) {\n //Table cell vertical alignment.\n this.updateSelectionTableFormat(selection, 'CellContentVerticalAlignment', verticalAlignment);\n this.reLayout(this.owner.selection, false);\n this.initHistory('TextAlignment');\n //Paragraph text alignment.\n this.updateSelectionParagraphFormatting('textAlignment', textAlignment, false);\n this.reLayout(selection, false);\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.insertEditRangeElement = function (user) {\n if (this.documentHelper.isDocumentProtected || this.documentHelper.selection.isEmpty) {\n return;\n }\n this.initComplexHistory('RestrictEditing');\n this.selection.skipEditRangeRetrieval = true;\n var selection = this.documentHelper.selection;\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable\n && selection.start.paragraph.associatedCell.ownerTable.contains(selection.end.paragraph.associatedCell)) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (startCell.rowIndex === endCell.rowIndex) {\n var startIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n var endIndex = startCell.ownerRow.childWidgets.indexOf(endCell);\n var startElement = [];\n var endElement = [];\n for (var i = startIndex; i <= endIndex; i++) {\n var editStart = this.addEditElement(user);\n if (i == startIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n }\n editStart.columnFirst = i;\n editStart.columnLast = i;\n editStart.line = selection.start.currentWidget;\n var editEnd = editStart.editRangeEnd;\n editEnd.line = selection.end.currentWidget;\n startElement.push(editStart);\n endElement.push(editEnd);\n }\n this.insertElements(endElement, startElement);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = startElement[0].line.getOffset(startElement[0], 1);\n this.selection.start.setPositionParagraph(startElement[0].line, offset);\n offset = endElement[0].line.getOffset(endElement[0], 1);\n this.selection.end.setPositionParagraph(endElement[0].line, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n else {\n this.insertEditRangeInsideTable(startCell, endCell, user);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var startLine = this.selection.getFirstParagraphInCell(startCell).childWidgets[0];\n var endLine = this.selection.getLastParagraph(endCell).childWidgets[0];\n var offset = startLine.getOffset(startLine.children[0], 1);\n this.selection.start.setPositionParagraph(startLine, offset);\n offset = endLine.getOffset(endLine.children[0], 1);\n this.selection.end.setPositionParagraph(endLine, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n }\n else {\n this.addRestrictEditingForSelectedArea(user);\n }\n this.selection.skipEditRangeRetrieval = false;\n };\n Editor.prototype.insertEditRangeInsideTable = function (startCell, endCell, user) {\n var table = startCell.ownerTable;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var endElement = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var cellSelectionStartIndex = -1;\n var cellSelectionEndIndex = -1;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n if (cellSelectionStartIndex === -1) {\n cellSelectionStartIndex = j;\n }\n cellSelectionEndIndex = j;\n }\n }\n var newEndElement = [];\n for (var z = cellSelectionStartIndex; z <= cellSelectionEndIndex; z++) {\n var index = 0;\n var startCell_1 = void 0;\n var startParagraph = void 0;\n if (z === cellSelectionStartIndex) {\n startCell_1 = row.childWidgets[cellSelectionStartIndex];\n startParagraph = this.selection.getFirstParagraphInCell(startCell_1).childWidgets[0];\n }\n var editStart = this.addEditElement(user);\n if (z === cellSelectionStartIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n }\n editStart.columnFirst = z;\n editStart.columnLast = z;\n editStart.line = startParagraph;\n editStart.line.children.splice(index, 0, editStart);\n index++;\n var editEnd = editStart.editRangeEnd;\n newEndElement.push(editEnd);\n if (endElement.length > 0 && z === cellSelectionEndIndex) {\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = editStart.line;\n editStart.line.children.splice(index, 0, endElement[l]);\n index++;\n }\n endElement = [];\n }\n }\n endElement = newEndElement;\n if (i === count && endElement.length > 0) {\n var cellWidget = row.childWidgets[cellSelectionEndIndex];\n var lastLine = this.selection.getLastParagraph(cellWidget).lastChild;\n var index = lastLine.children.length - 1;\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = lastLine;\n lastLine.children.splice(index, 0, endElement[l]);\n index++;\n }\n }\n }\n };\n Editor.prototype.addRestrictEditingForSelectedArea = function (user) {\n var editStart = this.addEditElement(user);\n var editEnd = editStart.editRangeEnd;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n this.insertElements([editEnd], [editStart]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = editStart.line.getOffset(editStart, 1);\n this.selection.start.setPositionParagraph(editStart.line, offset);\n offset = editEnd.line.getOffset(editEnd, 1);\n this.selection.end.setPositionParagraph(editEnd.line, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.addEditElement = function (user) {\n var editStart = new EditRangeStartElementBox();\n if (user.toLocaleLowerCase() === 'everyone') {\n editStart.group = user;\n }\n else {\n editStart.user = user;\n }\n var editEnd = new EditRangeEndElementBox();\n editEnd.editRangeStart = editStart;\n editStart.editRangeEnd = editEnd;\n this.editStartRangeCollection.push(editStart);\n this.addEditCollectionToDocument();\n this.editStartRangeCollection = [];\n return editStart;\n };\n /**\n * @param protectionType\n * @private\n * @returns {void}\n */\n Editor.prototype.protect = function (protectionType) {\n this.documentHelper.isDocumentProtected = true;\n this.documentHelper.protectionType = protectionType;\n this.selection.highlightEditRegion();\n if (this.editorHistory) {\n this.editorHistory.destroy();\n }\n };\n Editor.prototype.addEditCollectionToDocument = function () {\n for (var i = 0; i < this.editStartRangeCollection.length; i++) {\n var editStart = this.editStartRangeCollection[i];\n var user = editStart.user === '' ? editStart.group : editStart.user;\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n }\n this.selection.updateEditRangeCollection();\n };\n /**\n * @param editStart\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRangeCollection = function (editStart, user) {\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictions = function (user) {\n if (!this.selection.checkSelectionIsAtEditRegion()) {\n return;\n }\n this.selection.skipEditRangeRetrieval = true;\n var editStart = this.selection.getEditRangeStartElement();\n this.initHistory('RemoveEditRange');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setEditRangeInfo(editStart);\n this.editorHistory.updateHistory();\n }\n if (editStart.user === user || editStart.group === user) {\n this.removeUserRestrictionsInternal(editStart, user);\n }\n this.selection.updateEditRangeCollection();\n this.fireContentChange();\n this.selection.skipEditRangeRetrieval = false;\n };\n /**\n * @param editStart\n * @param currentUser\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictionsInternal = function (editStart, currentUser) {\n var user = currentUser;\n if (isNullOrUndefined(currentUser)) {\n user = editStart.user === '' ? editStart.group : editStart.user;\n }\n var index = this.documentHelper.editRanges.get(user).indexOf(editStart);\n this.documentHelper.editRanges.get(user).splice(index, 1);\n if (this.documentHelper.editRanges.get(user).length === 0) {\n this.documentHelper.editRanges.remove(user);\n }\n editStart.removeEditRangeMark();\n editStart.editRangeEnd.line.children.splice(editStart.editRangeEnd.indexInOwner, 1);\n editStart.line.children.splice(editStart.indexInOwner, 1);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeAllEditRestrictions = function () {\n this.selection.skipEditRangeRetrieval = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var editStart = [];\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys.length; j++) {\n editStart = this.documentHelper.editRanges.get(keys[j]);\n for (var i = 0; i < editStart.length; i++) {\n editStart[i].editRangeEnd.line.children.splice(editStart[i].editRangeEnd.indexInOwner, 1);\n editStart[i].line.children.splice(editStart[i].indexInOwner, 1);\n }\n }\n this.documentHelper.editRanges.clear();\n this.selection.updateEditRangeCollection();\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n this.selection.editRegionHighlighters.clear();\n this.owner.viewer.updateScrollBars();\n this.selection.fireSelectionChanged(false);\n this.selection.skipEditRangeRetrieval = false;\n };\n /**\n * Insert specified form field at current selection.\n *\n * @param {FormFieldType} type Form field type\n * @returns {void}\n */\n Editor.prototype.insertFormField = function (type) {\n if (isNullOrUndefined(this.selection.start) || this.owner.enableHeaderAndFooter) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!this.selection.isEmpty) {\n isRemoved = this.removeSelectedContents(this.selection);\n }\n if (isRemoved) {\n this.insertFormFieldInternal(type);\n }\n };\n Editor.prototype.insertFormFieldInternal = function (type) {\n this.updateInsertPosition();\n var element = [];\n var temp = this.getCharacterFormat(this.selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = this.getFormFieldData(type);\n fieldBegin.characterFormat.copyFormat(format);\n element.push(fieldBegin);\n var bookmark = new BookmarkElementBox(0);\n bookmark.characterFormat.copyFormat(format);\n fieldBegin.formFieldData.name = this.getBookmarkName(type, 'Insert', this.formFieldCounter);\n bookmark.name = fieldBegin.formFieldData.name;\n element.push(bookmark);\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n var result = new TextElementBox();\n if (type === 'CheckBox') {\n result.text = String.fromCharCode(9744);\n }\n else {\n result.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n result.characterFormat.copyFormat(format);\n element.push(result);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.characterFormat.copyFormat(format);\n bookmarkEnd.name = fieldBegin.formFieldData.name;\n bookmarkEnd.reference = bookmark;\n bookmark.reference = bookmarkEnd;\n element.push(bookmarkEnd);\n this.insertElement(element);\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n if (this.documentHelper.formFields.indexOf(fieldBegin) === -1) {\n this.documentHelper.formFields.push(fieldBegin);\n }\n var offset = bookmarkEnd.line.getOffset(bookmarkEnd, 1);\n this.selection.selects(bookmarkEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(this.selection, true);\n };\n Editor.prototype.getFormFieldData = function (type) {\n switch (type) {\n case 'Text':\n return new TextFormField();\n case 'CheckBox':\n return new CheckBoxFormField();\n case 'DropDown':\n return new DropDownFormField();\n }\n };\n /**\n * @param field\n * @param info\n * @private\n * @returns {void}\n */\n Editor.prototype.setFormField = function (field, info) {\n var type;\n var formField;\n if (!isNullOrUndefined(info.format)) {\n type = 'Text';\n formField = new TextFormField();\n }\n else if (!isNullOrUndefined(info.sizeType)) {\n type = 'CheckBox';\n formField = new CheckBoxFormField();\n }\n else if (!isNullOrUndefined(info.dropdownItems)) {\n type = 'DropDown';\n formField = new DropDownFormField();\n }\n if (!isNullOrUndefined(type) && !isNullOrUndefined(formField)) {\n formField.name = field.formFieldData.name;\n formField.copyFieldInfo(info);\n this.editFormField(type, formField);\n }\n };\n /**\n * @param type\n * @param formData\n * @param type\n * @param formData\n * @private\n * @returns {boolean}\n */\n Editor.prototype.editFormField = function (type, formData) {\n var begin = this.selection.getCurrentFormField();\n if (isNullOrUndefined(begin) || isNullOrUndefined(begin.formFieldData)) {\n return false;\n }\n this.initComplexHistory('FormField');\n var bookmarkStart;\n var bookmarkEnd;\n if (formData.name !== '') {\n if (begin.formFieldData.name !== formData.name &&\n this.documentHelper.bookmarks.containsKey(formData.name)) {\n this.deleteBookmark(formData.name);\n }\n bookmarkStart = new BookmarkElementBox(0);\n bookmarkStart.name = formData.name;\n bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = formData.name;\n bookmarkStart.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmarkStart;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n // Preserves the character format for hyperlink field.\n var temp = begin.characterFormat.cloneFormat();\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var textFormat = begin.fieldSeparator.nextElement.characterFormat.cloneFormat();\n var currentOffset = begin.line.getOffset(begin, 0);\n this.selection.start.setPositionParagraph(begin.line, currentOffset);\n var endElement = begin.fieldEnd;\n if (begin.nextNode && begin.nextNode instanceof BookmarkElementBox) {\n endElement = begin.nextNode.reference;\n }\n currentOffset = endElement.line.getOffset(endElement, 1);\n this.selection.end.setPositionParagraph(endElement.line, currentOffset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(this.selection, false);\n this.skipFieldDeleteTracking = false;\n this.updateInsertPosition();\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = formData;\n element.push(fieldBegin);\n fieldBegin.characterFormat.copyFormat(format);\n if (!isNullOrUndefined(bookmarkStart)) {\n element.push(bookmarkStart);\n }\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.copyFormat(format);\n element.push(fieldSeparator);\n span = new TextElementBox();\n span.characterFormat.copyFormat(textFormat);\n span.text = this.getDefaultText(formData);\n if (type === 'CheckBox') {\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formData.sizeType === 'Exactly') {\n span.characterFormat.fontSize = formData.size;\n }\n }\n else if (formData instanceof TextFormField) {\n if (formData.defaultValue !== '') {\n if (formData.type === 'Text') {\n span.text = HelperMethods.formatText(formData.format, formData.defaultValue);\n }\n else if (formData.type === 'Number') {\n span.text = HelperMethods.formatNumber(formData.format, formData.defaultValue);\n }\n else {\n span.text = HelperMethods.formatDate(formData.format, formData.defaultValue);\n }\n }\n }\n element.push(span);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n var lastElement = fieldEnd;\n if (!isNullOrUndefined(bookmarkEnd)) {\n lastElement = bookmarkEnd;\n element.push(bookmarkEnd);\n }\n this.insertElement(element);\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n var offset = lastElement.line.getOffset(lastElement, 1);\n this.selection.selects(lastElement.line, offset, true);\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection, true);\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.getDefaultText = function (formField) {\n var defaultText = '';\n if (formField instanceof CheckBoxFormField) {\n defaultText = formField.defaultValue ? String.fromCharCode(9745) : String.fromCharCode(9744);\n }\n else if (formField instanceof DropDownFormField) {\n if (formField.dropdownItems.length > 0) {\n defaultText = formField.dropdownItems[0];\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n else if (formField instanceof TextFormField) {\n if (formField.defaultValue !== '') {\n defaultText = formField.defaultValue;\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n return defaultText;\n };\n Editor.prototype.getFormFieldCode = function (type) {\n switch (type) {\n case 'Text':\n return 'FORMTEXT';\n case 'CheckBox':\n return 'FORMCHECKBOX';\n case 'DropDown':\n return 'FORMDROPDOWN';\n }\n };\n /**\n * @param field\n * @param reset\n * @param value\n * @param field\n * @param reset\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.toggleCheckBoxFormField = function (field, reset, value) {\n var formFieldData = field.formFieldData;\n if (formFieldData instanceof CheckBoxFormField && formFieldData.enabled) {\n this.initHistory('UpdateFormField');\n if (this.editorHistory) {\n var currentValue = void 0;\n if (formFieldData instanceof CheckBoxFormField) {\n currentValue = formFieldData.checked;\n }\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(field, currentValue);\n this.editorHistory.updateHistory();\n }\n if (reset) {\n formFieldData.checked = value;\n }\n else {\n formFieldData.checked = !formFieldData.checked;\n }\n var separator = field.fieldSeparator;\n var checkBoxTextElement = separator.nextNode;\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n this.owner.documentHelper.layout.reLayoutParagraph(field.line.paragraph, 0, 0);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @param field\n * @param value\n * @param reset\n * @private\n * @returns {void}\n */\n Editor.prototype.updateFormField = function (field, value, reset) {\n var formFieldData = field.formFieldData;\n if (formFieldData) {\n this.updateFormFieldInternal(field, formFieldData, value, reset);\n }\n };\n Editor.prototype.updateFormFieldInternal = function (field, formFieldData, value, reset) {\n if (formFieldData instanceof TextFormField) {\n if (value === '') {\n if (reset) {\n value = this.getDefaultText(formFieldData);\n }\n else {\n value = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n var formattedText = value;\n var type = formFieldData.type;\n if (type === 'Text' && formFieldData.format !== '') {\n formattedText = HelperMethods.formatText(formFieldData.format, value);\n }\n this.updateFormFieldResult(field, formattedText);\n }\n else if (formFieldData instanceof DropDownFormField) {\n var text = formFieldData.dropdownItems[value];\n formFieldData.selectedIndex = value;\n this.updateFormFieldResult(field, text);\n }\n var endoffset = field.fieldEnd.line.getOffset(field.fieldEnd, 1);\n var startPos = new TextPosition(this.owner);\n startPos.setPositionParagraph(field.fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPos, startPos);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.updateFormFieldResult = function (field, value) {\n //When protection is enabled with type Form Filling below method selects the field result alone.\n this.selection.selectFieldInternal(field, false, true);\n this.insertText(value);\n };\n Editor.prototype.checkBookmarkAvailability = function (name, action) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n if (bookmarkCol.containsKey(name)) {\n return false;\n }\n }\n return true;\n };\n Editor.prototype.getBookmarkName = function (type, action, count) {\n var name;\n var available = false;\n while (available === false) {\n name = type + count;\n available = this.checkBookmarkAvailability(name, action);\n count = count + 1;\n }\n return name;\n };\n /**\n * @param formField\n * @private\n * @returns {void}\n */\n Editor.prototype.applyFormTextFormat = function (formField) {\n if (!isNullOrUndefined(formField)) {\n var text = this.getFieldResultText(formField);\n var currentValue = text;\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n if (formField.fieldSeparator != undefined) {\n this.applyTextFormatInternal(formField, text);\n }\n this.initHistory('FormTextFormat');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(formField, currentValue);\n this.editorHistory.updateHistory();\n }\n }\n };\n // Inserts 5 space on Form Fill inline mode if length is 0\n Editor.prototype.insertSpaceInFormField = function () {\n if (this.documentHelper.isInlineFormFillProtectedMode && this.selection.isInlineFormFillMode()) {\n var resultText = this.getFieldResultText();\n if (resultText.length === 0 || resultText === '\\r') {\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n }\n }\n };\n /**\n * @param formField\n * @private\n * @returns {string}\n */\n Editor.prototype.getFieldResultText = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.selection.getCurrentFormField();\n }\n //Stores the current selection index, to reset after getting the result text\n var previousStartIndex = this.selection.startOffset;\n var previousEndIndex = this.selection.endOffset;\n this.selection.isModifyingSelectionInternally = true;\n this.selection.selectFieldInternal(formField, false, true);\n var resultText = this.selection.getText(false);\n //Resets the selection back to the original index\n this.selection.select(previousStartIndex, previousEndIndex);\n this.selection.isModifyingSelectionInternally = false;\n return resultText;\n };\n /**\n * @param field\n * @param text\n * @private\n * @returns {void}\n */\n Editor.prototype.applyTextFormatInternal = function (field, text) {\n var textElement = field.fieldSeparator.nextElement;\n var start = 0;\n text = text.replace(/\\r/g, '');\n do {\n if (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n textElement.text = text.slice(start, start + textElement.text.length);\n start = start + textElement.length;\n }\n if (isNullOrUndefined(textElement.nextElement)) {\n if (!isNullOrUndefined(textElement.line.nextLine)) {\n textElement = textElement.line.nextLine.children[0];\n }\n else {\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n var nextBlock = textElement.paragraph.nextRenderedWidget;\n if (isNullOrUndefined(nextBlock)) {\n break;\n }\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstParagraphBlock(nextBlock);\n }\n while (nextBlock.isEmpty()) {\n nextBlock = nextBlock.nextRenderedWidget;\n }\n textElement = nextBlock.childWidgets[0].children[0];\n }\n }\n else {\n textElement = textElement.nextElement;\n }\n } while (!(textElement instanceof FieldElementBox && textElement.fieldType === 1 &&\n textElement.fieldBegin.formFieldData instanceof TextFormField));\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n this.selection.isFormatUpdated = true;\n this.reLayout(this.selection, false);\n this.selection.isFormatUpdated = false;\n };\n Editor.prototype.constructCommentInitial = function (authorName) {\n var splittedName = authorName.split(' ');\n var initials = '';\n for (var i = 0; i < splittedName.length; i++) {\n if (splittedName[i].length > 0 && splittedName[i] !== '') {\n initials += splittedName[i][0];\n }\n }\n return initials;\n };\n /**\n * Insert Footnote at current selection\n *\n * @returns {void}\n */\n Editor.prototype.insertFootnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.isFootNoteInsert = true;\n this.isFootNote = true;\n var footnote = new FootnoteElementBox();\n footnote.characterFormat.baselineAlignment = 'Superscript';\n footnote.footnoteType = 'Footnote';\n footnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.baselineAlignment = 'Superscript';\n text.line = lineWidget;\n text.text = '?';\n lineWidget.children.push(text);\n var text1 = new TextElementBox();\n text1.text = ' ';\n text1.line = lineWidget;\n lineWidget.children.push(text1);\n paragraph.childWidgets.push(lineWidget);\n footnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(footnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var footPara;\n if (footnote.paragraph.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n if ((footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnote) {\n footPara = footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], text1.line.getOffset(text1, footnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n // this.selection.fireSelectionChanged(true);\n this.updateFootNoteIndex();\n this.reLayout(this.selection, false);\n this.separator('footnote');\n this.continuationSeparator('footnote');\n this.isFootNote = false;\n };\n Editor.prototype.updateFootnoteCollection = function (footnote) {\n if (this.documentHelper.footnoteCollection.indexOf(footnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.footnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(footnote).startPosition;\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.footnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.footnoteCollection.splice(i, 0, footnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.footnoteCollection.push(footnote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n // Footnote implementation ends\n /**\n * Insert Endnote at current selection\n *\n * @returns {void}\n */\n Editor.prototype.insertEndnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.documentHelper.layout.isEndnoteContentChanged = true;\n var endnote = new FootnoteElementBox();\n endnote.characterFormat.baselineAlignment = 'Superscript';\n endnote.footnoteType = 'Endnote';\n endnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var footText = new TextElementBox();\n footText.characterFormat.baselineAlignment = 'Superscript';\n footText.line = lineWidget;\n footText.text = '?';\n lineWidget.children.push(footText);\n var followText = new TextElementBox();\n followText.text = ' ';\n followText.line = lineWidget;\n lineWidget.children.push(followText);\n paragraph.childWidgets.push(lineWidget);\n endnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(endnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var lastpage = this.documentHelper.pages.length;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n var footPara;\n if (bodyWidget.page.endnoteWidget) {\n for (var i = 0; i < bodyWidget.page.endnoteWidget.bodyWidgets.length; i++) {\n if ((bodyWidget.page.endnoteWidget.bodyWidgets[i]).footNoteReference === endnote) {\n footPara = bodyWidget.page.endnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], footText.line.getOffset(followText, endnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n this.updateEndNoteIndex();\n this.reLayout(this.selection, false);\n this.separator('endnote');\n this.continuationSeparator('endnote');\n this.documentHelper.layout.isEndnoteContentChanged = false;\n };\n Editor.prototype.updateEndnoteCollection = function (endnote) {\n if (this.documentHelper.endnoteCollection.indexOf(endnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(endnote).startPosition;\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.endnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.endnoteCollection.splice(i, 0, endnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.endnoteCollection.push(endnote);\n }\n var lastpage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var positionchanged = false;\n // this.documentHelper.layout.isFootnoteContentChanged = true;\n var foot = void 0;\n var endnoteWidget = void 0;\n var footIndex = this.documentHelper.endnoteCollection.indexOf(endnote);\n var insertIndex = 1;\n var height = 0;\n var isCreated = void 0;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n if (bodyWidget.page.endnoteWidget) {\n for (var j = 0; j < bodyWidget.page.endnoteWidget.bodyWidgets.length; j++) {\n var currentIndex = this.documentHelper.endnoteCollection.indexOf((bodyWidget.page.endnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n // endnote.isLayout = true;\n foot = endnote; //this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endnoteWidget = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endnoteWidget = new FootNoteWidget();\n endnoteWidget.footNoteType = 'Endnote';\n endnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n //endnoteWidget.childWidgets.push(newParagraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + 18);\n }\n var body = foot.bodyWidget;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n //body.childWidgets.push(block);\n if (this.documentHelper.layout.isLayoutWhole) {\n block.containerWidget = undefined;\n }\n else {\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = endnoteWidget.sectionFormat;\n block.containerWidget.containerWidget = endnoteWidget;\n }\n // endnoteWidget.bodyWidgets[j].childWidgets.push(block);\n if (positionchanged) {\n endnoteWidget.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n endnoteWidget.bodyWidgets.push(body);\n }\n }\n insertIndex++;\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endnoteWidget;\n }\n // endNote.containerWidget = bodyWidget;\n endnoteWidget.height += height;\n // }\n // this.documentHelper.layout.layoutfootNote(endnoteWidget);\n //this.layoutfootNote(endNote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n Editor.prototype.updateEndNoteIndex = function () {\n var endNoteCollec = this.documentHelper.endnoteCollection;\n for (var i = 0; i < endNoteCollec.length; i++) {\n if (!isNullOrUndefined(endNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0])) {\n endNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0].text = endNoteCollec[i].text;\n }\n }\n };\n Editor.prototype.separator = function (type) {\n //let block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(3);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.separator.length < 1) {\n this.documentHelper.footnotes.separator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.separator.length < 1) {\n this.documentHelper.endnotes.separator.push(paragraph);\n }\n };\n Editor.prototype.continuationSeparator = function (type) {\n //var block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(4);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.continuationSeparator.length < 1) {\n this.documentHelper.footnotes.continuationSeparator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.continuationSeparator.length < 1) {\n this.documentHelper.endnotes.continuationSeparator.push(paragraph);\n }\n };\n Editor.prototype.updateFootNoteIndex = function () {\n var footNoteCollec = this.documentHelper.footnoteCollection;\n for (var i = 0; i < footNoteCollec.length; i++) {\n footNoteCollec[i].text = (i + 1).toString();\n if (!isNullOrUndefined(footNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0])) {\n footNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0].text = (i + 1).toString();\n }\n }\n };\n return Editor;\n}());\nexport { Editor };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer, WebLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageInfo } from '../selection/selection-helper';\nimport { ImageElementBox, ShapeElementBox } from '../viewer/page';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n *\n * @param {DocumentEditor} node - Specfies the document editor\n * @param {DocumentHelper} documentHelper - Specified the document helper\n * @private\n */\n function ImageResizer(node, documentHelper) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.documentHelper = documentHelper;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.documentHelper.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n *\n * @private\n * @returns {ImageElementBox | ShapeElementBox} - Returns the image element.\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @param {ImageElementBox | ShapeElementBox} value - Specifies the current element box.\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n *\n * @private\n * @returns {number} - Returns resize mark size\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n * @param {number} value - Specifies resize mark size.\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"isShapeResize\", {\n /**\n * @returns {boolean} - Returns the shape size.\n */\n get: function () {\n if (this.currentImageElementBox instanceof ShapeElementBox) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n *\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = width - x - this.documentHelper.scrollbarWidth + 'px';\n }\n else {\n this.imageResizerDivElement.style.width = width + 'px';\n }\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.documentHelper.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n *\n * @private\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @returns {void}\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.documentHelper.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top;\n var left;\n if (elementBox instanceof ImageElementBox && elementBox.textWrappingStyle !== 'Inline') {\n top = elementBox.y;\n left = elementBox.x;\n }\n else {\n top = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n }\n var page = this.documentHelper.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n //let y: number = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = page.boundingRectangle.width - page.boundingRectangle.x - left - this.documentHelper.scrollbarWidth + 'px';\n }\n this.imageResizerDivElement.style.display = 'block';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n resizeDiv.style.width = (page.boundingRectangle.width - this.documentHelper.scrollbarWidth - page.boundingRectangle.x - left) + 'px';\n }\n else {\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n }\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.documentHelper.getPageWidth(page);\n //const pagelayout: PageLayoutViewer = this.viewer as PageLayoutViewer;\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.documentHelper.zoomFactor / 2;\n }\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.documentHelper.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.documentHelper.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.documentHelper.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.documentHelper.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n height = this.documentHelper.render.getScaledValue(elementBox.height);\n width = this.documentHelper.render.getScaledValue(elementBox.width);\n if (elementBox instanceof ImageElementBox) {\n left = this.documentHelper.render.getScaledValue(left);\n top = this.documentHelper.render.getScaledValue(top);\n }\n else {\n left = elementBox.x * this.documentHelper.zoomFactor;\n top = elementBox.y * this.documentHelper.zoomFactor;\n }\n this.setImageResizerPosition(left, top, width, height, this);\n if (this.owner.selection.isInShape) {\n this.resizeContainerDiv.style.borderStyle = 'dashed';\n }\n else {\n this.resizeContainerDiv.style.borderStyle = 'solid';\n }\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n *\n * @private\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @returns {void}\n */\n /* eslint-disable */\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.documentHelper.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.documentHelper.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.documentHelper.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.documentHelper.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.documentHelper.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.documentHelper.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.documentHelper.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.documentHelper.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.documentHelper.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.documentHelper.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.documentHelper.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.documentHelper.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.documentHelper.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.documentHelper.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.documentHelper.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.documentHelper.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n *\n * @private\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.documentHelper.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n imageResizer.rightMiddleRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.documentHelper.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @returns {void}\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.documentHelper.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n *\n * @private\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @returns {void}\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n *\n * @private\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.documentHelper.zoomFactor;\n prevY = prevY / this.documentHelper.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n var id = this.selectedResizeElement.id.split('_');\n var currentElementId = id[id.length - 1];\n switch (currentElementId) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (currentElementId === 'BottomRightRectParent'\n || currentElementId === 'TopRightRectParent'\n || currentElementId === 'BottomLeftRectParent'\n || currentElementId === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n *\n * @private\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n *\n * @private\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n *\n * @private\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.documentHelper.render.getScaledValue(touchPoint.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n *\n * @private\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point info.\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.documentHelper.render.getScaledValue(touchPoints.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.documentHelper.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.documentHelper.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selection);\n this.documentHelper.layout.reLayoutParagraph(this.currentImageElementBox.line.paragraph, 0, 0);\n this.updateHistoryForImageResizer();\n this.owner.editorModule.reLayout(this.owner.selection, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @returns {void}\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageInfo(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.owner.editorHistory.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox instanceof ImageElementBox ? this.currentImageElementBox : this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1;\n var left = void 0;\n var topValue = void 0;\n var leftValue = void 0;\n if (this.currentImageElementBox instanceof ImageElementBox) {\n top_1 = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n topValue = top_1 * this.documentHelper.zoomFactor;\n leftValue = left * this.documentHelper.zoomFactor;\n }\n else {\n leftValue = elementBox.x * this.documentHelper.zoomFactor;\n topValue = elementBox.y * this.documentHelper.zoomFactor;\n }\n var height = this.documentHelper.render.getScaledValue(elementBox.height, 2);\n var width = this.documentHelper.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n get: function () {\n return this.widthIn;\n },\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","import { BodyWidget, TableWidget, TableRowWidget, ElementBox, Page } from '../viewer/page';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from '../format/section-format';\nimport { XmlHttpRequestHandler, actionCompleteEvent } from '../../base/index';\nimport { HistoryInfo } from '../editor-history/index';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { WCharacterFormat, WRowFormat } from '../format/index';\n/**\n * Collaborative editing module\n */\nvar CollaborativeEditing = /** @class */ (function () {\n function CollaborativeEditing(editor) {\n this.version = 0;\n this.owner = editor;\n }\n Object.defineProperty(CollaborativeEditing.prototype, \"documentHelper\", {\n //private lockEnd: string = '';\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollaborativeEditing.prototype, \"selection\", {\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollaborativeEditing.prototype, \"collaborativeEditingSettings\", {\n get: function () {\n return this.owner.documentEditorSettings.collaborativeEditingSettings;\n },\n enumerable: true,\n configurable: true\n });\n CollaborativeEditing.prototype.getModuleName = function () {\n return 'CollaborativeEditing';\n };\n /**\n * To update the action which need to perform.\n *\n * @param {CollaborativeEditingEventArgs} data - Specifies the data.\n * @returns {void}\n */\n CollaborativeEditing.prototype.updateAction = function (data) {\n if (!Array.isArray(data)) {\n data = [data];\n }\n for (var i = 0; i < data.length; i++) {\n var documentData = data[i];\n switch (documentData.action) {\n case 'LockContent':\n // Transform position\n this.transFormLockRegion(documentData);\n this.lockRegion(documentData.selectionInfo.start, documentData.selectionInfo.end, documentData.author);\n break;\n case 'SaveContent':\n this.version = documentData.version;\n this.updateRegion(documentData.author, documentData.data);\n break;\n case 'UnlockContent':\n this.version = documentData.version;\n this.updateRegion(documentData.author, documentData.data);\n this.removeEditRange(documentData.author);\n break;\n }\n }\n };\n CollaborativeEditing.prototype.transFormLockRegion = function (data) {\n var previousLockInfo = data.selectionInfo.previousLockInfo;\n if (!isNullOrUndefined(previousLockInfo)) {\n var author = previousLockInfo.author;\n var sectionDiff = 0;\n var blockDiff = 0;\n if (this.documentHelper.editRanges.containsKey(author)) {\n var editRange = this.documentHelper.editRanges.get(author);\n if (editRange.length > 0) {\n var position = this.selection.getPosition(editRange[0]);\n var endOffset = this.selection.getHierarchicalIndexByPosition(position.endPosition).split(';');\n var previousOffset = previousLockInfo.end.split(';');\n sectionDiff = parseInt(endOffset[0], 10) - parseInt(previousOffset[0], 10);\n blockDiff = parseInt(endOffset[1], 10) - parseInt(previousOffset[1], 10);\n // Same section\n if (data.selectionInfo.start.split(';')[0] === previousLockInfo.end.split(';')[0]) {\n data.selectionInfo.start = this.tranformPosition(data.selectionInfo.start, sectionDiff, blockDiff);\n data.selectionInfo.end = this.tranformPosition(data.selectionInfo.end, sectionDiff, blockDiff);\n }\n else {\n data.selectionInfo.start = this.tranformPosition(data.selectionInfo.start, sectionDiff, 0);\n data.selectionInfo.end = this.tranformPosition(data.selectionInfo.end, sectionDiff, 0);\n }\n }\n }\n }\n };\n /**\n * Lock selected region from editing by other users.\n *\n * @param {string} user - Specifies the user.\n * @returns {void}\n */\n CollaborativeEditing.prototype.lockContent = function (user) {\n var _this = this;\n if (this.canLock()) {\n var start = this.owner.selection.start;\n var end = this.owner.selection.end;\n if (!this.owner.selection.isForward) {\n start = this.owner.selection.end;\n end = this.owner.selection.start;\n }\n if (start.paragraph.isInsideTable) {\n var table = this.owner.documentHelper.layout.getParentTable(start.paragraph);\n var firstPara = this.owner.selection.getFirstParagraphBlock(table);\n start.setPosition(firstPara.childWidgets[0], true);\n }\n else {\n start.paragraphStartInternal(this.owner.selection, false);\n }\n if (end.paragraph.isInsideTable) {\n var table = this.owner.documentHelper.layout.getParentTable(end.paragraph);\n var lastPara = this.owner.selection.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n end.setPositionParagraph(lastPara.lastChild, offset);\n }\n else {\n end.moveToParagraphEndInternal(this.owner.selection, false);\n }\n var startOffset = this.owner.selection.getHierarchicalIndexByPosition(start);\n var endOffset = this.owner.selection.getHierarchicalIndexByPosition(end);\n var selectionInfo_1 = {\n start: startOffset,\n end: endOffset,\n roomName: this.owner.documentEditorSettings.collaborativeEditingSettings.roomName,\n author: isNullOrUndefined(user) ? this.owner.currentUser : user,\n version: this.version\n };\n var startInfo_1 = this.selection.getParagraphInfo(start);\n var endInfo_1 = this.selection.getParagraphInfo(end);\n this.owner.selection.select(startOffset, endOffset);\n var ajax = new XmlHttpRequestHandler();\n ajax.url = this.owner.serviceUrl + this.owner.serverActionSettings.canLock;\n ajax.contentType = 'application/json;charset=UTF-8';\n ajax.onSuccess = function (result) {\n _this.successHandler(result, selectionInfo_1, startInfo_1, endInfo_1);\n };\n ajax.onFailure = this.failureHandler.bind(this);\n ajax.onError = this.failureHandler.bind(this);\n ajax.customHeaders = this.owner.headers;\n ajax.send(selectionInfo_1);\n }\n };\n /**\n * @private\n * @returns {boolean} - Returns can lock.\n */\n CollaborativeEditing.prototype.canLock = function () {\n var editRanges = this.documentHelper.editRanges;\n if (editRanges.containsKey(this.owner.currentUser)) {\n return false;\n }\n var userNames = editRanges.keys;\n for (var i = 0; i < userNames.length; i++) {\n var range = editRanges.get(userNames[i]);\n if (!isNullOrUndefined(range) && range.length > 0) {\n if (this.isSelectionInEditableRange(range[0])) {\n return false;\n }\n }\n }\n return true;\n };\n CollaborativeEditing.prototype.getPreviousLockedRegion = function () {\n var editRanges = this.documentHelper.editRanges;\n if (editRanges.containsKey(this.owner.currentUser)) {\n return undefined;\n }\n var previous;\n var userNames = editRanges.keys;\n for (var i = 0; i < userNames.length; i++) {\n var range = editRanges.get(userNames[i])[0];\n var startPosition = this.selection.getPosition(range).startPosition;\n if (startPosition.isExistBefore(this.selection.start)) {\n if (isNullOrUndefined(previous)) {\n previous = range;\n }\n else if (startPosition.isExistAfter(this.selection.getPosition(previous).startPosition)) {\n previous = range;\n }\n }\n }\n return previous;\n };\n /**\n * @private\n * @param {string} user - Specifies the user.\n * @returns {void}\n */\n CollaborativeEditing.prototype.unlockContent = function (user) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n if (this.saveTimer) {\n clearTimeout(this.saveTimer);\n }\n var sfdtContent = JSON.stringify(this.serializeEditableRegion(user));\n var saveObject = {\n action: 'UnlockContent',\n author: user,\n version: this.version,\n data: sfdtContent,\n selectionInfo: {\n start: '',\n end: '',\n roomName: this.collaborativeEditingSettings.roomName,\n author: this.owner.currentUser,\n version: this.version\n },\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.removeEditRange(user);\n this.owner.editorHistory.clearHistory();\n this.owner.fireContentChange();\n // Todo: selection tranformation\n this.owner.trigger(actionCompleteEvent, saveObject);\n }\n };\n CollaborativeEditing.prototype.removeEditRange = function (user) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n this.updateLockRegion(user, false);\n this.owner.editor.removeUserRestrictionsInternal(this.documentHelper.editRanges.get(user)[0]);\n this.documentHelper.clearContent();\n this.selection.updateEditRangeCollection();\n this.documentHelper.owner.viewer.updateScrollBars();\n }\n };\n /**\n * Save locked content to other clients.\n *\n * @private\n * @returns {void}\n */\n CollaborativeEditing.prototype.saveContent = function () {\n var _this = this;\n if (this.saveTimer) {\n clearTimeout(this.saveTimer);\n }\n var timeOut = this.collaborativeEditingSettings.saveTimeout;\n if (isNullOrUndefined(timeOut)) {\n timeOut = 3000;\n }\n this.saveTimer = setTimeout(function () {\n _this.saveContentInternal();\n }, timeOut);\n };\n CollaborativeEditing.prototype.saveContentInternal = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRangeStart = this.documentHelper.editRanges.get(this.owner.currentUser)[0];\n var position = this.selection.getPosition(editRangeStart);\n var saveObject = {\n action: 'SaveContent',\n author: this.owner.currentUser,\n version: this.version,\n data: JSON.stringify(this.serializeEditableRegion(this.owner.currentUser)),\n selectionInfo: {\n 'start': this.selection.getHierarchicalIndexByPosition(position.startPosition),\n 'end': this.selection.getHierarchicalIndexByPosition(position.endPosition),\n roomName: this.collaborativeEditingSettings.roomName,\n author: this.owner.currentUser,\n version: this.version\n },\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.owner.trigger(actionCompleteEvent, saveObject);\n }\n };\n CollaborativeEditing.prototype.serializeEditableRegion = function (user) {\n var startElement = this.documentHelper.editRanges.get(user)[0];\n var endElement = startElement.editRangeEnd;\n var start = new TextPosition(this.owner);\n start.setPosition(startElement.line, true);\n var end = new TextPosition(this.owner);\n end.setPosition(endElement.line, false);\n this.owner.sfdtExportModule.isPartialExport = true;\n /* eslint-disable-next-line max-len */\n var sfdtContent = this.owner.sfdtExportModule.write(start.currentWidget, start.offset, end.currentWidget, end.offset, false);\n this.owner.sfdtExportModule.isPartialExport = false;\n return sfdtContent;\n };\n /* eslint-disable-next-line max-len */\n CollaborativeEditing.prototype.successHandler = function (result, selectionInfo, startInfo, endInfo) {\n var canLock = JSON.parse(result.data).canLock;\n if (canLock) {\n selectionInfo.start = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n selectionInfo.end = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n var previousEditRange = this.getPreviousLockedRegion();\n if (previousEditRange) {\n var position = this.selection.getPosition(previousEditRange);\n selectionInfo.previousLockInfo = {\n start: this.selection.getHierarchicalIndexByPosition(position.startPosition),\n end: this.selection.getHierarchicalIndexByPosition(position.endPosition),\n author: previousEditRange.user,\n roomName: '',\n version: 0\n };\n }\n var lockObject = {\n action: 'LockContent',\n selectionInfo: selectionInfo,\n author: this.owner.currentUser,\n version: this.version,\n data: '',\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.owner.trigger(actionCompleteEvent, lockObject);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n content: localizeValue.getConstant('Already locked'),\n closeOnEscape: true, showCloseIcon: true, position: { X: 'Center', Y: 'Center' }\n });\n }\n };\n CollaborativeEditing.prototype.failureHandler = function () {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n content: localizeValue.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true, position: { X: 'Center', Y: 'Center' }\n });\n };\n /**\n * Locker specified region for specified user.\n *\n * @private\n * @param {string} start - Specified the selection start.\n * @param {string} end - Specifies the selection end.\n * @param {string} user - Specifies the user\n * @returns {void}\n */\n CollaborativeEditing.prototype.lockRegion = function (start, end, user) {\n var startPosition = this.selection.getTextPosBasedOnLogicalIndex(start);\n var endPosition = this.selection.getTextPosBasedOnLogicalIndex(end);\n this.lockRegionInternal(startPosition, endPosition, user);\n };\n CollaborativeEditing.prototype.lockRegionInternal = function (start, end, user) {\n var editStart = this.owner.editor.addEditElement(user);\n var editEnd = editStart.editRangeEnd;\n this.insertElements(start, end, [editEnd], [editStart]);\n this.updateLockInfo(editStart.paragraph, editEnd.paragraph, user, true);\n this.owner.viewer.updateScrollBars();\n };\n CollaborativeEditing.prototype.insertElements = function (start, end, endElements, startElements) {\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(start, startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(end, endElements);\n }\n };\n CollaborativeEditing.prototype.insertElementsInternal = function (position, elements) {\n var indexInInline = 0;\n if (position.paragraph.isEmpty()) {\n var paragraph = position.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n else {\n var inlineObj = position.currentWidget.getInline(position.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n }\n };\n CollaborativeEditing.prototype.insertElementInternal = function (element, newElement, index) {\n var line = element.line;\n var paragraph = line.paragraph;\n var insertIndex = element.indexInOwner;\n var isBidi = paragraph.paragraphFormat.bidi && element.isRightToLeft;\n if (index === element.length) {\n // Add new Element in current\n if (!isBidi) {\n insertIndex++;\n }\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (isNullOrUndefined(element.previousNode)) {\n line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n line.children.splice(insertIndex, 0, newElement);\n }\n }\n newElement.line = element.line;\n };\n //#region Save content\n CollaborativeEditing.prototype.setEditableRegion = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRanges = this.documentHelper.editRanges.get(this.owner.currentUser);\n var editRangeStart = editRanges[0];\n var firstBlock = this.getParentBlock(editRangeStart.paragraph);\n this.lockStart = this.owner.selection.getHierarchicalIndex(firstBlock, '0').split(';');\n }\n };\n CollaborativeEditing.prototype.isSelectionInEditableRange = function (editRange) {\n var _a;\n if (!isNullOrUndefined(this.owner.selection)) {\n var start = this.owner.selection.start;\n var end = this.owner.selection.end;\n if (!this.owner.selection.isForward) {\n _a = [end, start], start = _a[0], end = _a[1];\n }\n var position = this.owner.selection.getPosition(editRange);\n if ((start.isExistAfter(position.startPosition) || start.isAtSamePosition(position.startPosition))\n && (end.isExistBefore(position.endPosition) || end.isAtSamePosition(position.endPosition)) ||\n ((position.startPosition.isExistAfter(start) || position.startPosition.isAtSamePosition(start))\n && (position.endPosition.isExistBefore(end) || position.endPosition.isAtSamePosition(end))) ||\n (position.startPosition.isExistAfter(start) && position.startPosition.isExistBefore(end)\n && (end.isExistAfter(position.endPosition) || end.isExistBefore(position.endPosition))) ||\n (position.endPosition.isExistBefore(end) && position.endPosition.isExistAfter(start)\n && (start.isExistBefore(position.startPosition) || start.isExistAfter(position.startPosition)))) {\n return true;\n }\n }\n return false;\n };\n /**\n * Updated modified content from remote user\n *\n * @returns {void}\n */\n /* eslint-disable */\n CollaborativeEditing.prototype.updateRegion = function (user, content) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n var editRanges = this.documentHelper.editRanges.get(user);\n if (editRanges.length === 1) {\n // Remove exisiting range from collection.\n // New range will get inserted while updating the content.\n this.documentHelper.editRanges.remove(user);\n editRanges[0].removeEditRangeMark();\n }\n // Preserve hierachical position for history position tranformation\n this.setEditableRegion();\n var startElement = editRanges[0];\n var endElement = startElement.editRangeEnd;\n var firstBlock = this.getParentBlock(startElement.paragraph);\n var lastBlock = this.getParentBlock(endElement.paragraph);\n var isInEditRange = this.isSelectionInEditableRange(startElement);\n var startParagrahInfo = void 0;\n var endParagrahInfo = void 0;\n this.owner.editor.isRemoveRevision = true;\n if (!isInEditRange) {\n startParagrahInfo = this.owner.selection.getParagraphInfo(this.owner.selection.start);\n endParagrahInfo = this.owner.selection.getParagraphInfo(this.owner.selection.end);\n }\n var sections = [];\n while (lastBlock !== firstBlock) {\n var currentBlock = lastBlock.combineWidget(this.owner.viewer);\n lastBlock = currentBlock.previousRenderedWidget;\n if (lastBlock.bodyWidget.index !== currentBlock.bodyWidget.index) {\n sections.push(currentBlock.bodyWidget);\n }\n var removedBlock = currentBlock.containerWidget.childWidgets[currentBlock.indexInOwner];\n this.removeDuplicateCollection(removedBlock);\n currentBlock.containerWidget.removeChild(currentBlock.indexInOwner);\n }\n if (!isNullOrUndefined(firstBlock)) {\n var lastBockIndex = firstBlock.index;\n var containerWidget = firstBlock.containerWidget;\n sections.push(containerWidget);\n var lastInsertIndex = firstBlock.containerWidget.childWidgets.indexOf(firstBlock);\n var removedBlock = containerWidget.childWidgets[lastInsertIndex];\n containerWidget.removeChild(lastInsertIndex);\n this.removeDuplicateCollection(removedBlock);\n var comments = [];\n var blocks = [];\n var revision = [];\n this.owner.editor.isPasteListUpdated = false;\n this.owner.editor.getBlocks(JSON.parse(content), false, blocks, comments, revision);\n if (sections.length !== blocks.length) {\n if (sections.length === 1) {\n var bodyWidget = sections[0];\n sections.unshift(this.owner.editor.splitBodyWidget(bodyWidget, blocks[blocks.length - 2].sectionFormat, bodyWidget.childWidgets[lastInsertIndex - 1]));\n }\n if (sections.length < blocks.length) {\n for (var m = 1; m < blocks.length - 1; m++) {\n var page = new Page(this.owner.documentHelper);\n var bodyWidget = new BodyWidget();\n page.bodyWidgets.push(bodyWidget);\n bodyWidget.page = page;\n sections.splice(m, 0, bodyWidget);\n bodyWidget.index = sections[m - 1].index;\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.sectionFormat.copyFormat(blocks[m].sectionFormat);\n var pageIndex = sections[m - 1].page.index;\n this.documentHelper.insertPage(pageIndex, page);\n //Todo: update section index\n this.owner.editor.updateSectionIndex(sections[m - 1].sectionFormat, sections[m - 1], true);\n if (sections.length === blocks.length) {\n break;\n }\n }\n }\n }\n for (var z = 0; z < sections.length; z++) {\n var containerWidget_1 = sections[z];\n var blockIndex = 0;\n var insertIndex = 0;\n if (z === sections.length - 1) {\n blockIndex = lastBockIndex;\n insertIndex = lastInsertIndex;\n }\n var block = blocks[z].childWidgets;\n for (var i = 0; i < block.length; i++) {\n block[i].containerWidget = containerWidget_1;\n block[i].index = blockIndex;\n containerWidget_1.childWidgets.splice(insertIndex, 0, block[i]);\n insertIndex++;\n blockIndex++;\n }\n lastBlock = block[block.length - 1];\n if (lastBlock.nextRenderedWidget && lastBlock.nextRenderedWidget.index !== lastBlock.index) {\n //Todo: update block index properly\n this.updateNextBlocksIndex(lastBlock, true);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block[0].index, containerWidget_1, undefined, false);\n }\n for (var k = 0; k < comments.length; k++) {\n var comment = comments[k];\n this.owner.editor.addCommentWidget(comment, false, this.owner.showComments, false);\n if (comment.replyComments.length > 0) {\n for (var z = 0; z < comment.replyComments.length; z++) {\n this.owner.commentReviewPane.addReply(comment.replyComments[z], false, false);\n }\n }\n }\n if (revision.length > 0) {\n this.updateRevisionCollection(revision);\n }\n this.owner.trackChangesPane.updateTrackChanges();\n var editRanges_1 = this.documentHelper.editRanges.get(user);\n // update content\n if (!isInEditRange) {\n this.tranformSelection(startParagrahInfo, endParagrahInfo);\n }\n else {\n if (editRanges_1.length > 0) {\n var positionInfo = this.selection.getPosition(editRanges_1[0]);\n // We can't able to predic the modified content inside editable region\n // So, it not possible to transform the position relativly.\n // So, move the selection to editable region end.\n this.selection.selectPosition(positionInfo.endPosition, positionInfo.endPosition);\n }\n }\n this.tranformHistoryPosition();\n this.selection.updateEditRangeCollection();\n this.updateLockRegion(user);\n this.documentHelper.removeEmptyPages();\n this.owner.viewer.updateScrollBars();\n this.owner.editor.isRemoveRevision = false;\n }\n }\n };\n CollaborativeEditing.prototype.updateRevisionCollection = function (revision) {\n var insertIndex = 0;\n var revisionStart = this.getRevisionTextPosition(revision[0]);\n var isInsert = false;\n if (this.owner.revisionsInternal.changes.length > 0 &&\n !isNullOrUndefined(revisionStart)) {\n for (var i = 0; i < this.owner.revisionsInternal.changes.length; i++) {\n var textPosition = this.getRevisionTextPosition(this.owner.revisionsInternal.changes[i]);\n if (textPosition.isExistAfter(revisionStart)) {\n insertIndex = i;\n isInsert = true;\n break;\n }\n }\n }\n for (var j = 0; j < revision.length; j++) {\n if (isInsert) {\n this.owner.revisionsInternal.changes.splice(insertIndex, 0, revision[j]);\n insertIndex++;\n }\n else {\n this.owner.revisionsInternal.changes.push(revision[j]);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n CollaborativeEditing.prototype.getRevisionTextPosition = function (revision) {\n if (revision.range.length > 0) {\n var range = revision.range[0];\n if (range instanceof ElementBox) {\n return this.selection.getElementPosition(range).startPosition;\n }\n else if (range instanceof WRowFormat) {\n var block = range.ownerBase.firstChild.firstChild;\n if (block.bodyWidget) {\n return this.selection.getTextPosBasedOnLogicalIndex(this.selection.getHierarchicalIndex(block, '0'));\n }\n }\n else if (range instanceof WCharacterFormat) {\n var paraWidget = range.ownerBase;\n if (paraWidget.lastChild.paragraph.bodyWidget) {\n var offset = paraWidget.getLength();\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(paraWidget.lastChild, offset);\n return startPosition;\n }\n }\n }\n return undefined;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n CollaborativeEditing.prototype.tranformSelection = function (startParagrahInfo, endParagraphInfo) {\n this.documentHelper.skipScrollToPosition = true;\n var startIndex = this.selection.getHierarchicalIndex(startParagrahInfo.paragraph, startParagrahInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n this.selection.select(startIndex, endIndex);\n };\n CollaborativeEditing.prototype.tranformHistoryPosition = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRanges = this.documentHelper.editRanges.get(this.owner.currentUser);\n var startElement = editRanges[0];\n var startBlock = this.getParentBlock(startElement.paragraph);\n var startOffset = this.selection.getHierarchicalIndex(startBlock, '0').split(';');\n if (!isNullOrUndefined(this.lockStart) && this.lockStart.length > 1) {\n var sectionDiff = parseInt(startOffset[0], 10) - parseInt(this.lockStart[0], 10);\n var blockDiff = parseInt(startOffset[1], 10) - parseInt(this.lockStart[1], 10);\n this.transformHistory(sectionDiff, blockDiff);\n }\n }\n };\n CollaborativeEditing.prototype.transformHistory = function (sectionDiff, blockDiff) {\n if (this.owner.enableEditorHistory) {\n var undoStack = this.owner.editorHistory.undoStack;\n if (!isNullOrUndefined(undoStack)) {\n for (var i = 0; i < undoStack.length; i++) {\n this.transformBaseHistoryInfo(undoStack[i], sectionDiff, blockDiff);\n }\n }\n var redoStack = this.owner.editorHistory.redoStack;\n if (!isNullOrUndefined(redoStack)) {\n for (var i = 0; i < redoStack.length; i++) {\n this.transformBaseHistoryInfo(redoStack[i], sectionDiff, blockDiff);\n }\n }\n }\n };\n CollaborativeEditing.prototype.transformBaseHistoryInfo = function (baseHistoryInfo, sectionDiff, blockDiff) {\n if (baseHistoryInfo.endPosition) {\n baseHistoryInfo.endPosition = this.tranformPosition(baseHistoryInfo.endPosition, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.insertPosition) {\n baseHistoryInfo.insertPosition = this.tranformPosition(baseHistoryInfo.insertPosition, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.selectionStart) {\n baseHistoryInfo.selectionStart = this.tranformPosition(baseHistoryInfo.selectionStart, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.selectionEnd) {\n baseHistoryInfo.selectionEnd = this.tranformPosition(baseHistoryInfo.selectionEnd, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo instanceof HistoryInfo) {\n var modifiedActions = baseHistoryInfo.modifiedActions;\n for (var j = 0; j < modifiedActions.length; j++) {\n this.transformBaseHistoryInfo(modifiedActions[j], sectionDiff, blockDiff);\n }\n }\n };\n CollaborativeEditing.prototype.tranformPosition = function (position, sectionDiff, blockDiff) {\n var index = position.split(';');\n index[0] = (parseInt(index[0], 10) + sectionDiff).toString();\n index[1] = (parseInt(index[1], 10) + blockDiff).toString();\n return index.join(';');\n };\n CollaborativeEditing.prototype.getParentBlock = function (block) {\n if (block.isInsideTable) {\n block = this.owner.documentHelper.layout.getParentTable(block);\n }\n return block.combineWidget(this.owner.viewer);\n };\n //#endregion\n //#region Remove existing items in locked region\n CollaborativeEditing.prototype.removeDuplicateCollection = function (removedBlock) {\n this.removeFieldInBlock(removedBlock, false, false);\n this.removeFieldInBlock(removedBlock, true, false);\n this.removeFieldInBlock(removedBlock, false, true);\n if (removedBlock instanceof TableWidget) {\n for (var i = 0; i < removedBlock.childWidgets.length; i++) {\n if (removedBlock.childWidgets[i] instanceof TableRowWidget) {\n var tableDelete = removedBlock.childWidgets[i];\n this.owner.editor.removeDeletedCellRevision(tableDelete);\n }\n }\n }\n else {\n this.owner.editor.removeRevisionForBlock(removedBlock, undefined, false, false);\n }\n };\n CollaborativeEditing.prototype.removeFieldInBlock = function (block, isBookmark, contentControl) {\n if (block instanceof TableWidget) {\n this.removeFieldTable(block, isBookmark, contentControl);\n }\n else {\n this.owner.editor.removeField(block, isBookmark, contentControl);\n this.removeComment(block);\n }\n };\n CollaborativeEditing.prototype.removeFieldTable = function (table, isBookmark, contentControl) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var widget = rowWidget.childWidgets[j];\n for (var i_1 = 0; i_1 < widget.childWidgets.length; i_1++) {\n this.removeFieldInBlock(widget.childWidgets[i_1], isBookmark, contentControl);\n }\n }\n }\n };\n CollaborativeEditing.prototype.removeComment = function (block) {\n if (this.documentHelper.comments.length > 0) {\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n var comment = this.documentHelper.comments[i];\n if (comment.commentStart.line.paragraph === block) {\n this.documentHelper.comments.splice(i, 1);\n this.owner.commentReviewPane.deleteComment(comment);\n i--;\n }\n }\n }\n };\n //#endregion\n CollaborativeEditing.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextBlock = block.getSplitWidgets().pop().nextRenderedWidget;\n var incrementCount = 1;\n if (nextBlock.bodyWidget.index === block.bodyWidget.index) {\n incrementCount = block.index - nextBlock.index + 1;\n }\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget) {\n var sectionIndex = block.containerWidget.index;\n var pageIndex = this.documentHelper.pages.indexOf(block.containerWidget.page);\n for (var j = pageIndex; j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n childWidget.index += incrementCount;\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n };\n /**\n * Update locked region highlight.\n *\n * @private\n * @param {string} user - Specified the user.\n * @param {boolean} isLocked - Specifies the isLocked.\n * @returns {void}\n */\n CollaborativeEditing.prototype.updateLockRegion = function (user, isLocked) {\n if (isNullOrUndefined(user)) {\n user = this.owner.currentUser;\n }\n isLocked = isNullOrUndefined(isLocked) ? true : isLocked;\n if (this.documentHelper.editRanges.containsKey(user)) {\n var editRanges = this.documentHelper.editRanges.get(user);\n if (editRanges.length === 1 && !isNullOrUndefined(editRanges[0].editRangeEnd)) {\n var editStart = editRanges[0];\n this.updateLockInfo(editStart.paragraph, editStart.editRangeEnd.paragraph, user, isLocked);\n }\n }\n };\n CollaborativeEditing.prototype.updateLockInfo = function (startBlock, endBlock, user, locked) {\n if (startBlock.isInsideTable) {\n startBlock = this.documentHelper.layout.getParentTable(startBlock);\n }\n if (endBlock.isInsideTable) {\n endBlock = this.documentHelper.layout.getParentTable(endBlock);\n }\n do {\n if (locked) {\n startBlock.lockedBy = user;\n startBlock.locked = locked;\n }\n else {\n startBlock.lockedBy = undefined;\n startBlock.locked = locked;\n }\n if (startBlock === endBlock) {\n break;\n }\n startBlock = startBlock.nextRenderedWidget;\n if (isNullOrUndefined(startBlock)) {\n break;\n }\n } while (startBlock);\n };\n /**\n * Pull pending actions from server.\n *\n * @returns {void}\n */\n CollaborativeEditing.prototype.pullAction = function () {\n var _this = this;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (this.owner) {\n var ajax = new XmlHttpRequestHandler();\n ajax.url = this.owner.serviceUrl + this.owner.serverActionSettings.getPendingActions;\n ajax.contentType = 'application/json;charset=UTF-8';\n ajax.onSuccess = function (result) {\n if (typeof result === 'string') {\n result = JSON.parse(result);\n }\n _this.updateAction(JSON.parse(result.data));\n hideSpinner(_this.owner.element);\n };\n ajax.onFailure = this.failureHandler.bind(this);\n ajax.onError = this.failureHandler.bind(this);\n ajax.customHeaders = this.owner.headers;\n showSpinner(this.owner.element);\n ajax.send(({ 'roomName': this.collaborativeEditingSettings.roomName, version: this.version }));\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Destroy collaborative editing module.\n *\n * @returns {void}\n */\n CollaborativeEditing.prototype.destroy = function () {\n this.owner = undefined;\n };\n return CollaborativeEditing;\n}());\nexport { CollaborativeEditing };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox } from '../viewer/page';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.isHeader = false;\n this.isFooter = false;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('(') > -1 || textToFind.indexOf(')') > -1 || textToFind.indexOf('.') > -1 || textToFind.indexOf('[') > -1\n || textToFind.indexOf(']') > -1 || textToFind.indexOf('$') > -1 || textToFind.indexOf('{') > -1\n || textToFind.indexOf('}') > -1 || textToFind.indexOf('*') > -1 || textToFind.indexOf('|') > -1\n || textToFind.indexOf('^') > -1 || textToFind.indexOf('?') > -1) {\n var text = '';\n for (var i = 0; i < textToFind.length; i++) {\n if (textToFind[i] === '(' || textToFind[i] === ')' || textToFind[i] === '.' || textToFind[i] === '['\n || textToFind[i] === ']' || textToFind[i] === '$' || textToFind[i] === '{' || textToFind[i] === '}'\n || textToFind[i] === '*' || textToFind[i] === '|' || textToFind[i] === '^' || textToFind[i] === '?') {\n text += '\\\\' + textToFind[i];\n }\n else {\n text += textToFind[i];\n }\n }\n textToFind = text;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return new RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n var eventArgs = { source: this.documentHelper.owner };\n this.documentHelper.owner.trigger(searchResultsChangeEvent, eventArgs);\n return results;\n }\n return undefined;\n };\n TextSearch.prototype.getElementInfo = function (inlineElement, indexInInline, includeNextLine) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n // eslint-disable no-constant-condition\n do {\n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, stringBuilder.length);\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n /* eslint-disable-next-line max-len */\n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n if (!isNullOrUndefined(inlineElement)) {\n if ((!isNullOrUndefined(includeNextLine) && !includeNextLine)) {\n var elementBoxes = inlineElement.line.children;\n var length_1 = inlineElement.line.children.length;\n if (elementBoxes.indexOf(inlineElement) < length_1 - 1) {\n inlineElement = inlineElement.nextNode;\n }\n else {\n inlineElement = undefined;\n break;\n }\n }\n else {\n inlineElement = inlineElement.nextNode;\n }\n }\n // eslint-disable-next-line no-constant-condition\n } while (true);\n var text = stringBuilder.toString();\n return { elementsWithOffset: spans, fullText: text };\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.updateMatchedTextLocation = function (matches, results, textInfo, indexInInline, inlines, isFirstMatch, selectionEnd, startPosition) {\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var isMatched = void 0;\n if (!(isNullOrUndefined(startPosition)) && match.index < startPosition) {\n continue;\n }\n var result = results.addResult();\n var spanKeys = textInfo.keys;\n for (var j = 0; j < spanKeys.length; j++) {\n var span = spanKeys[j];\n var startIndex = textInfo.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n isMatched = true;\n break;\n }\n }\n result.isHeader = this.isHeader;\n result.isFooter = this.isFooter;\n if (isFirstMatch) {\n results.currentIndex = 0;\n break;\n }\n else if (results.currentIndex < 0 && !isNullOrUndefined(selectionEnd) && (selectionEnd.isExistBefore(result.start) ||\n selectionEnd.isAtSamePosition(result.start))) {\n results.currentIndex = results.indexOf(result);\n }\n if (!isNullOrUndefined(startPosition) && isMatched) {\n break;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selection.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n /* eslint-disable-next-line max-len */\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selection.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n /* eslint-disable-next-line max-len */\n nextParagraphWidget = this.owner.selection.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.documentHelper.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n this.isHeader = false;\n this.isFooter = false;\n this.findInlineText(section, pattern, findOption, isFirstMatch, results, selectionEnd);\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var headerWidget = this.documentHelper.pages[i].headerWidgetIn;\n if (!isNullOrUndefined(headerWidget) && isNullOrUndefined(headerWidget.parentHeaderFooter)) {\n this.isHeader = true;\n this.isFooter = false;\n this.findInlineText(headerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var footerWidget = this.documentHelper.pages[i].footerWidgetIn;\n if (!isNullOrUndefined(footerWidget) && isNullOrUndefined(footerWidget.parentHeaderFooter)) {\n this.isHeader = false;\n this.isFooter = true;\n this.findInlineText(footerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInlineText = function (section, pattern, findOption, isFirstMatch, results, selectionEnd) {\n var paragraphWidget = this.owner.selection.getFirstParagraphBlock(section.childWidgets[0]);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && (paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var textInfo = this.getElementInfo(inlineElement, indexInInline);\n var text = textInfo.fullText;\n var matches = [];\n var spans = textInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable-next-line no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n this.updateMatchedTextLocation(matches, results, spans, indexInInline, inlines, isFirstMatch, selectionEnd);\n if (isFirstMatch) {\n return undefined;\n }\n /* eslint-disable-next-line max-len */\n var paragraphWidget = this.owner.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.documentHelper.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[i].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","/**\n * Search Result info\n */\nvar SearchResults = /** @class */ (function () {\n function SearchResults(search) {\n this.searchModule = search;\n }\n Object.defineProperty(SearchResults.prototype, \"length\", {\n /**\n * Gets the length of search results.\n *\n * @aspType int\n * @returns {number} - Returns search results length.\n */\n get: function () {\n return this.searchModule.textSearchResults.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchResults.prototype, \"index\", {\n /**\n * Gets the index of current search result.\n *\n * @aspType int\n * @returns {number} - Returns current search result index.\n */\n get: function () {\n return this.searchModule.textSearchResults.currentIndex;\n },\n /**\n * Set the index of current search result.\n *\n * @param {number} value - Specifies the search result index.\n * @aspType int\n */\n set: function (value) {\n if (this.length === 0 || value < 0 || value > this.searchModule.textSearchResults.length - 1) {\n return;\n }\n this.searchModule.textSearchResults.currentIndex = value;\n this.navigate();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get start and end offset of searched text results.\n *\n * @returns {TextSearchResults[]} - Returns the text search results.\n */\n SearchResults.prototype.getTextSearchResultsOffset = function () {\n var index = [];\n var searchIndex;\n for (var i = 0; i < this.searchModule.textSearchResults.innerList.length; i++) {\n searchIndex = this.getOffset(this.searchModule.textSearchResults.innerList[i]);\n index.push(searchIndex);\n }\n return index;\n };\n SearchResults.prototype.getOffset = function (innerList) {\n var start = innerList.start;\n var end = innerList.end;\n var blockInfo = this.searchModule.documentHelper.owner.selection.getParagraphInfo(start);\n /* eslint-disable-next-line max-len */\n var startIndex = this.searchModule.documentHelper.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.searchModule.documentHelper.owner.selection.getParagraphInfo(end);\n /* eslint-disable-next-line max-len */\n var endIndex = this.searchModule.documentHelper.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n return { 'startOffset': startIndex, 'endOffset': endIndex };\n };\n SearchResults.prototype.getModuleName = function () {\n return 'SearchResults';\n };\n /**\n * Replace text in current search result.\n *\n * @private\n * @param {string} textToReplace - text to replace\n * @returns {void}\n */\n SearchResults.prototype.replace = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceInternal(textToReplace);\n };\n /**\n * Replace all the instance of search result.\n *\n * @param {string} textToReplace text to replace\n * @returns {void}\n */\n SearchResults.prototype.replaceAll = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceAllInternal(textToReplace);\n };\n /**\n * @private\n * @returns {void}\n */\n SearchResults.prototype.navigate = function () {\n this.searchModule.navigate(this.searchModule.textSearchResults.currentSearchResult);\n this.searchModule.highlight(this.searchModule.textSearchResults);\n };\n /**\n * Clears all the instance of search result.\n *\n * @returns {void}\n */\n SearchResults.prototype.clear = function () {\n this.searchModule.textSearchResults.clearResults();\n this.searchModule.clearSearchHighlight();\n this.searchModule.viewer.renderVisiblePages();\n };\n return SearchResults;\n}());\nexport { SearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox } from '../viewer/page';\nimport { SearchWidgetInfo } from './text-search';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\nimport { SearchResults } from './search-results';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n function Search(owner) {\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n this.isHandledOddPageHeader = undefined;\n this.isHandledEvenPageHeader = undefined;\n this.isHandledOddPageFooter = undefined;\n this.isHandledEvenPageFooter = undefined;\n this.owner = owner;\n this.searchHighlighters = new Dictionary();\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n this.searchResultsInternal = new SearchResults(this);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"searchResults\", {\n /**\n * Gets the search results object.\n *\n * @aspType SearchResults\n * @returns {SearchResults} - Returns the search results object.\n */\n get: function () {\n return this.searchResultsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n //#region Find & Find All\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var result = this.textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(text || text === '')) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var results = this.textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n //#endregion\n //#region Replace and Replace All\n /**\n * Replace the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies text to replace.\n * @param {TextSearchResult} result - Specifies the result.\n * @param {TextSearchResults} results - Specifies the results.\n * @returns {number} - Returns replaced text count.\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.clearSearchHighlight();\n }\n this.navigate(result);\n var endPosition = this.documentHelper.selection.start;\n if (this.owner.enableTrackChanges && this.documentHelper.selection.start.currentWidget) {\n var inline = undefined;\n /* eslint-disable-next-line max-len */\n var inlineElement = this.documentHelper.selection.end.currentWidget.getInline(this.owner.selection.start.offset, 0);\n inline = inlineElement.element;\n if (inline.revisions.length > 0) {\n this.isRepalceTracking = true;\n }\n }\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertTextInternal(replaceText, true);\n var endTextPosition = result.end;\n var startPosition = new TextPosition(this.viewer.owner);\n if (endTextPosition.currentWidget.children.length === 0) {\n var linewidget = endTextPosition.currentWidget.paragraph.childWidgets[0];\n startPosition.setPositionParagraph(linewidget, endPosition.offset - replaceText.length);\n }\n else {\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n }\n this.documentHelper.selection.selectRange(endPosition, startPosition);\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n return 1;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textToFind = this.textSearchResults.currentSearchResult.text;\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(textToFind, findOptions);\n var index = this.owner.selection.end.getHierarchicalIndexInternal();\n var result = this.viewer.owner.searchModule.textSearch.findNext(pattern, findOptions, index);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, this.textSearchResults);\n index = this.owner.selection.end.getHierarchicalIndexInternal();\n result = this.textSearch.findNext(textToFind, findOptions, index);\n if (result) {\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.navigate(result);\n }\n }\n };\n /**\n * Replace all the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies the replace text.\n * @param {TextSearchResults} results - Specfies the results.\n * @returns {number} - Returns the replace count.\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(this.owner.selection, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n var text = results.innerList[0].text;\n for (var i = count - 1; i >= 0; i--) {\n var result = results.innerList[i];\n if (result.start.currentWidget.children.length === 0) {\n results = this.textSearch.findAll(text);\n i = results.length;\n }\n else {\n this.navigate(results.innerList[i]);\n this.owner.editorModule.insertTextInternal(replaceText, true);\n results.innerList[i].destroy();\n }\n //if (result.isHeader || result.isFooter) {\n // eslint-disable-next-line max-len\n //this.documentHelper.layout.updateHeaderFooterToParent(this.documentHelper.selection.start.paragraph.bodyWidget as HeaderFooterWidget);\n //}\n }\n if (this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) {\n this.owner.editorHistory.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n this.searchResults.clear();\n return count;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceAllInternal = function (textToReplace, findOptions) {\n if (isNullOrUndefined(textToReplace)) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n if (this.textSearchResults.length > 0) {\n this.navigate(this.textSearchResults.innerList[this.textSearchResults.currentIndex]);\n this.highlight(this.textSearchResults);\n this.replaceAll(textToReplace, this.textSearchResults);\n }\n };\n //#endregion\n //#region Highlight Search Result\n /**\n * @private\n * @param {TextSearchResult} textSearchResult - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.navigate = function (textSearchResult) {\n if (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(start) &&\n !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selection.selectRange(start, end);\n }\n }\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.highlight = function (textSearchResults) {\n this.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n };\n Search.prototype.highlightResult = function (result) {\n this.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /* eslint-disable */\n Search.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n var lineWidget = this.documentHelper.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.documentHelper.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.documentHelper.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.documentHelper.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var width = 0;\n width = Math.abs(right - left);\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBox = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBox && elementBox.length > 1) {\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top);\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property. \n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.documentHelper.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n elementIsRTL = false;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n // Highlight the Paragrph mark for last line.\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n }\n }\n }\n }\n };\n Search.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selection.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.documentHelper.containerContext;\n };\n Search.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n var collection = this.searchHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n Search.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.documentHelper.selection.getTop(lineWidget);\n }\n var left = this.documentHelper.selection.getLeft(lineWidget);\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (lineWidget === endLine) {\n //Selection ends in current line.\n var right = 0;\n // Handled the highlighting using the element box highlighting approach as genric for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBox = this.documentHelper.selection.getElementsBackward(lineWidget, endElement, endElement, widget.bidi);\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, element, 0);\n if (element === endElement) {\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, endIndex);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, elementIsRTL ? right : left, top);\n }\n return;\n }\n else {\n right = this.documentHelper.selection.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, isRtlText ? right : left, top);\n return;\n }\n }\n else {\n width = this.documentHelper.selection.getWidth(lineWidget, true) - (left - widget.x);\n this.createHighlightBorder(lineWidget, width, left, top);\n top += lineWidget.height;\n }\n }\n };\n //#endregion\n //#region Get find result view\n /**\n * @private\n * @param {string} result - Specified the result.\n * @returns {void}\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specified text search result.\n * @returns {void}\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selection.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selection.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selection.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n var headerFooterString = '';\n if (result.isHeader) {\n headerFooterString = '' + 'Header' + ': ' + '';\n }\n else if (result.isFooter) {\n headerFooterString = '' + 'Footer' + ': ' + '';\n }\n else {\n headerFooterString = '';\n headerFooterString = '';\n this.isHandledOddPageHeader = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageFooter = true;\n }\n var listElement = '';\n var page = result.documentHelper.selection.getPage(result.start.paragraph);\n if (isNullOrUndefined(this.isHandledEvenPageHeader) && isNullOrUndefined(this.isHandledEvenPageFooter)) {\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n }\n else if (isNullOrUndefined(this.isHandledOddPageHeader) && isNullOrUndefined(this.isHandledOddPageFooter)) {\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n }\n if (result.isHeader) {\n if (page.headerWidget.headerFooterType === 'FirstPageHeader' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.headerWidget.headerFooterType === 'EvenHeader' && this.isHandledEvenPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageHeader = false;\n }\n else if (page.headerWidget.headerFooterType === 'OddHeader' && this.isHandledOddPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageHeader = false;\n }\n }\n else if (result.isFooter) {\n if (page.footerWidget.headerFooterType === 'FirstPageFooter' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.footerWidget.headerFooterType === 'EvenFooter' && this.isHandledEvenPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageFooter = false;\n }\n else if (page.footerWidget.headerFooterType === 'OddFooter' && this.isHandledOddPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageFooter = false;\n }\n }\n else if (!result.isHeader && !result.isFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n this.addSearchResultItems(listElement);\n }\n };\n //#endregion\n /**\n * Clears search highlight.\n *\n * @private\n * @returns {void}\n */\n Search.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n this.textSearchResults = undefined;\n this.owner = undefined;\n };\n return Search;\n}());\nexport { Search };\n","import { createElement, isNullOrUndefined, L10n, classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n function OptionsPane(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n // private regular: CheckBox = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.matchDivReplaceText = 'No matches';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * @returns {void}\n */\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult(false);\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * @returns {void}\n */\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n };\n /**\n * Fires on key down on options pane.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @returns {void}\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n _this.hideMatchDiv();\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 6) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.documentHelper.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.documentHelper.owner.selection != null) {\n var selectionText = _this.documentHelper.owner.selection.text;\n if (!_this.documentHelper.owner.selection.isEmpty) {\n if (_this.documentHelper.owner.selection.isForward) {\n _this.documentHelper.owner.selection.selectContent(_this.documentHelper.owner.selection.start, true);\n }\n else {\n _this.documentHelper.owner.selection.selectContent(_this.documentHelper.owner.selection.end, true);\n }\n }\n if (!isNullOrUndefined(results) && !isNullOrUndefined(results.currentSearchResult)) {\n var result = results.currentSearchResult;\n _this.documentHelper.owner.searchModule.navigate(result);\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.documentHelper.owner.searchModule.replace(replace, result, results);\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, index);\n if (!isNullOrUndefined(_this.results) && !isNullOrUndefined(_this.results.currentSearchResult)) {\n _this.documentHelper.owner.searchModule.navigate(_this.results.currentSearchResult);\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n _this.documentHelper.owner.findResultsList = [];\n if (!isNullOrUndefined(_this.results) && _this.results.innerList.length > 0) {\n _this.navigateSearchResult(true);\n }\n else {\n _this.resultsListBlock.innerHTML = '';\n }\n }\n else {\n _this.documentHelper.owner.search.findAll(findText, _this.findOption);\n }\n }\n else {\n _this.documentHelper.owner.search.findAll(findText, _this.findOption);\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n };\n /**\n * Fires on replace all.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = '';\n };\n /**\n * Fires on search icon.\n *\n * @private\n * @returns {void}\n */\n this.searchIconClickInternal = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inputElement = document.getElementById(_this.documentHelper.owner.containerId + '_option_search_text_box');\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n _this.hideMatchDiv();\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.matchDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n _this.onEnableDisableReplaceButton();\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var patterns = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n var start = _this.results.innerList[_this.results.currentIndex].start;\n var end = _this.results.innerList[_this.results.currentIndex].end;\n _this.documentHelper.scrollToPosition(start, end, true);\n _this.navigateSearchResult(false);\n _this.getMessageDivHeight();\n var height = _this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = _this.optionsPane.offsetHeight - _this.findTab.offsetHeight;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n *\n * @private\n * @returns {void}\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var selectionEnd = _this.documentHelper.owner.selection.end;\n var nextResult = void 0;\n var currentIndex = 0;\n if (selectionEnd.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.currentIndex;\n }\n for (var i = currentIndex; i < _this.results.length; i++) {\n var result = _this.results.innerList[i];\n if (selectionEnd.isExistBefore(result.start) || selectionEnd.isAtSamePosition(result.start)) {\n nextResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(nextResult)) {\n _this.results.currentIndex = 0;\n nextResult = _this.results.innerList[0];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(nextResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n *\n * @private\n * @returns {void}\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var previousResult = void 0;\n var selectionStart = _this.documentHelper.owner.selection.start;\n var currentIndex = _this.results.currentIndex;\n if (selectionStart.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.length - 1;\n }\n for (var i = currentIndex; i >= 0; i--) {\n var result = _this.results.innerList[i];\n if (selectionStart.isExistAfter(result.start) || _this.documentHelper.owner.selection.end.isAtSamePosition(result.start)) {\n previousResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(previousResult)) {\n _this.results.currentIndex = _this.results.length - 1;\n previousResult = _this.results.innerList[_this.results.currentIndex];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(previousResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n *\n * @private\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @returns {void}\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n }\n };\n /**\n * Close the optios pane.\n *\n * @private\n * @returns {void}\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n };\n /**\n * Fires on results list block.\n *\n * @private\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @returns {void}\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (index + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.documentHelper.owner.searchModule.navigate(currentelement);\n _this.documentHelper.owner.searchModule.highlight(_this.results);\n if (list) {\n list.focus();\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(OptionsPane.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n *\n * @private\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @param {boolean} isRtl - Specifies the Rtl.\n * @returns {void}\n */\n /* eslint-disable */\n OptionsPane.prototype.initOptionsPane = function (localeValue, isRtl) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n //parent\n this.findTab = createElement('div', { id: this.documentHelper.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n //head\n this.searchDiv = createElement('div', {\n className: 'e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.findTab.appendChild(this.searchDiv);\n this.closeButton = createElement('button', {\n className: 'e-de-op-close-button e-de-close-icon e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button' }\n });\n this.findTab.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n // tab\n var tabDiv = createElement('div');\n this.findTab.appendChild(tabDiv);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n var items = [\n { header: { text: this.findTabButton } },\n { header: { text: this.replaceTabButton } }\n ];\n this.tabInstance = new Tab({ items: items, enableRtl: isRtl, selected: this.selectedTabItem.bind(this) });\n this.tabInstance.isStringTemplate = true;\n this.tabInstance.appendTo(tabDiv);\n //search\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content' });\n this.findTab.appendChild(this.findTabContentDiv);\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.documentHelper.owner.containerId + '_option_search_text_box', attrs: { placeholder: localeValue.getConstant('Search for') } });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.documentHelper.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n //match\n var div = createElement('div', { className: 'e-de-op-more-less' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_matchCase'\n });\n div.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: localeValue.getConstant('Match case'), enableRtl: isRtl, checked: false, change: this.matchChange.bind(this) });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n var wholeWordLabel;\n if (isRtl) {\n wholeWordLabel = '_e-de-rtl';\n }\n else {\n wholeWordLabel = '_e-de-ltr';\n }\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_wholeWord' + wholeWordLabel\n });\n div.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: localeValue.getConstant('Whole words'), enableRtl: isRtl, checked: false, change: this.wholeWordsChange.bind(this) });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTab.appendChild(div);\n //Replace tab\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n this.findTab.appendChild(this.replaceTabContentDiv);\n this.createReplacePane(isRtl);\n //container\n this.resultContainer = createElement('div', { styles: 'width:85%;display:block;', className: 'e-de-op-result-container' });\n this.findTab.appendChild(this.resultContainer);\n this.messageDiv = createElement('div', { className: this.documentHelper.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.documentHelper.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n //resultblock-finding\n var resultDiv = createElement('div', { id: this.documentHelper.owner.containerId + '_resultDiv' });\n this.optionsPane.appendChild(resultDiv);\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'display:block;' });\n resultDiv.appendChild(this.findDiv);\n this.resultsListBlock = createElement('div', { id: this.documentHelper.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n this.onWireEvents();\n if (isRtl) {\n this.optionsPane.classList.add('e-de-rtl');\n this.closeButton.classList.add('e-de-rtl');\n this.searchDiv.classList.add('e-de-rtl');\n }\n };\n OptionsPane.prototype.createReplacePane = function (isRtl) {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input',\n attrs: { placeholder: this.localeValue.getConstant('Replace with') }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDivTextAlign;\n var replaceButtonMargin;\n if (isRtl) {\n replaceButtonDivTextAlign = 'text-align:left';\n replaceButtonMargin = 'margin-left:10px';\n }\n else {\n replaceButtonDivTextAlign = 'text-align:right';\n replaceButtonMargin = 'margin-right:10px';\n }\n var replaceButtonDiv = createElement('div', { styles: replaceButtonDivTextAlign, className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: replaceButtonMargin,\n innerHTML: this.localeValue.getConstant(this.replaceButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.selectedTabItem = function (args) {\n var contentParent = this.findTab.getElementsByClassName('e-content').item(0);\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = contentParent.children[0];\n var nextTab = contentParent.children[1];\n var element = previousTab.firstElementChild;\n if (element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n nextTab.appendChild(element);\n }\n }\n var selectedElement = contentParent.children[0];\n if (!isNullOrUndefined(selectedElement)) {\n if (args.selectedIndex === 0) {\n this.isOptionsPane = true;\n this.onFindPane();\n }\n else {\n this.isOptionsPane = false;\n this.onReplacePane();\n }\n }\n };\n OptionsPane.prototype.navigateSearchResult = function (navigate) {\n if (navigate) {\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n }\n this.documentHelper.owner.searchModule.highlight(this.results);\n this.documentHelper.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.documentHelper.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndexValue + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Apply find option based on whole words value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.wholeWordsChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else {\n this.findOption = 'None';\n }\n this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.matchChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else {\n this.findOption = 'None';\n }\n this.searchOptionChange();\n };\n // /**\n // * Apply find options based on regular value.\n // * @param {ChangeEventArgs} args - Specifies the search options value.\n // * @private\n // */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Binding events from the element when optins pane creation.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onWireEvents = function () {\n this.searchIcon.addEventListener('click', this.searchIconClickInternal);\n this.navigateToNextResult.addEventListener('click', this.navigateNextResultButtonClick);\n this.navigateToPreviousResult.addEventListener('click', this.navigatePreviousResultButtonClick);\n this.searchInput.addEventListener('keydown', this.onKeyDown);\n this.searchInput.addEventListener('keyup', this.onEnableDisableReplaceButton);\n this.resultsListBlock.addEventListener('click', this.resultListBlockClick);\n this.closeButton.addEventListener('click', this.close);\n this.replaceButton.addEventListener('click', this.onReplaceButtonClick);\n this.replaceAllButton.addEventListener('click', this.onReplaceAllButtonClick);\n };\n /**\n * Fires on key down actions done.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n var inputElement = document.getElementById(this.documentHelper.owner.containerId + '_option_search_text_box');\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var height = this.isOptionsPane ? 215 : 292;\n this.clearSearchResultItems();\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.documentHelper.owner.searchModule.highlight(results);\n this.documentHelper.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'block';\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n var list = this.documentHelper.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndex + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = this.focusedElement.indexOf(this.navigateToNextResult);\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Enable find pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onFindPane = function () {\n this.replaceDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n if (!isNullOrUndefined(this.results) && this.results.length === 0) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock.style.display = 'none';\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n }\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - (this.findTab.offsetHeight - this.replaceTabContentDiv.offsetHeight);\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.replaceTabContentDiv.style.display = 'none';\n this.findDiv.style.display = 'block';\n this.messageDiv.style.display = 'block';\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n this.focusedIndex = 1;\n this.searchInput.select();\n this.getMessageDivHeight();\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Enable replace pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onReplacePane = function () {\n this.findDiv.style.display = 'block';\n this.replaceDiv.style.display = 'block';\n this.replaceTabContentDiv.style.display = 'block';\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.isOptionsPane = false;\n if (this.searchInput.value.length !== 0) {\n this.replaceButton.disabled = false;\n this.replaceAllButton.disabled = false;\n }\n else {\n this.replaceButton.disabled = true;\n this.replaceAllButton.disabled = true;\n }\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n this.focusedIndex = 1;\n if (this.searchInput.value === '') {\n this.searchInput.select();\n }\n else {\n this.replaceWith.select();\n }\n this.getMessageDivHeight();\n };\n /**\n * Replace all.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n var count = isNullOrUndefined(results) ? 0 : results.length;\n this.documentHelper.owner.searchModule.replaceAll(replace, results);\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant('All Done') + '!';\n this.occurrenceDiv.style.display = 'block';\n this.occurrenceDiv.innerHTML = this.localeValue.getConstant('We replaced all') + ' ' + count + ' ' + this.localeValue.getConstant('instances') + ' ' + this.localeValue.getConstant('of') + ' \"' + findText + '\" ' + this.localeValue.getConstant('with') + ' \"' + replaceText + '\" ';\n }\n };\n OptionsPane.prototype.hideMatchDiv = function () {\n this.matchDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n };\n OptionsPane.prototype.updateListItems = function (textSearchResult) {\n var searchElements = this.resultsListBlock.getElementsByClassName('e-de-search-result-hglt');\n for (var j = 0; j < searchElements.length; j++) {\n var list = searchElements[j];\n classList(list, ['e-de-search-result-item'], ['e-de-search-result-hglt']);\n classList(list.children[0], [], ['e-de-op-search-word-text']);\n }\n var listElement = this.resultsListBlock.children[this.results.currentIndex];\n classList(listElement, ['e-de-search-result-hglt'], ['e-de-search-result-item']);\n classList(listElement.children[0], ['e-de-op-search-word-text'], []);\n this.scrollToPosition(listElement);\n this.documentHelper.owner.searchModule.navigate(textSearchResult);\n this.documentHelper.owner.searchModule.highlight(this.results);\n };\n /**\n * Scrolls to position.\n *\n * @private\n * @param {HTMLElement} list - Specifies the list element.\n * @returns {void}\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 1;\n };\n /**\n * Show or hide option pane based on boolean value.\n *\n * @private\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @returns {void}\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.documentHelper.owner.selectionModule)) {\n if (show) {\n this.localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localeValue.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue, this.documentHelper.owner.enableRtl);\n //Add Option Pane\n var isRtl = this.documentHelper.owner.enableRtl;\n var optionsPaneContainerStyle = void 0;\n if (isRtl) {\n optionsPaneContainerStyle = 'display:inline-flex;direction:rtl;';\n }\n else {\n optionsPaneContainerStyle = 'display:inline-flex;';\n }\n this.documentHelper.optionsPaneContainer.setAttribute('style', optionsPaneContainerStyle);\n this.documentHelper.optionsPaneContainer.insertBefore(this.documentHelper.owner.optionsPaneModule.optionsPane, this.documentHelper.viewerContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(1);\n }\n else {\n this.tabInstance.hideTab(1, false);\n }\n if (this.isReplace && !this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.select(1);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(0);\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n var textBox = document.getElementById(this.documentHelper.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.documentHelper.owner.selection.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.documentHelper.selection.caret.style.display = 'none';\n this.focusedIndex = 1;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.documentHelper.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.documentHelper.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.documentHelper.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n }\n this.documentHelper.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.documentHelper.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n this.documentHelper.updateFocus();\n this.documentHelper.selection.caret.style.display = 'block';\n }\n }\n };\n /**\n * Clears search results.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.documentHelper.owner.findResultsList)) {\n this.documentHelper.owner.findResultsList = [];\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n // if (this.regularInput) {\n // this.regularInput.innerHTML = '';\n // this.regular = undefined;\n // }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n this.documentHelper = undefined;\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @returns {void}\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { WShading } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/* eslint-disable */\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.fontColorIn = undefined;\n this.allCapsIn = undefined;\n /**\n * @private\n */\n this.boldBidi = undefined;\n /**\n * @private\n */\n this.italicBidi = undefined;\n /**\n * @private\n */\n this.fontSizeBidi = 0;\n /**\n * @private\n */\n this.bidi = undefined;\n /**\n * @private\n */\n this.bdo = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets the font size of selected contents.\n *\n * @aspType int\n */\n get: function () {\n return this.fontSizeIn;\n },\n /**\n * Sets the font size of selected contents.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontFamilyIn;\n },\n /**\n * Sets the font family of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontColorIn;\n },\n /**\n * Sets the font color of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.boldIn;\n },\n /**\n * Sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.italicIn;\n },\n /**\n * Sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n /**\n * Sets the strikethrough property of selected contents.\n */\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n /**\n * Sets the baseline alignment property of selected contents.\n */\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n /**\n * Sets the underline style of selected contents.\n */\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n /**\n * Sets the highlight color of selected contents.\n */\n set: function (value) {\n if (value === this.highlightColorIn && value !== \"NoColor\") {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"allCaps\", {\n /**\n * Gets or sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.allCapsIn;\n },\n /**\n * Sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allCapsIn) {\n return;\n }\n this.allCapsIn = value;\n this.notifyPropertyChanged('allCaps');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n case 'allCaps':\n return this.allCaps;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || (this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) ||\n !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n *\n * @param {WCharacterFormat} format\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n this.bidi = format.bidi;\n this.bdo = format.bdo;\n this.boldBidi = format.boldBidi;\n this.italicBidi = format.italicBidi;\n this.fontFamilyBidi = format.fontFamilyBidi;\n this.fontSizeBidi = format.fontSizeBidi;\n this.allCaps = format.allCaps;\n };\n /**\n * Combines the format.\n *\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n if (!isNullOrUndefined(this.boldBidi) && this.boldBidi !== format.boldBidi) {\n this.boldBidi = undefined;\n }\n if (!isNullOrUndefined(this.italicBidi) && this.italicBidi !== format.italicBidi) {\n this.italicBidi = undefined;\n }\n if (this.fontSizeBidi !== 0 && this.fontSizeBidi !== format.fontSizeBidi) {\n this.fontSizeBidi = 0;\n }\n if (!isNullOrUndefined(this.fontFamilyBidi) && this.fontFamilyBidi !== format.fontFamilyBidi) {\n this.fontFamilyBidi = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.bdo) && this.bdo !== format.bdo) {\n this.bdo = undefined;\n }\n if (!isNullOrUndefined(this.allCaps) && this.allCaps !== format.allCaps) {\n this.allCaps = undefined;\n }\n };\n /**\n * Clones the format.\n *\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n this.bidi = selectionCharacterFormat.bidi;\n this.bdo = selectionCharacterFormat.bdo;\n this.boldBidi = selectionCharacterFormat.boldBidi;\n this.italicBidi = selectionCharacterFormat.italicBidi;\n this.fontSizeBidi = selectionCharacterFormat.fontSizeBidi;\n this.fontFamilyBidi = selectionCharacterFormat.fontFamilyBidi;\n this.allCaps = selectionCharacterFormat.allCaps;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n *\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor\n && this.allCaps === format.allCaps);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n /**\n * Destroys the maintained resources.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection Border implementation\n */\nvar SelectionBorder = /** @class */ (function () {\n /**\n * @param SelectionBorders\n * @private\n */\n function SelectionBorder(selection, borderType, node) {\n this.colorIn = undefined;\n this.lineStyleIn = undefined;\n this.lineWidthIn = undefined;\n this.shadowIn = undefined;\n this.spaceIn = undefined;\n this.borderType = borderType;\n this.ownerBase = node;\n this.selection = selection;\n }\n Object.defineProperty(SelectionBorder.prototype, \"color\", {\n /**\n * Gets or sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.colorIn;\n },\n /**\n * Sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.colorIn) {\n return;\n }\n this.colorIn = value;\n this.notifyPropertyChanged(\"color\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineStyle\", {\n /**\n * Gets or sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n get: function () {\n return this.lineStyleIn;\n },\n /**\n * Sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n set: function (value) {\n if (value === this.lineStyleIn) {\n return;\n }\n this.lineStyleIn = value;\n this.notifyPropertyChanged(\"lineStyle\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineWidth\", {\n /**\n * Gets or sets the lineWidth for selected paragraph borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.lineWidthIn;\n },\n /**\n * Sets the lineWidth for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.lineWidthIn) {\n return;\n }\n this.lineWidthIn = value;\n this.notifyPropertyChanged(\"lineWidth\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"shadow\", {\n /**\n * Gets or sets the shadow for selected paragraph borders.\n *\n * @default undefined\n * @aspType boolean\n */\n get: function () {\n return this.shadowIn;\n },\n /**\n * Sets the shadow for selected paragraphs borders.\n *\n * @default undefined\n * @aspType boolean\n */\n set: function (value) {\n if (value === this.shadowIn) {\n return;\n }\n this.shadowIn = value;\n this.notifyPropertyChanged(\"shadow\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"space\", {\n /**\n * Gets or sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.spaceIn;\n },\n /**\n * Sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.spaceIn) {\n return;\n }\n this.spaceIn = value;\n this.notifyPropertyChanged('space');\n },\n enumerable: true,\n configurable: true\n });\n /**\n *Copies the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.copyFormat = function (border) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n };\n /**\n * Combines the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.combineFormat = function (border) {\n if (!isNullOrUndefined(this.color) && this.color !== border.color) {\n this.color = undefined;\n }\n if (!isNullOrUndefined(this.lineStyle) && this.lineStyle !== border.lineStyle) {\n this.lineStyle = undefined;\n }\n if (!isNullOrUndefined(this.lineWidth) && this.lineWidth !== border.lineWidth) {\n this.lineWidth = undefined;\n }\n if (!isNullOrUndefined(this.shadow) && this.shadow !== border.shadow) {\n this.shadow = undefined;\n }\n if (!isNullOrUndefined(this.space) && this.space !== border.space) {\n this.space = undefined;\n }\n };\n SelectionBorder.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'color':\n return this.color;\n case 'lineStyle':\n return this.lineStyle;\n case 'lineWidth':\n return this.lineWidth;\n case 'space':\n return this.space;\n case 'shadow':\n return this.shadow;\n }\n return undefined;\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n * @returns {void}\n */\n SelectionBorder.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editor = this.selection.owner.editorModule;\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n editor.applyParagraphBorders(propertyName, this.borderType, propertyValue);\n }\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.colorIn)) {\n this.colorIn = undefined;\n }\n if (!isNullOrUndefined(this.lineStyleIn)) {\n this.lineStyleIn = undefined;\n }\n if (!isNullOrUndefined(this.lineWidthIn)) {\n this.lineWidthIn = undefined;\n }\n if (!isNullOrUndefined(this.spaceIn)) {\n this.spaceIn = undefined;\n }\n if (!isNullOrUndefined(this.shadowIn)) {\n this.shadowIn = undefined;\n }\n };\n return SelectionBorder;\n}());\nexport { SelectionBorder };\n/**\n * Selection Borders implementation\n */\nvar SelectionBorders = /** @class */ (function () {\n /**\n * @param Object\n * @private\n */\n function SelectionBorders(selection, node) {\n this.ownerBase = undefined;\n this.ownerBase = node;\n this.selection = selection;\n this.topIn = new SelectionBorder(this.selection, 'topBorder', this);\n this.bottomIn = new SelectionBorder(this.selection, 'bottomBorder', this);\n this.rightIn = new SelectionBorder(this.selection, 'rightBorder', this);\n this.leftIn = new SelectionBorder(this.selection, 'leftBorder', this);\n this.horizontalIn = new SelectionBorder(this.selection, 'horizontalBorder', this);\n this.verticalIn = new SelectionBorder(this.selection, 'verticalBorder', this);\n }\n Object.defineProperty(SelectionBorders.prototype, \"top\", {\n /**\n * Gets the top Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.topIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"bottom\", {\n /**\n * Gets the bottom Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.bottomIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"left\", {\n /**\n * Gets the left Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.leftIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"right\", {\n /**\n * Gets the right Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.rightIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"horizontal\", {\n /**\n * Gets the horizontal Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.horizontalIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"vertical\", {\n /**\n * Gets the vertical Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.verticalIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WBorders} borders\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.copyFormat = function (borders) {\n this.top.copyFormat(borders.top);\n this.bottom.copyFormat(borders.bottom);\n this.left.copyFormat(borders.left);\n this.right.copyFormat(borders.right);\n this.horizontal.copyFormat(borders.horizontal);\n this.vertical.copyFormat(borders.vertical);\n };\n /**\n * Combines the format.\n *\n * @param {WBorders} borders\n * @private\n */\n SelectionBorders.prototype.combineFormat = function (borders) {\n this.top.combineFormat(borders.top);\n this.bottom.combineFormat(borders.bottom);\n this.left.combineFormat(borders.left);\n this.right.combineFormat(borders.right);\n this.vertical.combineFormat(borders.vertical);\n this.horizontal.combineFormat(borders.horizontal);\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n this.topIn = undefined;\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.bottomIn.destroy();\n this.bottomIn = undefined;\n }\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n this.leftIn = undefined;\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n this.rightIn = undefined;\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n this.horizontalIn = undefined;\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n this.verticalIn = undefined;\n }\n };\n return SelectionBorders;\n}());\nexport { SelectionBorders };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @param selection\n * @param documentHelper\n * @private\n */\n function SelectionParagraphFormat(selection, documentHelper) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.spaceAfterAutoIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.textAlignmentIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.bidiIn = undefined;\n this.keepWithNextIn = undefined;\n this.keepLinesTogetherIn = undefined;\n this.widowControlIn = undefined;\n this.contextualSpacingIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.documentHelper = documentHelper;\n this.bordersIn = new SelectionBorders(this.selection, this);\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"borders\", {\n /**\n * Gets the borders for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorders\n */\n get: function () {\n return this.bordersIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightIndentIn;\n },\n /**\n * Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n /**\n * Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n /**\n * Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.afterSpacingIn;\n },\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n /**\n * Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceAfterAuto\", {\n /**\n * Gets or Sets the space after auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceAfterAutoIn;\n },\n /**\n * Sets the space after auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceAfterAutoIn) {\n return;\n }\n this.spaceAfterAutoIn = value;\n this.notifyPropertyChanged('spaceAfterAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceBeforeAuto\", {\n /**\n * Gets or Sets the space before auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceBeforeAutoIn;\n },\n /**\n * Sets the space before auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceBeforeAutoIn) {\n return;\n }\n this.spaceBeforeAutoIn = value;\n this.notifyPropertyChanged('spaceBeforeAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.lineSpacingIn;\n },\n /**\n * Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n /**\n * Gets or Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"bidi\", {\n /**\n * Gets or Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepWithNext\", {\n /**\n * Gets or sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if the specified paragraph remains on the same page as the paragraph that follows it; otherwise, `false`.\n */\n get: function () {\n return this.keepWithNextIn;\n },\n /**\n * Sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepWithNextIn = value;\n this.notifyPropertyChanged('keepWithNext');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepLinesTogether\", {\n /**\n * Gets or sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if all lines in the specified paragraphs remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.keepLinesTogetherIn;\n },\n /**\n * Sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepLinesTogetherIn = value;\n this.notifyPropertyChanged('keepLinesTogether');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"widowControl\", {\n /**\n * Gets or sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n * @returns {boolean} - `true` if the first and last lines of the paragraph are to remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.widowControlIn;\n },\n /**\n * Sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n */\n set: function (value) {\n this.widowControlIn = value;\n this.notifyPropertyChanged('widowControl');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"contextualSpacing\", {\n /**\n * Gets or sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n get: function () {\n return this.contextualSpacingIn;\n },\n /**\n * Sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n set: function (value) {\n this.contextualSpacingIn = value;\n this.notifyPropertyChanged('contextualSpacing');\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.validateLineSpacing = function () {\n if (this.lineSpacingType !== 'Multiple' && this.lineSpacingIn < 12) {\n return true;\n }\n return false;\n };\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n *\n * @aspType string\n */\n get: function () {\n var listFormat = undefined;\n var list = this.documentHelper.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listTextElement = this.selection.getListTextElementBox(this.selection.start.paragraph);\n var listText = listTextElement ? listTextElement.text : '';\n listFormat = listText;\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'spaceAfterAuto':\n return this.spaceAfterAuto;\n case 'spaceBeforeAuto':\n return this.spaceBeforeAuto;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n case 'bidi':\n return this.bidi;\n case 'contextualSpacing':\n return this.contextualSpacing;\n case 'keepWithNext':\n return this.keepWithNext;\n case 'keepLinesTogether':\n return this.keepLinesTogether;\n case 'widowControl':\n return this.widowControl;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n if (propertyName === 'lineSpacing' || propertyName === 'lineSpacingType') {\n var editorHistory = this.selection.owner.editorHistory;\n if (!(editorHistory && (editorHistory.isUndoing || editorHistory.isRedoing)) && this.validateLineSpacing()) {\n this.selection.owner.editorHistory.initComplexHistory(this.selection, 'LineSpacing');\n if (propertyName === 'lineSpacing') {\n this.lineSpacingTypeIn = 'Multiple';\n var value_1 = this.getPropertyValue('lineSpacingType');\n editorModule.onApplyParagraphFormat('lineSpacingType', value_1, false, false);\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n this.lineSpacingIn = 12;\n editorModule.onApplyParagraphFormat('lineSpacing', this.getPropertyValue('lineSpacing'), false, false);\n }\n this.selection.owner.editorHistory.updateComplexHistory();\n return;\n }\n }\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.documentHelper.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WParagraphFormat} format\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.spaceAfterAuto = format.spaceAfterAuto;\n this.spaceBeforeAuto = format.spaceBeforeAuto;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n this.bidi = format.bidi;\n this.keepLinesTogether = format.keepLinesTogether;\n this.keepWithNext = format.keepWithNext;\n this.widowControl = format.widowControl;\n this.contextualSpacing = format.contextualSpacing;\n this.borders.copyFormat(format.borders);\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto)) {\n format.spaceAfterAuto = this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto)) {\n format.spaceBeforeAuto = this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n if (!isNullOrUndefined(this.bidi)) {\n format.bidi = this.bidi;\n }\n if (!isNullOrUndefined(this.keepWithNext)) {\n format.keepWithNext = this.keepWithNext;\n }\n if (!isNullOrUndefined(this.keepLinesTogether)) {\n format.keepLinesTogether = this.keepLinesTogether;\n }\n if (!isNullOrUndefined(this.widowControl)) {\n format.widowControl = this.widowControl;\n }\n if (!isNullOrUndefined(this.contextualSpacing)) {\n format.contextualSpacing = this.contextualSpacing;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto) && this.spaceAfterAuto !== format.spaceAfterAuto) {\n this.spaceAfterAuto = undefined;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto) && this.spaceBeforeAuto !== format.spaceBeforeAuto) {\n this.spaceBeforeAuto = undefined;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.keepLinesTogether) && this.keepLinesTogether !== format.keepLinesTogether) {\n this.keepLinesTogether = undefined;\n }\n if (!isNullOrUndefined(this.keepWithNext) && this.keepWithNext !== format.keepWithNext) {\n this.keepWithNext = undefined;\n }\n if (!isNullOrUndefined(this.widowControl) && this.widowControl !== format.widowControl) {\n this.widowControl = undefined;\n }\n if (!isNullOrUndefined(this.contextualSpacing) && this.contextualSpacing !== format.contextualSpacing) {\n this.contextualSpacing = undefined;\n }\n if (!isNullOrUndefined(this.styleName) && format.baseStyle && this.styleName !== format.baseStyle.name) {\n this.styleName = undefined;\n }\n this.borders.combineFormat(format.borders);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.spaceAfterAuto = undefined;\n this.spaceBeforeAuto = undefined;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n *\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.documentHelper.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n *\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv, isListDialog) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n var list = this.documentHelper.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.documentHelper.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.documentHelper.owner.editorHistory;\n var listLevel = this.documentHelper.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.documentHelper.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.documentHelper.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n if (isListDialog) {\n this.documentHelper.layout.clearInvalidList(listAdv);\n }\n this.documentHelper.owner.editorModule.layoutWholeDocument();\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.documentHelper.abstractLists.indexOf(currentAbstractList) === -1) {\n this.documentHelper.abstractLists.push(currentAbstractList);\n }\n if (this.documentHelper.lists.indexOf(listAdv) === -1) {\n this.documentHelper.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.spaceAfterAutoIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.documentHelper = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n if (!isNullOrUndefined(this.bordersIn)) {\n this.bordersIn.destroy();\n this.bordersIn = undefined;\n }\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n /**\n * private\n */\n this.bidi = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n get: function () {\n return this.pageHeightIn;\n },\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n get: function () {\n return this.pageWidthIn;\n },\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n get: function () {\n return this.headerDistanceIn;\n },\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageStartingNumber\", {\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n get: function () {\n return this.pageStartingNumberIn;\n },\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageStartingNumberIn = value;\n this.notifyPropertyChanged('pageStartingNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartPageNumbering\", {\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n get: function () {\n return this.restartPageNumberingIn;\n },\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n set: function (value) {\n this.restartPageNumberingIn = value;\n this.notifyPropertyChanged('restartPageNumbering');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n get: function () {\n return this.footerDistanceIn;\n },\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"endnoteNumberFormat\", {\n /**\n * Gets or sets the number format of endnote.\n */\n get: function () {\n return this.endnoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of endnote.\n */\n set: function (value) {\n this.endnoteNumberFormatIn = value;\n this.notifyPropertyChanged('endnoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footNoteNumberFormat\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.footNoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.footNoteNumberFormatIn = value;\n this.notifyPropertyChanged('footNoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialFootNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialFootNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialFootNoteNumberIn = value;\n this.notifyPropertyChanged('initialFootNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialEndNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialEndNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialEndNoteNumberIn = value;\n this.notifyPropertyChanged('initialEndNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForFootnotes\", {\n /**\n * Gets or sets the restart index of footnote\n */\n get: function () {\n return this.restartIndexForFootnotesIn;\n },\n /**\n * Gets or sets the restart index of footnote\n */\n set: function (value) {\n this.restartIndexForFootnotesIn = value;\n this.notifyPropertyChanged('restartIndexForFootnotes');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForEndnotes\", {\n /**\n * Gets or sets the restart index of endnote\n */\n get: function () {\n return this.restartIndexForEndnotesIn;\n },\n /**\n * Gets or sets the restart index of endnote\n */\n set: function (value) {\n this.restartIndexForEndnotesIn = value;\n this.notifyPropertyChanged('restartIndexForEndnotes');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WSectionFormat} format\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n this.bidi = format.bidi;\n this.pageStartingNumber = format.pageStartingNumber;\n this.restartPageNumbering = format.restartPageNumbering;\n this.endnoteNumberFormat = format.endnoteNumberFormat;\n this.footNoteNumberFormat = format.footNoteNumberFormat;\n this.restartIndexForEndnotes = format.restartIndexForEndnotes;\n this.restartIndexForFootnotes = format.restartIndexForFootnotes;\n this.initialEndNoteNumber = format.initialEndNoteNumber;\n this.initialFootNoteNumber = format.initialFootNoteNumber;\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n case 'pageStartingNumber':\n if (!isNullOrUndefined(this.pageStartingNumber)) {\n return this.pageStartingNumber;\n }\n return undefined;\n case 'restartPageNumbering':\n if (!isNullOrUndefined(this.restartPageNumbering)) {\n return this.restartPageNumbering;\n }\n return undefined;\n case 'endnoteNumberFormat':\n return this.endnoteNumberFormatIn;\n case 'restartIndexForEndnotes':\n return this.restartIndexForEndnotesIn;\n case 'restartIndexForFootnotes':\n return this.restartIndexForFootnotesIn;\n case 'footNoteNumberFormat':\n return this.footNoteNumberFormatIn;\n case 'initialFootNoteNumber':\n return this.initialFootNoteNumber;\n case 'initialEndNoteNumber':\n return this.initialEndNoteNumber;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.pageStartingNumber) && this.pageStartingNumber !== format.pageStartingNumber) {\n this.pageStartingNumber = undefined;\n }\n if (!isNullOrUndefined(this.restartPageNumbering) && this.restartPageNumbering !== format.restartPageNumbering) {\n this.restartPageNumbering = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.endnoteNumberFormat) && this.endnoteNumberFormat !== format.endnoteNumberFormat) {\n this.endnoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForEndnotes) && this.restartIndexForEndnotes !== format.restartIndexForEndnotes) {\n this.restartIndexForEndnotes = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForFootnotes) && this.restartIndexForFootnotes !== format.restartIndexForFootnotes) {\n this.restartIndexForFootnotes = undefined;\n }\n if (!isNullOrUndefined(this.footNoteNumberFormat) && this.footNoteNumberFormat !== format.footNoteNumberFormat) {\n this.footNoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.initialFootNoteNumber) && this.initialFootNoteNumber !== format.initialFootNoteNumber) {\n this.initialFootNoteNumber = undefined;\n }\n if (!isNullOrUndefined(this.initialEndNoteNumber) && this.initialEndNoteNumber !== format.initialEndNoteNumber) {\n this.initialEndNoteNumber = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n this.bidi = undefined;\n this.pageStartingNumber = undefined;\n this.restartPageNumbering = undefined;\n this.endnoteNumberFormat = undefined;\n this.footNoteNumberFormat = undefined;\n this.restartIndexForFootnotes = undefined;\n this.restartIndexForEndnotes = undefined;\n this.initialFootNoteNumber = 1;\n this.initialEndNoteNumber = 1;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n this.pageStartingNumberIn = undefined;\n this.restartPageNumberingIn = undefined;\n this.endnoteNumberFormatIn = undefined;\n this.footNoteNumberFormatIn = undefined;\n this.restartIndexForFootnotesIn = undefined;\n this.restartIndexForEndnotesIn = undefined;\n this.initialEndNoteNumber = undefined;\n this.initialFootNoteNumber = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.bidiIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n *\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.cellSpacingIn;\n },\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bidi\", {\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'bidi':\n return this.bidi;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WTableFormat} format Format to copy.\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n this.bidi = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n *\n * @default undefined\n * @aspType int\n */\n /* eslint-disable */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @private\n * @param {WCellFormat} format - Source Format to copy.\n * @returns {void}\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n *\n * @param {WCellFormat} format - Returns cell format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies the selection\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @returns {number} - Returns the height\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @param {number} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @returns {HeightType} - Returns height type\n */\n get: function () {\n return this.heightTypeIn;\n },\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @param {HeightType} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the is header\n */\n get: function () {\n return this.isHeaderIn;\n },\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @param {boolean} value - Specified the value\n */\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the allow break across page\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @param {boolean} value - Specified the value\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @param {WRowFormat} format - Specified row format\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n *\n * @param {WRowFormat} format - Secifies row format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies selecion module\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n *\n * @aspType int\n * @returns {number} - Returns image width\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n *\n * @aspType int\n * @returns {number} - Returns image height\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height);\n };\n /**\n * Update image width and height\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height);\n }\n }\n };\n /**\n * @param {ImageElementBox} image - Specifies image element box\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/* eslint-enable */\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n this.document = undefined;\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* eslint:enable:no-any */\n }\n HtmlExport.prototype.writeHtml = function (document) {\n this.document = document;\n var html = '';\n for (var i = 0; i < document.sections.length; i++) {\n html += this.serializeSection(document.sections[i]);\n }\n return html;\n };\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n for (var i = 0; i < section.blocks.length; i++) {\n var block = section.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n string += this.serializeParagraph(block);\n }\n else if (block.hasOwnProperty('blocks')) {\n string += this.serializeSection(block);\n }\n else {\n string += this.closeList();\n string += this.serializeTable(block);\n }\n }\n string += this.closeList();\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n return string;\n };\n // Serialize Paragraph\n HtmlExport.prototype.serializeParagraph = function (paragraph) {\n var blockStyle = '';\n var isList = false;\n var isPreviousList = false;\n if (!isNullOrUndefined(this.prevListLevel)) {\n isPreviousList = true;\n }\n var tagAttributes = [];\n var listLevel = undefined;\n if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n listLevel = this.getListLevel(paragraph);\n if (!isPreviousList) {\n this.prevListLevel = listLevel;\n }\n if (this.prevListLevel !== listLevel) {\n isPreviousList = false;\n }\n this.prevListLevel = listLevel;\n }\n if (!isPreviousList) {\n blockStyle += this.closeList();\n }\n if (!isNullOrUndefined(listLevel)) {\n isList = true;\n }\n if (isList && !isPreviousList) {\n blockStyle += this.getHtmlList(listLevel, paragraph.paragraphFormat.listFormat.listLevelNumber);\n }\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + ';' + 'white-space:pre' + '\"');\n if (isList) {\n blockStyle += this.createAttributesTag('li', tagAttributes);\n }\n else {\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n blockStyle += this.createAttributesTag(this.getStyleName(paragraph.paragraphFormat.styleName), tagAttributes);\n }\n if (paragraph.inlines.length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n if (isList) {\n blockStyle += this.endTag('li');\n if (blockStyle.indexOf(' -1) {\n this.isOrdered = false;\n }\n else if (blockStyle.indexOf(' -1) {\n this.isOrdered = true;\n }\n }\n else {\n blockStyle += this.endTag(this.getStyleName(paragraph.paragraphFormat.styleName));\n }\n return blockStyle;\n };\n HtmlExport.prototype.closeList = function () {\n var blockStyle = '';\n if (!isNullOrUndefined(this.isOrdered)) {\n if (this.isOrdered) {\n blockStyle = this.endTag('ol');\n }\n else {\n blockStyle = this.endTag('ul');\n }\n this.isOrdered = undefined;\n }\n return blockStyle;\n };\n HtmlExport.prototype.getListLevel = function (paragraph) {\n var listLevel = undefined;\n var list = undefined;\n for (var i = 0; i < this.document.lists.length; i++) {\n if (this.document.lists[i].listId === paragraph.paragraphFormat.listFormat.listId) {\n list = this.document.lists[i];\n break;\n }\n }\n if (list) {\n for (var j = 0; j < this.document.abstractLists.length; j++) {\n if (this.document.abstractLists[j].abstractListId === list.abstractListId) {\n listLevel = this.document.abstractLists[j].levels[paragraph.paragraphFormat.listFormat.listLevelNumber];\n break;\n }\n }\n }\n return listLevel;\n };\n HtmlExport.prototype.getHtmlList = function (listLevel, levelNumer) {\n //if (start == null || (start != null && start.Paragraph != this)) {\n // let block: BlockAdv = this.GetPreviousBlock();\n // if (block instanceof ParagraphAdv) {\n // let previousListLevel: ListLevelAdv = (block as ParagraphAdv).ParagraphFormat.ListFormat.ListLevel;\n // if (previousListLevel == listLevel)\n // return \"\";\n // }\n //}\n var html = '';\n if (listLevel.listLevelPattern === 'Bullet') {\n html += '
      ';\n }\n return html;\n };\n //SerializeInlines\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n var isMergeField = false;\n var tagAttributes = [];\n while (paragraph.inlines.length > i) {\n inline = paragraph.inlines[i];\n if (inline.hasOwnProperty('inlines')) {\n blockStyle += this.serializeContentInlines(inline, blockStyle);\n i++;\n continue;\n }\n if (inline.hasOwnProperty('imageString')) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n if (inline.fieldType === 0) {\n var fieldCode = paragraph.inlines[i + 1];\n if (isNullOrUndefined(fieldCode.text)) {\n fieldCode = paragraph.inlines[i + 2];\n }\n if (!isNullOrUndefined(fieldCode) && !isNullOrUndefined(fieldCode.text) &&\n (fieldCode.text.indexOf('TOC') >= 0 || fieldCode.text.indexOf('HYPERLINK') >= 0)) {\n this.fieldCheck = 1;\n var tagAttributes_1 = [];\n tagAttributes_1.push('style=\"' + this.serializeInlineStyle(inline.characterFormat) + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes_1);\n }\n else {\n this.fieldCheck = undefined;\n }\n }\n else if (inline.fieldType === 2) {\n if (!isNullOrUndefined(this.fieldCheck)) {\n this.fieldCheck = 2;\n }\n else {\n this.fieldCheck = 0;\n }\n }\n else {\n if (!isNullOrUndefined(this.fieldCheck) && this.fieldCheck !== 0) {\n blockStyle += this.endTag('a');\n }\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline.text) ? '' : inline.text;\n if (inline.hasOwnProperty('bookmarkType')) {\n switch (inline.bookmarkType) {\n case 0:\n blockStyle += '';\n break;\n case 1:\n blockStyle += '';\n break;\n }\n }\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline.characterFormat);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace(/\"/g, '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += text;\n }\n }\n i++;\n }\n return blockStyle;\n };\n HtmlExport.prototype.serializeContentInlines = function (inline, inlineStyle) {\n inlineStyle += this.serializeInlines(inline, inlineStyle);\n return inlineStyle;\n };\n // Serialize Span\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
      ';\n return spanClass.toString();\n }\n else if (spanText.indexOf('\\f') !== -1) {\n spanClass += '
      ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat);\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat) + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n // if (text.length === 0) {\n // text = ' ';\n // }\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n /**\n * @private\n * @param {string} style - style name.\n * @returns {string} - return heading tag.\n */\n HtmlExport.prototype.getStyleName = function (style) {\n switch (style) {\n case 'Heading 1':\n return 'h1';\n case 'Heading 2':\n return 'h2';\n case 'Heading 3':\n return 'h3';\n case 'Heading 4':\n return 'h4';\n case 'Heading 5':\n return 'h5';\n default:\n return 'div';\n }\n };\n //Serialize Image\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image.characterFormat);\n var imageSource = '';\n if (!isNullOrUndefined(image.imageString)) {\n imageSource = image.imageString;\n }\n var width = HelperMethods.convertPointToPixel(image.width);\n var height = HelperMethods.convertPointToPixel(image.height);\n tagAttributes.push('width=\"' + width.toString() + '\"');\n tagAttributes.push('height=\"' + height.toString() + '\"');\n tagAttributes.push('src=\"' + imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n HtmlExport.prototype.serializeCell = function (cell) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell.cellFormat)) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(cell.cellFormat.shading.backgroundColor) && cell.cellFormat.shading.backgroundColor !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(cell.cellFormat.shading.backgroundColor) + '\"');\n }\n // }\n if (!isNullOrUndefined(cell.cellFormat.columnSpan) && cell.cellFormat.columnSpan > 1) {\n tagAttributes.push('colspan=\"' + cell.cellFormat.columnSpan.toString() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.rowSpan) && cell.cellFormat.rowSpan > 1) {\n tagAttributes.push('rowspan=\"' + cell.cellFormat.rowSpan.toString() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.cellWidth) && cell.cellFormat.cellWidth !== 0) {\n var cellWidth = HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n tagAttributes.push('width=\"' + cellWidth.toString() + '\"');\n }\n var cellAlignment = isNullOrUndefined(cell.cellFormat.verticalAlignment) ? 'top' :\n cell.cellFormat.verticalAlignment.toString().toLowerCase();\n tagAttributes.push('valign=\"' + cellAlignment + '\"');\n if (!isNullOrUndefined(cell.cellFormat.leftMargin) && cell.cellFormat.leftMargin !== 0) {\n cellHtml += ('padding-left:' + cell.cellFormat.leftMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.rightMargin) && cell.cellFormat.rightMargin !== 0) {\n cellHtml += ('padding-right:' + cell.cellFormat.rightMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.topMargin) && cell.cellFormat.topMargin !== 0) {\n cellHtml += ('padding-top:' + cell.cellFormat.topMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.bottomMargin) && cell.cellFormat.bottomMargin !== 0) {\n cellHtml += ('padding-bottom:' + cell.cellFormat.bottomMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.borders)) {\n cellHtml += this.serializeCellBordersStyle(cell);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell.blocks.length; k++) {\n var block = cell.blocks[k];\n if (block.hasOwnProperty('rows')) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n // Serialize Table\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table.rows.length; j++) {\n html += this.serializeRow(table.rows[j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row.cells.length; k++) {\n html += this.serializeCell(row.cells[k]);\n }\n return html;\n };\n // Serialize Styles\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList) {\n var paragraphClass = '';\n paragraphClass += this.serializeCharacterFormat(paragraph.characterFormat);\n paragraphClass += this.serializeParagraphFormat(paragraph.paragraphFormat, isList);\n return paragraphClass;\n };\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat) {\n return this.serializeCharacterFormat(characterFormat);\n };\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n if (!isNullOrUndefined(borders.left.lineStyle)) {\n borderStyle += ('border-left-style:' + this.convertBorderLineStyle(borders.left.lineStyle));\n borderStyle += ';';\n }\n if (borders.left.lineWidth) {\n borderStyle += ('border-left-width:' + borders.left.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.left.color)) {\n borderStyle += ('border-left-color:' + HelperMethods.getColor(borders.left.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.lineStyle)) {\n borderStyle += ('border-right-style:' + this.convertBorderLineStyle(borders.right.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.lineWidth)) {\n borderStyle += ('border-right-width:' + borders.right.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.color)) {\n borderStyle += ('border-right-color:' + HelperMethods.getColor(borders.right.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.lineStyle)) {\n borderStyle += ('border-top-style:' + this.convertBorderLineStyle(borders.top.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.lineWidth)) {\n borderStyle += ('border-top-width:' + borders.top.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.color)) {\n borderStyle += ('border-top-color:' + HelperMethods.getColor(borders.bottom.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.lineStyle)) {\n borderStyle += ('border-bottom-style:' + this.convertBorderLineStyle(borders.bottom.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.lineWidth)) {\n borderStyle += ('border-bottom-width:' + borders.bottom.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.color)) {\n borderStyle += ('border-bottom-color:' + HelperMethods.getColor(borders.bottom.color));\n borderStyle += ';';\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeCellBordersStyle = function (WCell) {\n var borderStyle = '';\n //borderStyle = 'border:solid 1px;';\n // if (borders.left.color) {\n // borderStyle += ('border-left-color:' + HelperMethods.getColor(borders.left.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.left, 'left');\n // if (!isNullOrUndefined(borders.right.color)) {\n // borderStyle += ('border-right-color:' + HelperMethods.getColor(borders.right.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.right, 'right');\n // if (!isNullOrUndefined(borders.top.color)) {\n // borderStyle += ('border-top-color:' + HelperMethods.getColor(borders.top.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.top, 'top');\n // if (!isNullOrUndefined(borders.bottom.color)) {\n // borderStyle += ('border-bottom-color:' + HelperMethods.getColor(borders.bottom.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.bottom, 'bottom');\n var border = undefined;\n var borders = WCell.cellFormat.borders;\n //LeftBorder\n border = borders.left;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'left');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-left-style:none;');\n }\n //TopBorder\n border = borders.top;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'top');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-top-style:none');\n }\n //RightBorder\n border = borders.right;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'right');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-right-style:none');\n }\n //BottomBorder\n border = borders.bottom;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'bottom');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-bottom-style:none');\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border.lineStyle));\n borderStyle += ';';\n if (border.lineWidth > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border.lineWidth.toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n if (!isNullOrUndefined(border.color)) {\n borderStyle += ('border-' + borderPosition + '-color:' + HelperMethods.getColor(border.color) + ';');\n }\n return borderStyle;\n };\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'None':\n return 'none';\n case 'Single':\n return 'solid';\n case 'Dot':\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n return 'double';\n case 'SingleWavy':\n return 'solid';\n case 'DoubleWavy':\n return 'double';\n case 'DashDotStroked':\n return 'solid';\n case 'Emboss3D':\n return 'ridge';\n case 'Engrave3D':\n return 'groove';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat.inlineFormat)) {\n return this.serializeCharacterFormat(characterFormat.inlineFormat);\n }\n var propertyValue;\n var charStyle = '';\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += characterFormat.bold ? 'bold' : 'normal';\n charStyle += ';';\n charStyle += 'font-style';\n charStyle += ':';\n if (characterFormat.italic) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n charStyle += this.serializeTextDecoration(characterFormat);\n //Text Baseline Alignment\n if (characterFormat.baselineAlignment === 'Superscript' || characterFormat.baselineAlignment === 'Subscript') {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat.baselineAlignment === 'Superscript' ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += HelperMethods.getHighlightColorCode(characterFormat.highlightColor.toString());\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat.fontColor;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += HelperMethods.getColor(propertyValue);\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat.allCaps) && (characterFormat.allCaps)) {\n charStyle += 'text-transform';\n charStyle += ':';\n charStyle += 'uppercase';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontSize;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontFamily;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n return charStyle.toString();\n };\n HtmlExport.prototype.serializeTextDecoration = function (characterFormat) {\n var charStyle = 'text-decoration:';\n var value = '';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat.strikethrough === 'SingleStrike' || characterFormat.strikethrough === 'DoubleStrike') {\n value += 'line-through ';\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n value += 'underline';\n }\n if (value.length > 1) {\n value = charStyle + value + ';';\n }\n return value;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList) {\n if (!isNullOrUndefined(paragraphFormat.inlineFormat)) {\n return this.serializeParagraphFormat(paragraphFormat.inlineFormat, isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = paragraphFormat.textAlignment;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat.beforeSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.rightIndent;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.afterSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.leftIndent;\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = -36;\n // } else {\n // propertyValue -= 36;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.firstLineIndent;\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = 18;\n // } else {\n // propertyValue += 18;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat.lineSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat.lineSpacingType === 'Multiple') {\n propertyValue = Math.round(propertyValue * 10) / 10;\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n //tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table.tableFormat)) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(table.tableFormat.shading) && !isNullOrUndefined(table.tableFormat.shading.backgroundColor) && table.tableFormat.shading.backgroundColor !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(table.tableFormat.shading.backgroundColor) + '\"');\n }\n //}\n if (!isNullOrUndefined(table.tableFormat.leftIndent) && table.tableFormat.leftIndent !== 0) {\n tagAttributes.push('left-indent=\"' + (table.tableFormat.leftIndent.toString() + 'pt;') + '\"');\n }\n if (!isNullOrUndefined(table.tableFormat.cellSpacing) && table.tableFormat.cellSpacing > 0) {\n tagAttributes.push('cellspacing=\"' + (((table.tableFormat.cellSpacing * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n // if (!isNullOrUndefined(table.tableFormat.borders)) {\n // tableStyle += this.serializeTableBorderStyle(table.tableFormat.borders);\n // }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (row.rowFormat.isHeader) {\n blockStyle += (this.createTag('thead'));\n }\n if (!isNullOrUndefined(row.rowFormat.height) && row.rowFormat.height > 0) {\n var height = HelperMethods.convertPointToPixel(row.rowFormat.height);\n tagAttributes.push('height=\"' + height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (row.rowFormat.isHeader) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n text = text.replace(//g, '>');\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, ElementBox, EditRangeStartElementBox, EditRangeEndElementBox, TabElementBox, CommentElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FieldTextElementBox, FootNoteWidget, FootnoteElementBox, ShapeBase } from '../viewer/page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { PageLayoutViewer, WebLayoutViewer, WRowFormat } from '../index';\nimport { isNullOrUndefined, createElement, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { contentControlEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent, requestNavigateEvent, CharacterRangeType } from '../../base/index';\nimport { WCharacterFormat, WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/* eslint-disable */\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @param documentEditor\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n this.isModifyingSelectionInternally = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.isViewPasteOptions = false;\n /**\n * @private\n */\n this.skipEditRangeRetrieval = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * @private\n */\n this.isHighlightEditRegionIn = false;\n /**\n * @private\n */\n this.isHighlightFormFields = false;\n /**\n * @private\n */\n this.isHightlightEditRegionInternal = false;\n /**\n * @private\n */\n this.isCurrentUser = false;\n /**\n * @private\n */\n this.isHighlightNext = false;\n /**\n * @private\n */\n this.isWebLayout = false;\n /**\n * @private\n */\n this.editRegionHighlighters = undefined;\n /**\n * @private\n */\n this.formFieldHighlighters = undefined;\n this.isSelectList = false;\n /**\n * @private\n */\n this.previousSelectedFormField = undefined;\n /**\n * @private\n */\n this.isFormatUpdated = false;\n /**\n * @private\n */\n this.pasteOptions = function (event) {\n var locale = new L10n('documenteditor', _this.owner.defaultLocale);\n locale.setLocale(_this.owner.locale);\n if (event.item.text === locale.getConstant('Keep source formatting')) {\n _this.owner.editor.applyPasteOptions('KeepSourceFormatting');\n }\n else if (event.item.text === locale.getConstant('Match destination formatting')) {\n _this.owner.editor.applyPasteOptions('MergeWithExistingFormatting');\n }\n else if (event.item.text === locale.getConstant('NestTable')) {\n _this.owner.editor.applyTablePasteOptions('NestTable');\n }\n else if (event.item.text === locale.getConstant('InsertAsRows')) {\n _this.owner.editor.applyTablePasteOptions('InsertAsRows');\n }\n else if (event.item.text === locale.getConstant('InsertAsColumns')) {\n _this.owner.editor.applyTablePasteOptions('InsertAsColumns');\n }\n else if (event.item.text === locale.getConstant('OverwriteCells')) {\n _this.owner.editor.applyTablePasteOptions('OverwriteCells');\n }\n else {\n _this.owner.editor.applyPasteOptions('KeepTextOnly');\n }\n };\n /**\n * Hides caret.\n *\n * @private\n * @returns {void}\n */\n this.hideCaret = function () {\n if (!isNullOrUndefined(_this.caret)) {\n _this.caret.style.display = 'none';\n }\n };\n this.owner = documentEditor;\n this.documentHelper = this.owner.documentHelper;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.documentHelper);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n this.editRangeCollection = [];\n this.editRegionHighlighters = new Dictionary();\n this.formFieldHighlighters = new Dictionary();\n }\n Object.defineProperty(Selection.prototype, \"isHighlightEditRegion\", {\n /**\n * @private\n * @returns {boolean} - Retuens true if highlighting editing region\n */\n get: function () {\n return this.isHighlightEditRegionIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHighlightEditRegionIn = value;\n this.onHighlight();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n *\n * @private\n * @returns {TextPosition} - Returns selection start position.\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n *\n * @default undefined\n * @aspType SelectionCharacterFormat\n * @returns {SelectionCharacterFormat} - Returns selection character format.\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n *\n * @default undefined\n * @aspType SelectionParagraphFormat\n * @returns {SelectionParagraphFormat} - Returns selection paragraph format.\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n *\n * @default undefined\n * @aspType SelectionSectionFormat\n * @returns {SelectionSectionFormat} - Returns selection section format.\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n *\n * @default undefined\n * @aspType SelectionTableFormat\n * @returns {SelectionTableFormat} - Returns selection table format.\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n *\n * @default undefined\n * @aspType SelectionCellFormat\n * @returns {SelectionCellFormat} - Returns selection cell format.\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n *\n * @default undefined\n * @aspType SelectionRowFormat\n * @returns {SelectionRowFormat} - Returns selection row format.\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n *\n * @default undefined\n * @aspType SelectionImageFormat\n * @returns {SelectionImageFormat} - Returns selection image format.\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n *\n * @private\n * @returns {TextPosition} - Returns selection end position.\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n *\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection starts.\n *\n * @returns {number} - Returns the selection start page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionStartPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n *\n * @returns {number} - Returns the selection end page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionEndPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n *\n * @default false\n * @private\n * @returns {boolean} - Returns isForward\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinFootnote\", {\n /**\n * Determines whether the selection is in footnote or not.\n *\n * @default false\n * @returns {boolean} - Returns true if selection is in footnote\n * @private\n */\n get: function () {\n var container = this.getContainerWidget(this.start.paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n return true;\n }\n else {\n return false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinEndnote\", {\n /**\n * Determines whether the selection is in endnote or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n var container = this.getContainerWidget(this.start.paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n return true;\n }\n else {\n return false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startOffset\", {\n /**\n * Returns start hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endOffset\", {\n /**\n * Returns end hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInShape\", {\n /**\n * @private\n */\n get: function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return true;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n *\n * @default ''\n * @aspType string\n * @returns {string}\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"bookmarks\", {\n /**\n * Gets bookmark name collection.\n */\n get: function () {\n return this.getSelBookmarks(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sfdt\", {\n /**\n * Gets the selected content of the document as SFDT(Syncfusion Document Text) file format.\n *\n * @default undefined\n * @returns {string}\n */\n get: function () {\n if (this.owner.editorModule && (this.start.offset !== this.end.offset)) {\n return JSON.stringify(this.writeSfdt());\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the bookmark name collection in current selection\n *\n * @param includeHidden - Decide whether to include hidden bookmark name in current selection or not.\n */\n Selection.prototype.getBookmarks = function (includeHidden) {\n return this.getSelBookmarks(includeHidden);\n };\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInField\", {\n /**\n * Returns true if selection is in field\n */\n get: function () {\n if (!isNullOrUndefined(this.getHyperlinkField(true))) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the field information for the selected field.\n *\n * @returns { FieldInfo } – Return {FieldInfo} if selection is in field, otherwise `undefined`\n * > Returns `undefined` for text, image, table, shape. For nested fields, it returns combined field code and result.\n */\n Selection.prototype.getFieldInfo = function () {\n var field = this.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n var code = this.getFieldCode(field);\n var result = this.owner.editorModule.getFieldResultText(field);\n return {\n code: code,\n result: result\n };\n }\n return undefined;\n };\n Selection.prototype.getSelBookmarks = function (includeHidden) {\n var bookmarkCln = [];\n var bookmarks = this.documentHelper.bookmarks;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmrkStart;\n var bookmrkEnd;\n var isCellSelected = false;\n var selectedCells = this.getSelectedCells();\n for (var i = 0; i < bookmarks.length; i++) {\n if (includeHidden || !includeHidden && bookmarks.keys[i].indexOf('_') !== 0) {\n bookmrkStart = bookmarks.get(bookmarks.keys[i]);\n bookmrkEnd = bookmrkStart.reference;\n if (isNullOrUndefined(bookmrkEnd)) {\n continue;\n }\n var bmStartPos = this.getElementPosition(bookmrkStart).startPosition;\n var bmEndPos = this.getElementPosition(bookmrkEnd, true).startPosition;\n if (bmStartPos.paragraph.isInsideTable || bmEndPos.paragraph.isInsideTable) {\n if (selectedCells.length > 0) {\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) >= 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) >= 0) {\n isCellSelected = true;\n }\n else {\n isCellSelected = false;\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) < 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) < 0) {\n var endCell = end.paragraph.isInsideTable && end.paragraph.associatedCell;\n var bmEndPosCell = bmEndPos.paragraph.associatedCell;\n if (endCell && bmEndPosCell && endCell.ownerTable.equals(bmEndPosCell.ownerTable) &&\n !(endCell.ownerTable\n && selectedCells.indexOf(this.getCellInTable(endCell.ownerTable, bmEndPosCell)) >= 0)) {\n continue;\n }\n }\n }\n }\n else {\n isCellSelected = false;\n }\n }\n else {\n isCellSelected = false;\n }\n if ((start.isExistAfter(bmStartPos) || start.isAtSamePosition(bmStartPos))\n && (end.isExistBefore(bmEndPos) || end.isAtSamePosition(bmEndPos)) ||\n ((bmStartPos.isExistAfter(start) || bmStartPos.isAtSamePosition(start))\n && (bmEndPos.isExistBefore(end) || bmEndPos.isAtSamePosition(end))) ||\n (bmStartPos.isExistAfter(start) && bmStartPos.isExistBefore(end)\n && (end.isExistAfter(bmEndPos) || end.isExistBefore(bmEndPos))) ||\n (bmEndPos.isExistBefore(end) && bmEndPos.isExistAfter(start)\n && (start.isExistBefore(bmStartPos) || start.isExistAfter(bmStartPos))) || isCellSelected) {\n bookmarkCln.push(bookmrkStart.name);\n }\n }\n }\n return bookmarkCln;\n };\n Object.defineProperty(Selection.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n Selection.prototype.checkLayout = function () {\n if (this.owner.layoutType === 'Continuous') {\n this.isWebLayout = true;\n this.documentHelper.isHeaderFooter = true;\n this.owner.layoutType = 'Pages';\n this.owner.viewer.destroy();\n this.owner.viewer = new PageLayoutViewer(this.owner);\n this.owner.editor.layoutWholeDocument();\n }\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToHeader = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Moves the selection to the footer of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToFooter = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Closes the header and footer region.\n *\n * @returns {void}\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n if (this.documentHelper.isHeaderFooter && this.owner.layoutType === 'Pages') {\n this.owner.layoutType = 'Continuous';\n this.documentHelper.isHeaderFooter = false;\n }\n };\n /**\n * Moves the selection to the start of specified page number.\n *\n * @param pageNumber\n * @returns {void}\n */\n Selection.prototype.goToPage = function (pageNumber) {\n this.owner.scrollToPage(pageNumber);\n if (pageNumber >= 1 && pageNumber <= this.owner.documentHelper.pages.length) {\n var page = this.owner.documentHelper.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n Selection.prototype.select = function (selectionSettings, startOrEnd) {\n if (typeof (selectionSettings) === 'string') {\n var startPosition = this.getTextPosBasedOnLogicalIndex(selectionSettings);\n var endPosition = this.getTextPosBasedOnLogicalIndex(startOrEnd);\n this.selectPosition(startPosition, endPosition);\n }\n else {\n var point = new Point(selectionSettings.x, selectionSettings.y);\n var pageCoordinates = this.viewer.findFocusedPage(point, true);\n if (selectionSettings.extend) {\n this.moveTextPosition(pageCoordinates, this.end);\n }\n else {\n this.documentHelper.updateTextPositionForSelection(pageCoordinates, 1);\n }\n }\n };\n /**\n * Selects based on start and end hierarchical index.\n *\n * @param start\n * @param end\n * @returns {void}\n */\n Selection.prototype.selectByHierarchicalIndex = function (start, end) {\n var startPosition = this.getTextPosBasedOnLogicalIndex(start);\n var endPosition = this.getTextPosBasedOnLogicalIndex(end);\n this.selectPosition(startPosition, endPosition);\n };\n /**\n * Select the current field if selection is in field\n *\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectField = function (fieldStart) {\n if (this.isInField || !isNullOrUndefined(fieldStart)) {\n if (isNullOrUndefined(fieldStart)) {\n fieldStart = this.getHyperlinkField(true);\n }\n this.selectFieldInternal(fieldStart);\n }\n };\n /**\n * @private\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectFieldInternal = function (fieldStart, isKeyBoardEvent, isReplacingFormResult) {\n if (fieldStart) {\n var formFillingMode = this.documentHelper.isFormFillProtectedMode || isReplacingFormResult;\n var fieldEnd = fieldStart.fieldEnd;\n if (formFillingMode) {\n fieldStart = fieldStart.fieldSeparator;\n }\n var offset = fieldStart.line.getOffset(fieldStart, formFillingMode ? 1 : 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(fieldStart.line, offset);\n var isBookmark = fieldStart.nextNode instanceof BookmarkElementBox;\n if (isBookmark && !formFillingMode) {\n fieldEnd = fieldStart.nextElement.reference;\n }\n var endoffset = fieldEnd.line.getOffset(fieldEnd, formFillingMode ? 0 : 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n this.triggerFormFillEvent(isKeyBoardEvent);\n }\n };\n /**\n * @param shape\n * @private\n * @returns {void}\n */\n Selection.prototype.selectShape = function (shape) {\n if (shape) {\n var offset = shape.line.getOffset(shape, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(shape.line, offset);\n var endoffset = shape.line.getOffset(shape, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(shape.line, endoffset);\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the allCaps property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleAllCaps = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleAllCaps();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param {Underline} underline Default value of ‘underline’ parameter is Single.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editor) {\n this.owner.editor.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editor) {\n this.owner.editor.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editor) {\n this.owner.editor.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n *\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editor) {\n this.owner.editor.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n *\n * @param fieldBegin\n * @private\n * @returns {void}\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var code = this.getFieldCode(fieldBegin);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n return;\n }\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference,\n source: this.owner\n };\n this.owner.trigger(requestNavigateEvent, eventArgs);\n if (!eventArgs.isHandled) {\n this.documentHelper.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField, true);\n this.copyToClipboard(linkText);\n };\n Selection.prototype.isHideSelection = function (paragraph) {\n var bodyWgt = paragraph.bodyWidget;\n var sectionFormat = bodyWgt.sectionFormat;\n var pageHt = sectionFormat.pageHeight - sectionFormat.footerDistance;\n var headerFooterHt = bodyWgt.page.boundingRectangle.height / 100 * 40;\n return this.contextType.indexOf('Footer') >= 0\n && (paragraph.y + paragraph.height > HelperMethods.convertPointToPixel(pageHt))\n || this.contextType.indexOf('Header') >= 0 && paragraph.y + paragraph.height > headerFooterHt;\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n if (!this.isInShape && this.isHideSelection(this.start.paragraph)) {\n this.hideCaret();\n return;\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n if (this.documentHelper.isComposingIME) {\n this.updateCaretPosition();\n }\n }\n this.documentHelper.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.start, this.end);\n }\n };\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top, isElementBoxHighlight) {\n if (width < 0) {\n width = 0;\n }\n var paragraph = lineWidget.paragraph;\n var floatingItems = [];\n if (paragraph.floatingElements.length > 0) {\n for (var k = 0; k < paragraph.floatingElements.length; k++) {\n var shapeElement = paragraph.floatingElements[k];\n if (shapeElement.line === lineWidget) {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n var offset = shapeElement.line.getOffset(shapeElement, 0);\n if ((startTextPos.currentWidget !== lineWidget && endTextPos.currentWidget !== lineWidget) ||\n (startTextPos.currentWidget === lineWidget && startTextPos.offset <= offset\n && (endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset + 1\n || endTextPos.currentWidget !== lineWidget)) || (startTextPos.currentWidget !== lineWidget\n && endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset)) {\n floatingItems.push(shapeElement);\n }\n }\n }\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var widgets = this.selectedWidgets;\n var selectionWidget = undefined;\n var selectionWidgetCollection = undefined;\n if (this.isHightlightEditRegionInternal) {\n this.addEditRegionHighlight(lineWidget, left, width);\n return;\n }\n else if (this.isHighlightFormFields) {\n this.addFormFieldHighlight(lineWidget, left, width);\n return;\n }\n else {\n if (widgets.containsKey(lineWidget)) {\n if (widgets.get(lineWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(lineWidget);\n // if the line element has already added with SelectionWidgetInfo\n // now its need to be added as ElementBox highlighting them remove it from dictionary and add it collection.\n if (isElementBoxHighlight) {\n widgets.remove(lineWidget);\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n }\n else {\n selectionWidgetCollection = widgets.get(lineWidget);\n }\n }\n else {\n if (isElementBoxHighlight) {\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n else {\n var wrapPosition = this.getWrapPosition(lineWidget, paragraph);\n if (wrapPosition.length > 0) {\n var selectionWidgetInfos = this.splitSelectionHighlightPosition(left, width, wrapPosition);\n if (selectionWidgetInfos.length > 0) {\n selectionWidgetInfos[0].floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidgetInfos);\n this.renderHighlight(page, lineWidget, selectionWidgetInfos, top, floatingItems);\n return;\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n }\n if (selectionWidget === undefined) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n this.renderHighlight(page, lineWidget, [selectionWidget], top, floatingItems);\n if (isElementBoxHighlight) {\n selectionWidgetCollection.push(selectionWidget);\n }\n };\n Selection.prototype.renderHighlight = function (page, lineWidget, selectionWidget, top, floatingItems) {\n var documentHelper = this.owner.documentHelper;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var height = lineWidget.height;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + documentHelper.selectionCanvas.height) {\n var zoomFactor = documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n for (var i = 0; i < selectionWidget.length; i++) {\n var selectedWidget = selectionWidget[i];\n var left = selectedWidget.left;\n var width = selectedWidget.width;\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(documentHelper.selectionContext, page, lineWidget, (pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, top, width * zoomFactor, height);\n }\n else {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n documentHelper.selectionContext.globalAlpha = 0.4;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n }\n }\n if (floatingItems.length > 0) {\n for (var z = 0; z < floatingItems.length; z++) {\n var left = floatingItems[z].x;\n var shapeTop = floatingItems[z].y;\n var shapeWidth = floatingItems[z].width;\n var shapeHeight = floatingItems[z].height;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (shapeTop * zoomFactor)) - this.viewer.containerTop, shapeWidth * zoomFactor, shapeHeight * zoomFactor);\n }\n }\n documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.getWrapPosition = function (lineWidget, paragraph) {\n var bodyWidget = paragraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.length > 0 && lineWidget.children.length > 0) {\n var startLeft = this.getLeftInternal(lineWidget, lineWidget.children[0], 0);\n var width = 0;\n var wrapPos = [];\n var isStarted = false;\n for (var z = 0; z < lineWidget.children.length; z++) {\n var element = lineWidget.children[z];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element.padding.left > 0) {\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n startLeft = paragraph.x;\n }\n var clipInfo = {};\n clipInfo.start = startLeft + width;\n clipInfo.end = 0;\n if (isStarted) {\n clipInfo.end = startLeft + width + element.padding.left;\n }\n wrapPos.push(clipInfo);\n }\n width += element.padding.left + element.width;\n if (element instanceof TextElementBox) {\n isStarted = true;\n }\n }\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n }\n return wrapPos;\n }\n return [];\n };\n Selection.prototype.splitSelectionHighlightPosition = function (left, width, clipInfo) {\n var selectedWidget = [];\n for (var m = 0; m < clipInfo.length; m++) {\n var info = clipInfo[m];\n if ((left < info.start && left + width < info.end) || left > (info.end)) {\n continue;\n }\n if (left < info.start && left + width > info.end) {\n selectedWidget.push(new SelectionWidgetInfo(left, info.start - left));\n width = (left + width) - info.end;\n left = info.end;\n }\n else if (left === info.start) {\n left += info.end;\n width = width - info.end;\n }\n if (m === clipInfo.length - 1) {\n selectedWidget.push(new SelectionWidgetInfo(left, width));\n }\n }\n return selectedWidget;\n };\n Selection.prototype.addEditRegionHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.editRegionHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var editRegionHighlight = new SelectionWidgetInfo(left, width);\n if (this.isCurrentUser) {\n editRegionHighlight.color = this.owner.userColor !== '' ? this.owner.userColor : '#FFFF00';\n }\n highlighters.push(editRegionHighlight);\n return editRegionHighlight;\n };\n Selection.prototype.addFormFieldHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.formFieldHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var formFieldHighlight = new SelectionWidgetInfo(left, width);\n highlighters.push(formFieldHighlight);\n };\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.documentHelper.selectionCanvas.height;\n var widgets = this.selectedWidgets;\n if (!this.isHightlightEditRegionInternal && !this.isHighlightFormFields) {\n if (widgets.containsKey(cellWidget) && widgets.get(cellWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(cellWidget);\n if (isVisiblePage) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.documentHelper.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.documentHelper.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.documentHelper.zoomFactor, height * this.documentHelper.zoomFactor);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n if (widgets.containsKey(cellWidget)) {\n widgets.remove(widgets.get(cellWidget));\n }\n widgets.add(cellWidget, selectionWidget);\n }\n }\n if (isVisiblePage) {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n this.documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.clipSelection = function (page, pageTop) {\n var documentHelper = this.owner.documentHelper;\n var width;\n var height;\n if (this.viewer instanceof WebLayoutViewer && this.documentHelper.zoomFactor < 1) {\n width = page.boundingRectangle.width / this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height / this.documentHelper.zoomFactor;\n }\n else {\n width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n }\n var left = page.boundingRectangle.x;\n documentHelper.selectionContext.beginPath();\n documentHelper.selectionContext.save();\n documentHelper.selectionContext.rect(left - this.viewer.containerLeft, pageTop - this.viewer.containerTop, width, height);\n documentHelper.selectionContext.clip();\n };\n /**\n * Add selection highlight\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top, page) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = this.documentHelper.render.getScaledValue(widget.height);\n var widgetInfo = this.selectedWidgets.get(widget);\n var widgetInfoCollection = undefined;\n if (widgetInfo instanceof SelectionWidgetInfo) {\n widgetInfoCollection = [];\n widgetInfoCollection.push(widgetInfo);\n }\n else {\n widgetInfoCollection = widgetInfo;\n }\n if (!isNullOrUndefined(widgetInfoCollection)) {\n for (var i = 0; i < widgetInfoCollection.length; i++) {\n var selectedWidgetInfo = widgetInfoCollection[i];\n var width = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].width);\n var left = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].left, 1);\n if (isNullOrUndefined(page)) {\n page = this.owner.selection.getPage(widget.paragraph);\n }\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(canvasContext, page, widget, left, top, width, height);\n }\n else {\n canvasContext.globalAlpha = 0.4;\n canvasContext.fillStyle = 'gray';\n canvasContext.fillRect(left, this.documentHelper.render.getScaledValue(top, 2), width, height);\n if (selectedWidgetInfo.floatingItems && selectedWidgetInfo.floatingItems.length > 0) {\n for (var j = 0; j < selectedWidgetInfo.floatingItems.length; j++) {\n var shape = selectedWidgetInfo.floatingItems[j];\n width = this.documentHelper.render.getScaledValue(shape.width);\n left = this.documentHelper.render.getScaledValue(shape.x, 1);\n var shapeTop = this.documentHelper.render.getScaledValue(shape.y, 2);\n canvasContext.fillRect(left, shapeTop, width, this.documentHelper.render.getScaledValue(shape.height));\n }\n }\n }\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.renderDashLine = function (ctx, page, widget, left, top, width, height) {\n var fontColor = this.characterFormat.fontColor;\n var fillColor = fontColor ? HelperMethods.getColor(fontColor) : '#000000';\n ctx.globalAlpha = 1;\n // Get character format copied from selection format\n var format = this.owner.editor.copyInsertFormat(new WCharacterFormat(), false);\n var heightInfo = this.documentHelper.textHelper.getHeight(format);\n var pageTop = this.getPageTop(page);\n var descent = heightInfo.Height - heightInfo.BaselineOffset;\n top = this.documentHelper.render.getUnderlineYPosition(widget) + top + 4 - descent;\n this.documentHelper.render.renderDashLine(ctx, left, (pageTop - this.viewer.containerTop) + (top * this.documentHelper.zoomFactor), width, fillColor, true);\n };\n /**\n * Add Selection highlight inside table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget, page) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectedWidgetInfo = this.selectedWidgets.get(tableCellWidget);\n var selectedWidgetInfoCollection = undefined;\n if (selectedWidgetInfo instanceof SelectionWidgetInfo) {\n selectedWidgetInfoCollection = [];\n selectedWidgetInfoCollection.push(selectedWidgetInfo);\n }\n else {\n selectedWidgetInfoCollection = selectedWidgetInfo;\n }\n if (!isNullOrUndefined(selectedWidgetInfoCollection)) {\n for (var i = 0; i < selectedWidgetInfoCollection.length; i++) {\n var left = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].left, 1);\n var top_1 = this.documentHelper.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].width);\n var height = this.documentHelper.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n if (isNullOrUndefined(page)) {\n page = this.owner.selection.getPage(tableCellWidget);\n }\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var selectedWidget = this.selectedWidgets.get(widget);\n var selectedWidgetCollection = undefined;\n if (selectedWidget instanceof SelectionWidgetInfo) {\n selectedWidgetCollection = [];\n selectedWidgetCollection.push(selectedWidget);\n }\n else {\n selectedWidgetCollection = selectedWidget;\n }\n if (!isNullOrUndefined(selectedWidgetCollection)) {\n for (var i = 0; i < selectedWidgetCollection.length; i++) {\n width = selectedWidgetCollection[i].width;\n left = selectedWidgetCollection[i].left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.documentHelper.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.documentHelper.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.documentHelper.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.documentHelper.selectionCanvas.height) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n }\n }\n };\n /**\n * Selects Current word\n *\n * @param excludeSpace\n * @returns {void}\n */\n Selection.prototype.selectCurrentWord = function (excludeSpace) {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, excludeSpace ? excludeSpace : false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Selects current paragraph\n *\n * @returns {void}\n */\n Selection.prototype.selectParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Selects current line.\n *\n * @returns {void}\n */\n Selection.prototype.selectLine = function () {\n if (!isNullOrUndefined(this.start)) {\n this.moveToLineStart();\n this.handleShiftEndKey();\n }\n };\n /**\n * Moves selection to start of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentStart = function () {\n this.handleControlHomeKey();\n };\n /**\n * Moves selection to end of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentEnd = function () {\n this.handleControlEndKey();\n };\n /**\n * Moves selection to current paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphStart = function () {\n if (this.isForward) {\n this.start.paragraphStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.paragraphStartInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to current paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphEnd = function () {\n if (this.isForward) {\n this.start.moveToParagraphEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.moveToParagraphEndInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to next line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextLine = function () {\n this.moveDown();\n };\n /**\n * Moves selection to previous line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousLine = function () {\n this.moveUp();\n };\n /**\n * Moves selection to next character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextCharacter = function () {\n this.handleRightKey();\n };\n /**\n * Moves selection to previous character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousCharacter = function () {\n this.handleLeftKey();\n };\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extends selection to paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(true, formField);\n }\n }\n };\n /**\n * Move to next paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * To navigate to next footnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.nextFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var nextFootnoteElement = this.documentHelper.footnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextFootnoteElement)) {\n nextFootnoteElement = footNoteElement;\n }\n var start = this.start.clone();\n var end = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var referenceElement = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < referenceElement.bodyWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === nextFootnoteElement) {\n start.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n end.setPositionInternal(start);\n this.selectRange(start, end);\n }\n }\n }\n }\n };\n /**\n * To navigate to previous footnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.previousFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var previousFootnote = this.documentHelper.footnoteCollection[indexCount - 1];\n if (isNullOrUndefined(previousFootnote)) {\n previousFootnote = footNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var footnote = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < footnote.bodyWidgets.length; j++) {\n var element = (footnote.bodyWidgets[j]).footNoteReference;\n if (element === previousFootnote) {\n startPosition.setPositionParagraph(footnote.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n }\n };\n /**\n * To navigate to next Endnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.nextEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var nextEndnote = this.documentHelper.endnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextEndnote)) {\n nextEndnote = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var endnoteElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < endnoteElement.childWidgets.length; j++) {\n var element = (endnoteElement.bodyWidgets[j]).footNoteReference;\n if (element === nextEndnote) {\n startPosition.setPositionParagraph(endnoteElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * To navigate to previous Endnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.previousEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var inline = this.documentHelper.endnoteCollection[indexCount - 1];\n if (isNullOrUndefined(inline)) {\n inline = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var referenceElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < referenceElement.childWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === inline) {\n startPosition.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Move to previous text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(false, formField);\n }\n }\n };\n /**\n * Move to previous paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to previous line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to line end\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to line start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n // To select Paragraph mark similar to MS WORD\n if (this.start.paragraph === this.end.paragraph && this.start.offset === this.start.currentWidget.getEndOffset()\n && this.isParagraphLastLine(this.start.currentWidget) && this.isParagraphFirstLine(this.end.currentWidget)) {\n this.start.setPositionParagraph(this.start.currentWidget, this.start.offset + 1);\n }\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveUp = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(false);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n this.start.moveUp(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveDown = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(true);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n *\n * @private\n * @returns {void}\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n while (lastCell.childWidgets.length === 0 && !isNullOrUndefined(lastCell.previousSplitWidget)) {\n lastCell = lastCell.previousSplitWidget;\n }\n return lastCell.childWidgets[lastCell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Moves selection to start of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to end of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getPageTop = function (page) {\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition, isMouseLeave) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.documentHelper.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex && !isMouseLeave) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation\n //Document\n /**\n * Get document start position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.documentHelper.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[0].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[0];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selection.selectContent(documentEnd, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selection.selectContent(documentStart, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStartInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEndInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordEndInternal(false);\n }\n else {\n this.extendToWordStartInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordStartInternal(false);\n }\n else {\n this.extendToWordEndInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleLeftKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.moveNextPosition();\n }\n else {\n this.movePreviousPosition();\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleRightKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.movePreviousPosition();\n }\n else {\n this.moveNextPosition();\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleSpaceBarKey = function () {\n if (this.owner.documentHelper.isDocumentProtected && this.owner.documentHelper.protectionType === 'FormFieldsOnly'\n && this.getFormFieldType() === 'CheckBox') {\n this.owner.editor.toggleCheckBoxFormField(this.getCurrentFormField());\n }\n };\n /**\n * Handles tab key.\n *\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n * @returns {void}\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (!this.owner.documentHelper.isDocumentProtected && !(this.documentHelper.protectionType === 'FormFieldsOnly')) {\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n var selection = this.documentHelper.selection;\n var currentPara = start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n isFirstParaForList = this.owner.editorModule.isFirstParaForList(selection, currentPara);\n if (isFirstParaForList) {\n if (isShiftTab) {\n this.owner.editorModule.updateListLevelIndent(-this.documentHelper.defaultTabWidth, currentPara);\n }\n else {\n this.owner.editorModule.updateListLevelIndent(this.documentHelper.defaultTabWidth, currentPara);\n }\n }\n else {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n }\n else if (!this.owner.isReadOnlyMode && !this.documentHelper.isFormFillProtectedMode) {\n this.owner.editorModule.handleTextInput('\\t');\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.formFields.length > 0) {\n this.selectPrevNextFormField(!isShiftTab);\n }\n this.checkForCursorVisibility();\n };\n // returns current field in FormFill mode\n Selection.prototype.getFormFieldInFormFillMode = function () {\n var currentStart = this.owner.selection.start;\n var formField;\n for (var i = (this.documentHelper.formFields.length - 1); i >= 0; i--) {\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistBefore(currentStart)) {\n formField = this.documentHelper.formFields[i];\n break;\n }\n else if (i === 0) {\n formField = this.documentHelper.formFields[(this.documentHelper.formFields.length - 1)];\n }\n }\n return formField;\n };\n // Navigates & Selects next form field\n Selection.prototype.selectPrevNextFormField = function (forward, formField) {\n if (this.documentHelper.isFormFillProtectedMode) {\n if (!formField) {\n formField = this.getCurrentFormField();\n }\n var index = this.documentHelper.formFields.indexOf(formField);\n if (forward) {\n for (var i = index;; i++) {\n if (i === (this.documentHelper.formFields.length - 1)) {\n i = 0;\n }\n else {\n i = i + 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i - 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n else {\n for (var i = index;; i--) {\n if (i === 0) {\n i = (this.documentHelper.formFields.length - 1);\n }\n else {\n i = i - 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i + 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.navigateToNextFormField = function () {\n var currentStart = this.owner.selection.end;\n var currentFormField;\n for (var i = 0; i < this.documentHelper.formFields.length; i++) {\n currentFormField = this.documentHelper.formFields[i];\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistAfter(currentStart)) {\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[i]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[i]);\n }\n break;\n }\n else if (i === (this.documentHelper.formFields.length - 1)) {\n currentFormField = this.documentHelper.formFields[0];\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[0]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[0]);\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTextElementStartOfField = function (formField) {\n var fieldSeparator = formField.fieldSeparator;\n var element = fieldSeparator.nextElement;\n if (element) {\n while (!(element instanceof TextElementBox)) {\n element = element.nextElement;\n }\n var offset = formField.line.getOffset(element, 0);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, element, 0, point);\n }\n };\n Selection.prototype.triggerFormFillEvent = function (isKeyBoardNavigation) {\n var previousField = this.previousSelectedFormField;\n var currentField = this.getCurrentFormField();\n var previousFieldData;\n var currentFieldData;\n if (currentField !== previousField && previousField && previousField.formFieldData instanceof TextFormField\n && previousField.formFieldData.type === 'Text') {\n if (previousField.formFieldData.format !== '' && !this.isFormatUpdated) {\n // Need to handle update form field format\n this.owner.editor.applyFormTextFormat(previousField);\n }\n previousFieldData = { 'fieldName': previousField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(previousField) };\n this.owner.trigger(afterFormFieldFillEvent, previousFieldData);\n }\n if (currentField !== previousField && currentField && ((currentField.formFieldData instanceof TextFormField\n && currentField.formFieldData.type === 'Text' && isKeyBoardNavigation == undefined) || (((currentField.formFieldData instanceof TextFormField && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline') || (currentField.formFieldData instanceof CheckBoxFormField)) && isKeyBoardNavigation))) {\n currentFieldData = { 'fieldName': currentField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(currentField) };\n this.owner.trigger(beforeFormFieldFillEvent, currentFieldData);\n }\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below\n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraphInternal(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.getFirstParagraphBlock(table);\n var lastPara = this.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Selects the entire document.\n *\n * @returns {void}\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n this.documentHelper.skipScrollToPosition = true;\n var container = this.getContainerWidget(this.start.paragraph);\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else if (this.isInShape) {\n var textFrame = this.getCurrentTextFrame();\n documentStart = this.setPositionForBlock(textFrame.firstChild, true);\n documentEnd = this.setPositionForBlock(textFrame.lastChild, false);\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n var i = void 0;\n var j = void 0;\n var pageLength = this.documentHelper.pages.length;\n for (i = 0; i <= pageLength - 1; i++) {\n if (isNullOrUndefined(this.documentHelper.pages[i].footnoteWidget)) {\n continue;\n }\n else {\n documentStart = this.setPositionForBlock(this.documentHelper.pages[i].footnoteWidget.bodyWidgets[0].firstChild, true);\n break;\n }\n }\n for (j = pageLength - 1; j >= 0; j--) {\n if (isNullOrUndefined(this.documentHelper.pages[j].footnoteWidget)) {\n continue;\n }\n else {\n var child = this.documentHelper.pages[j].footnoteWidget.bodyWidgets.length;\n var lastChild = this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets.length;\n documentEnd = this.setPositionForBlock(this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets[lastChild - 1], false);\n break;\n }\n }\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n var endNotes = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(endNotes.bodyWidgets[0].firstChild, true);\n documentEnd = this.setPositionForBlock(endNotes.bodyWidgets[endNotes.bodyWidgets.length - 1].firstChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document.\n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extends selection backward.\n *\n * @returns {void}\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveForward();\n }\n else {\n this.end.moveBackward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection forward.\n *\n * @returns {void}\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveBackward();\n }\n else {\n this.end.moveForward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extends selection to word start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordStart = function () {\n this.extendToWordStartInternal(false);\n };\n /**\n * Extends selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEnd = function () {\n this.extendToWordEndInternal(false);\n };\n /**\n * Extends selection to word start\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEndInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to next line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n *\n * @private\n * @returns {string}\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, undefined, 0, includeObject);\n }\n else {\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n * @param block\n * @param offset\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n if (block instanceof BodyWidget && !isNullOrUndefined(block.containerWidget) && block.containerWidget instanceof FootNoteWidget) {\n var ind = block.containerWidget.bodyWidgets.indexOf(block);\n index = ind + ';' + offset;\n }\n else {\n index = block.index + ';' + offset;\n }\n }\n if (block instanceof TextFrame) {\n var indexInOwner = block.containerShape.line.getOffset(block.containerShape, 1);\n index = 'S' + ';' + indexInOwner + ';' + offset;\n return this.getHierarchicalIndex(block.containerShape.paragraph, index);\n }\n if (block instanceof FootNoteWidget) {\n // index = block.index + ';' + index;\n //block = block.containerWidget;\n var hfString = block.footNoteType === 'Footnote' ? 'FN' : 'EN';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndexByPosition = function (position) {\n var info = this.getParagraphInfo(position);\n return this.getHierarchicalIndex(info.paragraph, info.offset.toString());\n };\n /**\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getTextPosBasedOnLogicalIndex = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Get offset value to update in selection\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfoBasedOnParagraph = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Gets body widget based on position.\n *\n * @private\n * @returns {BlockContainer}\n */\n Selection.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n else if (value === 'FN' || value === 'EN') {\n return this.getFootNoteWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Selection.prototype.getFootNoteWidget = function (position) {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n var footNote = value1 === 'FN';\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n var page = this.documentHelper.pages[index1];\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n if (footNote) {\n return page.footnoteWidget.bodyWidgets[index1];\n }\n else {\n return page.endnoteWidget.bodyWidgets[index1];\n }\n };\n Selection.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.documentHelper.pages[index];\n var headerFooterWidget;\n if (isHeader) {\n headerFooterWidget = page.headerWidget;\n }\n else {\n headerFooterWidget = page.footerWidget;\n }\n if (!isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget.page = page;\n }\n return headerFooterWidget;\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Selection.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[0];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.childWidgets.length > 0 && bodyWidget.firstChild.index <= blockIndex &&\n bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n return undefined;\n };\n Selection.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n value = position.index.substring(0, 1);\n if (value === 'S') {\n position.index = position.index.substring(1).replace(';', '');\n var indexInOwner = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var paraIndex = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var shape = childWidget.getInline(parseInt(indexInOwner), 0).element;\n childWidget = shape.textFrame.childWidgets[paraIndex];\n }\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.documentHelper.selection.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.documentHelper.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {Widget}\n */\n Selection.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * Get logical offset of paragraph.\n *\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.documentHelper.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * @private\n * @returns {ListTextElementBox}\n */\n Selection.prototype.getListTextElementBox = function (paragarph) {\n if (isNullOrUndefined(paragarph)) {\n return undefined;\n }\n var listTextElement;\n if (!paragarph.isEmpty()) {\n var lineWidget = paragarph.childWidgets[0];\n if (lineWidget.children.length > 1) {\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n listTextElement = lineWidget.children[0];\n }\n }\n }\n return listTextElement;\n };\n /**\n * @private\n * @returns {WListLevel}\n */\n Selection.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels)) {\n return this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n text = text + '\\r' + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n *\n * @private\n * @param fieldBegin\n * @returns {string}\n */\n Selection.prototype.getFieldCode = function (fieldBegin) {\n var fieldCode = '';\n if (!(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n * @returns {FieldElementBox}\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n *\n * @private\n * @returns {TableWidget}\n */\n Selection.prototype.getFirstParagraphInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if ((!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox)\n || inline instanceof ShapeElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n *\n * @private\n * @returns {TableWidget}\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n * @param element\n * @returns\n */\n Selection.prototype.isElementInSelection = function (element, isStart) {\n var offset = element.line.getOffset(element, isStart ? 0 : 1);\n var elemPosition = new TextPosition(this.owner);\n elemPosition.setPositionParagraph(element.line, offset);\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n return ((elemPosition.isExistAfter(start) || elemPosition.isAtSamePosition(start))\n && (elemPosition.isExistBefore(end) || elemPosition.isAtSamePosition(end)));\n };\n /**\n * @private\n */\n Selection.prototype.isSelectionInsideElement = function (element) {\n //Handled for spellcheck\n if (this.isEmpty) {\n var startOffset = element.line.getOffset(element, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, startOffset);\n var endOffset = element.line.getOffset(element, element.length);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(element.line, endOffset);\n return ((this.start.isExistAfter(startPosition) || this.start.isAtSamePosition(startPosition))\n && (this.start.isExistBefore(endPosition) || this.start.isAtSamePosition(endPosition)));\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n if (startPage === endPage && start.containerWidget.containerWidget instanceof FootNoteWidget && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n var startindex = this.documentHelper.pages[startPage].footnoteWidget.bodyWidgets.indexOf(start.containerWidget);\n var endindex = this.documentHelper.pages[endPage].footnoteWidget.bodyWidgets.indexOf(block.containerWidget);\n return startindex < endindex;\n }\n else {\n return startPage < endPage;\n }\n }\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) || (start.containerWidget instanceof FootNoteWidget && block.containerWidget instanceof FootNoteWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start)\n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <=\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline, isRetrieve) {\n if (currentInline.line === inline.line) {\n var selection = this.documentHelper.selection;\n if (isRetrieve) {\n return currentInline.line.children.indexOf(currentInline) >=\n inline.line.children.indexOf(inline);\n }\n else if (currentInline === inline && selection.start.offset !== selection.end.offset) {\n return currentInline.line.children.indexOf(currentInline) ===\n inline.line.children.indexOf(inline);\n }\n else {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n var nextPage = headerFooter.page.nextPage;\n var headerWidget = nextPage.headerWidget;\n headerWidget.page = nextPage;\n if (nextPage.footerWidget) {\n nextPage.footerWidget.page = nextPage;\n }\n nextBlock = headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n var previousPage = headerFooter.page.previousPage;\n var footerWidget = previousPage.footerWidget;\n footerWidget.page = previousPage;\n if (previousPage.headerWidget) {\n previousPage.headerWidget.page = previousPage;\n }\n previousBlock = footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraphBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo) {\n var length = 0;\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo);\n }\n break;\n }\n length += this.getLineLength(line);\n }\n return length;\n };\n /**\n * Get Line length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getLineLength = function (line, elementInfo) {\n var length = 0;\n var bidi = line.paragraph.bidi;\n for (var i = !bidi ? 0 : line.children.length - 1; bidi ? i > -1 : i < line.children.length; bidi ? i-- : i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof ShapeElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof CommentCharacterElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ContentControl) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n *\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell.\n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n *\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n *\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n *\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n *\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get first paragraph in last row\n *\n * @private\n */\n Selection.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get previous valid offset\n *\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n var value = 0;\n var bidi = paragraph.paragraphFormat.bidi;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n *\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n // if (!line.paragraph.paragraphFormat.bidi) {\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n if (offset === count + inline.length && inline instanceof FieldElementBox &&\n inline.fieldType === 1 && inline.previousNode instanceof ImageElementBox) {\n return offset;\n }\n count += inline.length;\n }\n // } else {\n // if (offset !== this.getLineLength(line)) {\n // offset = line.getInlineForOffset(offset, false, undefined, false, false, true).index;\n // }\n // }\n return offset;\n };\n /**\n * Get paragraph mark size info\n *\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.documentHelper.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.documentHelper.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += this.documentHelper.layout.getAfterSpacing(paragraph);\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline, line.paragraph.bidi);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n *\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded && (inline instanceof ImageElementBox || inline instanceof ShapeElementBox)) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index\n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.documentHelper.isTouchInput) {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n }\n else {\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n }\n };\n Selection.prototype.showResizerForShape = function () {\n var shape = this.getCurrentTextFrame().containerShape;\n this.owner.imageResizerModule.positionImageResizer(shape);\n this.owner.imageResizerModule.showImageResizer();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlight = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var width = 0;\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBoxCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBoxCollection && elementBoxCollection.length > 1) {\n for (var i = 0; i < elementBoxCollection.length; i++) {\n var element = elementBoxCollection[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox\n && selectionEndIndex > element.length) {\n var charFormat = element.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi && !elementIsRTL) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true);\n }\n }\n else { // Need to handle the Paragraph mark highlighting.\n if (endElement instanceof TextElementBox && selectionEndIndex > endElement.length) {\n var charFormat = endElement.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n // Since isRTLText is truo, so the right is considered as left\n if (!paragraph.bidi && isRtlText) {\n right += paragraphMarkWidth;\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, right, top, true);\n // Highlight the paragraph mark. \n right += endElement.width;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, right, top, true);\n }\n else if (paragraph.bidi && !isRtlText) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false);\n }\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property. \n this.createHighlightBorder(startLineWidget, width, paragraph.bidi ? right : left, top, false);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n elementIsRTL = false;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n }\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(startLineWidget, element, index);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true);\n }\n // Highlight the Paragrph mark for last line.\n if (startLineWidget.isLastLine()) {\n var charFormat = elementCollection[elementCollection.length - 1].line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi) {\n // The paragraph mark will be at the left most end.\n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n }\n else { // The paragraph mark will at right most end.\n left = elementIsRTL ? startLineWidget.paragraph.x + this.getWidth(startLineWidget, false) : right;\n }\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n if (this.isHideSelection(paragraph)) {\n this.isHighlightNext = false;\n return;\n }\n this.isHighlightNext = true;\n this.hightLightNextParagraph = paragraph;\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.isHighlightNext = false;\n this.highlight(block, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /**\n * highlight selected table\n *\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) { //Selection end is not inside the current table.\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n *\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n *\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n *\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n *\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n *\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n *\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n *\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n *\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n *\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * @private\n * @return\n */\n Selection.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.paragraphFormat.listLevelNumber <= 0) ? 0 : this.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n /**\n * Get Next paragraph from cell\n *\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell.\n cell = cell.nextRenderedWidget;\n var block = cell.firstChild;\n if (block) {\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n *\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n *\n * @private\n */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable, start, end);\n };\n /**\n * Get previous valid element\n *\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n *\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n if (inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n *\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n var nextNode = inline.nextNode;\n if (inline.length === index && (nextNode instanceof FieldElementBox\n || (!(inline instanceof ImageElementBox) && (nextNode instanceof BookmarkElementBox || nextNode instanceof CommentCharacterElementBox)))) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if ((nextInline instanceof FieldElementBox && nextInline.fieldType === 1)\n || (nextInline instanceof BookmarkElementBox && nextInline.bookmarkType === 1)\n || (nextInline instanceof CommentCharacterElementBox && nextInline.commentType === 1)) {\n inline = nextInline;\n index = this.documentHelper.isFormFillProtectedMode ? 0 : 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n *\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1 || inline instanceof CommentCharacterElementBox) {\n element = inline;\n }\n else {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode)) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox && element.textWrappingStyle === 'Inline') {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.documentHelper.textHelper.getHeight(format);\n if (element.margin.top + element.height - measureObj.BaselineOffset > 0) {\n top += element.margin.top + element.height - measureObj.BaselineOffset;\n }\n }\n else if (!(element instanceof FieldElementBox || inline instanceof CommentCharacterElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n *\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n *\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n *\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox || currentInline instanceof CommentCharacterElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n *\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n *\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.documentHelper.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += this.documentHelper.layout.getAfterSpacing(paragarph);\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.documentHelper.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = format.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.documentHelper.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.documentHelper.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n *\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return { 'element': inline, 'index': inlineIndex };\n }\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n *\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n *\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n *\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof TextFrame) {\n var shape = widget.containerWidget.containerShape;\n if (shape.line) {\n page = this.getPage(shape.line.paragraph);\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n //Body Widget \n Selection.prototype.getLineWidgetBodyWidget = function (widget, point) {\n var bodyWgt = widget;\n if (bodyWgt instanceof BlockContainer) {\n for (var x = 0; x < bodyWgt.floatingElements.length; x++) {\n var floatWidget = bodyWgt.floatingElements[x];\n if (floatWidget instanceof TableWidget) {\n var floatWidgetWidth = floatWidget.getTableCellWidth();\n if (point.x <= floatWidget.x + floatWidgetWidth && point.x >= floatWidget.x\n && point.y <= floatWidget.y + floatWidget.height && point.y >= floatWidget.y) {\n return this.getLineWidgetTableWidget(floatWidget, point);\n }\n }\n }\n }\n if (widget instanceof FootNoteWidget) {\n for (var j = 0; j < widget.bodyWidgets.length; j++) {\n for (var k = 0; k < widget.bodyWidgets[j].childWidgets.length; k++) {\n var footChild = widget.bodyWidgets[j].childWidgets[k];\n if (footChild instanceof Widget && footChild.y <= point.y\n && (footChild.y + footChild.height) >= point.y) {\n if (footChild instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(footChild, point);\n }\n else {\n return this.getLineWidgetTableWidget(footChild, point);\n }\n }\n }\n }\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof FootNoteWidget) {\n return childWidget[i];\n }\n else {\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(childWidget, point);\n }\n else {\n var table = childWidget;\n if (table.wrapTextAround) {\n continue;\n }\n return this.getLineWidgetTableWidget(table, point);\n }\n }\n }\n }\n var line = undefined;\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n line = this.getLineWidgetTableWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n var line = childWidgets[i];\n top += line.marginTop;\n var lineTotalHeight = line.height;\n if (line.nextLine && line.nextLine.marginTop > 0) {\n lineTotalHeight += line.nextLine.marginTop;\n }\n if (top <= point.y\n && (top + lineTotalHeight) >= point.y) {\n return line;\n }\n top += line.height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n if (widget.paragraphFormat.bidi && endLine.children.indexOf(endElement) > 0) {\n endElement = endLine.children[0];\n }\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n else {\n top += line.marginTop;\n }\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = 0;\n // highlighting approach for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBoxCollection = this.getElementsBackward(line, endElement, endElement, widget.bidi);\n for (var i_2 = 0; i_2 < elementBoxCollection.length; i_2++) {\n var element = elementBoxCollection[i_2];\n var elementIsRTL = false;\n if (element === endElement) {\n right = this.getLeftInternal(line, element, endIndex);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(line, element, index);\n }\n left = this.getLeftInternal(line, element, 0);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox && endIndex > element.length) {\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(element.line.paragraph.characterFormat).Width;\n if (!widget.bidi && elementIsRTL) {\n right += paragraphMarkWidth;\n }\n else if (widget.bidi && !elementIsRTL) { // Paragrph and Selection ends in normal text\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(line, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph.\n left = this.getLineStartLeft(line) - paragraphMarkWidth;\n this.createHighlightBorder(line, paragraphMarkWidth, left, top, true);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(line, width, elementIsRTL ? right : left, top, true);\n }\n return;\n }\n else {\n right = this.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(line, width, isRtlText ? right : left, top, false);\n return;\n }\n }\n else {\n width = this.getWidth(line, true) - (left - widget.x);\n // Highlight the paragrph mark for Bidi paragrph.\n if (widget.bidi && line.isLastLine()) {\n left -= this.documentHelper.textHelper.getParagraphMarkSize(widget.characterFormat).Width;\n }\n this.createHighlightBorder(line, width, left, top, false);\n top += line.height;\n }\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n if (childWidget.rowFormat.heightType === 'Exactly' &&\n (childWidget.y + HelperMethods.convertPointToPixel(childWidget.rowFormat.height) < point.y)) {\n continue;\n }\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n *\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n *\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n *\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n var isRtlText = false;\n var isParaBidi = false;\n left = elementValues.left;\n var children = widget.renderedElements;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (children.length > 0) {\n inline = children[children.length - 1];\n index = inline.length;\n }\n index++;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left || (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n var isInInline = false;\n if (widget.paragraph.floatingElements.length > 0) {\n isInInline = this.documentHelper.checkPointIsInLine(widget, caretPosition);\n }\n for (var i = children.indexOf(element); i < children.length; i++) {\n element = children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n if (this.documentHelper.isInShapeBorder(element, caretPosition) &&\n !this.documentHelper.isSelectionChangedOnMouseMoved && !isInInline) {\n left = element.x;\n top = element.y;\n break;\n }\n continue;\n }\n var isCurrentParaBidi = false;\n if (element instanceof ListTextElementBox || element instanceof TextElementBox) {\n isCurrentParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x < left + element.margin.left + element.width + element.padding.left || i === children.length - 1\n || ((children[i + 1] instanceof ListTextElementBox) && isCurrentParaBidi)) {\n break;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n if (element instanceof TextElementBox) {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x > left + element.margin.left + element.width + element.padding.left) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n if (isRtlText && isParaBidi) {\n index = 0;\n }\n if ((element instanceof TextElementBox && (element.text !== \"\\v\" || element.text !== '\\f')) || includeParagraphMark) {\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n else if (element instanceof TextElementBox) {\n if (element instanceof TextElementBox && isRtlText) {\n left += element.width + element.padding.left;\n }\n var x = 0;\n if (isRtlText) {\n x = (left + element.margin.left) - caretPosition.x;\n }\n else {\n x = caretPosition.x - left - element.margin.left - element.padding.left;\n }\n left += (element.margin.left + element.padding.left);\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width + element.padding.left;\n }\n else {\n width = this.documentHelper.textHelper.getWidth(element.text.substr(0, i), element.characterFormat);\n element.trimEndWidth = width;\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n charIndex = i;\n }\n else {\n if (isRtlText) {\n left -= prevWidth;\n }\n else {\n left += prevWidth;\n }\n charIndex = i - 1;\n if (i === 1 && element !== children[0] && !(children[0] instanceof ShapeBase &&\n children[0].textWrappingStyle !== 'Inline')) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox) && !isRtlText) {\n element = children[curIndex - 1];\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox || element instanceof ShapeElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += (element.margin.left + element.width + element.padding.left);\n }\n else if (element !== children[0] && !isImageSelected) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox)) {\n element = children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && (element.text === '\\v' || element.text === '\\f')) {\n index = 0;\n }\n }\n else {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n if (element instanceof TextElementBox && (isParaBidi || isRtlText) && caretPosition.x < left + element.margin.left + element.width + element.padding.left) {\n index = this.getTextLength(element.line, element) + element.length;\n }\n else {\n index = this.getTextLength(element.line, element);\n }\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.documentHelper.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = element.height;\n if (element instanceof BookmarkElementBox && !this.documentHelper.layout.hasValidElement(element.line.paragraph)) {\n height = textMetrics.Height; //after text helper class\n }\n top += element.margin.top + height - textMetrics.BaselineOffset;\n }\n inline = element;\n if (inline instanceof FieldElementBox && inline.fieldType === 2 && !isNullOrUndefined(inline.fieldBegin)) {\n inline = inline.fieldBegin;\n index = 0;\n }\n if (inline instanceof EditRangeEndElementBox) {\n index = 0;\n }\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = isNullOrUndefined(inline.nextNode)\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width + element.padding.left;\n left += width;\n index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /**\n * @private\n */\n Selection.prototype.checkAllFloatingElements = function (widget, caretPosition) {\n var bodyWidget;\n var isShapeSelected = false;\n var isInShapeBorder = false;\n var floatElement;\n if (!isNullOrUndefined(widget)) {\n bodyWidget = widget.paragraph.bodyWidget;\n isShapeSelected = false;\n isInShapeBorder = false;\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n if (bodyWidget.floatingElements[i] instanceof TableWidget) {\n continue;\n }\n floatElement = bodyWidget.floatingElements[i];\n if (caretPosition.x < floatElement.x + floatElement.margin.left + floatElement.width && caretPosition.x > floatElement.x\n && caretPosition.y < floatElement.y + floatElement.margin.top + floatElement.height && caretPosition.y > floatElement.y) {\n isShapeSelected = true;\n if (this.documentHelper.isInShapeBorder(floatElement, caretPosition)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': caretPosition,\n 'isShapeSelected': isShapeSelected,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n /**\n * Get text length if the line widget\n *\n * @private\n */\n Selection.prototype.getTextLength = function (widget, element) {\n var length = 0;\n var renderedElement = widget.renderedElements;\n var count = renderedElement.indexOf(element);\n if (renderedElement.length > 0 && renderedElement[0] instanceof ListTextElementBox) {\n if (renderedElement[1] instanceof ListTextElementBox) {\n count -= 2;\n }\n else {\n count -= 1;\n }\n }\n for (var i = 1; i < count; i++) {\n length += renderedElement[i].length;\n }\n return length;\n };\n /**\n * Get Line widget left\n *\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n var renderedElements = widget.renderedElements;\n for (var i = 0; i < renderedElements.length; i++) {\n var element = renderedElements[i];\n if (element instanceof ListTextElementBox && !paragraphFormat.bidi) { //after list implementation\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n *\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n var line = widget.paragraph.childWidgets[i];\n top = (top + line.height + line.marginTop);\n }\n top += widget.marginTop;\n return top;\n };\n /**\n * Get first element the widget\n *\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget) && !widget.paragraph.paragraphFormat.bidi) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n var renderedChild = widget.renderedElements;\n for (var i = 0; i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (element instanceof ListTextElementBox || element instanceof CommentCharacterElementBox) {\n if (widget.paragraph.paragraphFormat.bidi) {\n left += element.margin.left;\n element = undefined;\n break;\n }\n left += element.margin.left + element.width;\n element = undefined;\n // }\n // else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n // || (element.nextNode instanceof FieldElementBox && ((element.nextNode as FieldElementBox).fieldType === 2))) {\n // element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n *\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n *\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @param widget\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n *\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n width += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var elementBox = widget.children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += (elementBox.margin.left + elementBox.width + elementBox.padding.left);\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n *\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var renderedWidget = widget.renderedElements;\n var count = renderedWidget.indexOf(elementBox);\n if ((renderedWidget.length === 1 && renderedWidget[0] instanceof ListTextElementBox) || (renderedWidget.length === 2\n && renderedWidget[0] instanceof ListTextElementBox && renderedWidget[1] instanceof ListTextElementBox)) {\n count = renderedWidget.length;\n }\n for (var i = 0; i < count; i++) {\n var widgetInternal = renderedWidget[i];\n if (widgetInternal instanceof ShapeBase && widgetInternal.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (i === 1 && widgetInternal instanceof ListTextElementBox) {\n left += widgetInternal.width;\n }\n else if (widgetInternal instanceof TabElementBox && elementBox === widgetInternal) {\n left += widgetInternal.margin.left;\n }\n else {\n left += widgetInternal.margin.left + widgetInternal.width + widgetInternal.padding.left;\n }\n }\n var isRtlText = false;\n var isParaBidi = widget.paragraph.bidi;\n if (!isNullOrUndefined(elementBox)) {\n isRtlText = (elementBox.characterRange & CharacterRangeType.RightToLeft) === CharacterRangeType.RightToLeft;\n isParaBidi = elementBox.line.paragraph.paragraphFormat.bidi;\n left += (elementBox.margin.left + elementBox.padding.left);\n if (elementBox instanceof ShapeBase && !isNullOrUndefined(elementBox.nextElement)) {\n left += (elementBox.nextElement.margin.left + elementBox.nextElement.padding.left);\n }\n if (isRtlText || (this.documentHelper.moveCaretPosition === 1 && !isRtlText && isParaBidi)) {\n left += elementBox.width;\n }\n }\n var width = 0;\n if (elementBox instanceof TextElementBox) {\n if ((this.documentHelper.moveCaretPosition !== 0) && (isParaBidi || isRtlText)) {\n if ((isRtlText && isParaBidi && this.documentHelper.moveCaretPosition === 2)\n || (isRtlText && !isParaBidi && this.documentHelper.moveCaretPosition === 1)) {\n left -= elementBox.width;\n }\n this.documentHelper.moveCaretPosition = 0;\n return left;\n }\n if (index === elementBox.length && !isRtlText) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n if (isRtlText) {\n left -= elementBox.width + width;\n }\n else {\n left += elementBox.width + width;\n }\n }\n else {\n width = this.documentHelper.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat);\n elementBox.trimEndWidth = width;\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n }\n this.documentHelper.moveCaretPosition = 0;\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n left += elementBox.width;\n }\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.documentHelper.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n var childLen = widget.children.length;\n for (var i = 0; i < childLen; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true, true);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraphInternal = function (paragraph, positionAtStart) {\n var line;\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(paragraph.firstChild)) {\n line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.documentHelper.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged, isKeyBoardNavigation) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (this.isModifyingSelectionInternally) {\n return;\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.documentHelper.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true);\n }\n if (this.documentHelper.restrictEditingPane.isShowRestrictPane && !this.skipEditRangeRetrieval) {\n this.documentHelper.restrictEditingPane.updateUserInformation();\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n this.documentHelper.updateFocus();\n if (this.documentHelper.isInlineFormFillProtectedMode && isSelectionChanged) {\n this.triggerFormFillEvent(isKeyBoardNavigation);\n this.previousSelectedFormField = this.getCurrentFormField();\n }\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n if (!this.isImageSelected) {\n this.imageFormat.clearImageFormat();\n }\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n /**\n * Returns the context type of previous character or element.\n * @param isElement - Decides whether to get previous context type from element or character. By default, character.\n */\n Selection.prototype.getPreviousContextType = function (isElement) {\n var contextType;\n var start = this.start;\n if (start.offset > 0) {\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement) {\n element = element.previousElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset - 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n }\n return undefined;\n };\n /**\n * Returns the context type of next character or element.\n * @param isElement - Decides whether to get next context type from element or character. By default, character.\n */\n Selection.prototype.getNextContextType = function (isElement) {\n var contextType;\n var start = this.start;\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement && element.nextElement) {\n element = element.nextElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset + 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n };\n Selection.prototype.getContextElement = function (element) {\n if (element instanceof TextElementBox) {\n return 'Text';\n }\n else if (element instanceof FieldElementBox || element instanceof FieldTextElementBox) {\n return 'Field';\n }\n else if (element instanceof BookmarkElementBox) {\n return 'Bookmark';\n }\n else if (element instanceof ImageElementBox) {\n return 'Image';\n }\n else if (element instanceof ShapeElementBox) {\n return 'Shape';\n }\n else if (element instanceof CommentElementBox || element instanceof CommentCharacterElementBox) {\n return 'Comment';\n }\n else if (element instanceof ListTextElementBox) {\n return 'List';\n }\n else if (element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox) {\n return 'EditRange';\n }\n else {\n return undefined;\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n var currentRevision = this.getCurrentRevision();\n if (!isNullOrUndefined(currentRevision) && this.owner.showRevisions) {\n this.owner.trackChangesPane.currentSelectedRevision = currentRevision[0];\n this.owner.commentReviewPane.selectReviewTab('Changes');\n this.owner.notify('reviewPane', { comment: this.owner.showComments, changes: true, isUserClosed: false });\n }\n else if (!isNullOrUndefined(this.owner.trackChangesPane.currentSelectedRevision)) {\n this.owner.trackChangesPane.currentSelectedRevision = undefined;\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n Selection.prototype.addItemRevisions = function (currentItem, isFromAccept) {\n for (var i = 0; i < currentItem.revisions.length; i++) {\n var currentRevision = currentItem.revisions[i];\n this.selectRevision(currentRevision);\n if (isFromAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.hasRevisions = function () {\n if (this.getCurrentRevision()) {\n return true;\n }\n return false;\n };\n Selection.prototype.getCurrentRevision = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var elementInfo = start.currentWidget.getInline(start.offset, 0);\n var currentElement = elementInfo.element;\n var startPara = start.paragraph;\n var nextOffsetElement = start.currentWidget.getInline(start.offset + 1, 0).element;\n var eleEndPosition;\n if (currentElement && currentElement === nextOffsetElement) {\n var offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (end.offset === eleEndPosition.offset && !isNullOrUndefined(currentElement.nextElement)) {\n return undefined;\n }\n }\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n return currentElement.revisions;\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget.ownerRow) && cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n return cellWidget.ownerRow.rowFormat.revisions;\n }\n }\n if (end.offset > end.paragraph.getLength()) {\n if (end.paragraph.characterFormat.revisions.length > 0) {\n return end.paragraph.characterFormat.revisions;\n }\n }\n return undefined;\n };\n Selection.prototype.processLineRevisions = function (linewidget, isFromAccept) {\n for (var i = 0; i < linewidget.children.length; i++) {\n var element = linewidget.children[i];\n if (element.revisions.length > 0) {\n this.addItemRevisions(element, isFromAccept);\n }\n }\n };\n /**\n * @private\n * @param isFromAccept\n */\n Selection.prototype.handleAcceptReject = function (isFromAccept) {\n if (this.isEmpty) {\n var elementInfo = this.start.currentWidget.getInline((this.start.offset + 1), 0);\n var currentElement = elementInfo.element;\n var startPara = this.start.paragraph;\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.addItemRevisions(currentElement, isFromAccept);\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget)) {\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n this.addItemRevisions(cellWidget.ownerRow.rowFormat, isFromAccept);\n }\n }\n else if (!startPara.isEmpty()) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = void 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n this.processLineRevisions(linewidget, isFromAccept);\n }\n }\n }\n }\n }\n else {\n var revisions = this.getselectedRevisionElements();\n for (var i = 0; i < revisions.length; i++) {\n this.acceptReject(revisions[i], isFromAccept);\n }\n }\n };\n Selection.prototype.acceptReject = function (currentRevision, toAccept) {\n this.selectRevision(currentRevision);\n if (toAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n };\n Selection.prototype.getselectedRevisionElements = function () {\n var revisionCollec = [];\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n for (var i = 0; i < this.selectedWidgets.length; i++) {\n var currentWidget = this.selectedWidgets.keys[i];\n if (currentWidget instanceof LineWidget) {\n revisionCollec = this.getSelectedLineRevisions(currentWidget, start, end, revisionCollec);\n }\n else if (currentWidget instanceof TableCellWidget) {\n if (currentWidget.ownerRow.rowFormat.revisions.length > 0) {\n revisionCollec = this.addRevisionsCollec(currentWidget.ownerRow.rowFormat.revisions, revisionCollec);\n }\n for (var i_3 = 0; i_3 < currentWidget.childWidgets.length; i_3++) {\n var paraWidget = currentWidget.childWidgets[i_3];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n revisionCollec = this.getSelectedLineRevisions(linewidget, start, end, revisionCollec);\n }\n }\n }\n }\n return revisionCollec;\n };\n Selection.prototype.getSelectedLineRevisions = function (currentWidget, start, end, elements) {\n if (currentWidget.paragraph.characterFormat.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentWidget.paragraph.characterFormat.revisions, elements);\n }\n for (var j = 0; j < currentWidget.children.length; j++) {\n var currentElement = currentWidget.children[j];\n var offset = currentElement.line.getOffset(currentElement, 0);\n var eleStartPosition = new TextPosition(this.owner);\n eleStartPosition.setPositionParagraph(currentElement.line, offset);\n offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n var eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (((eleEndPosition.isExistAfter(start) && eleEndPosition.isExistBefore(end))\n || (eleStartPosition.isExistAfter(start) && eleStartPosition.isExistBefore(end))\n || eleStartPosition.isAtSamePosition(start)\n || (start.isExistAfter(eleStartPosition) && end.isExistBefore(eleEndPosition))) && currentElement.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentElement.revisions, elements);\n }\n }\n return elements;\n };\n Selection.prototype.addRevisionsCollec = function (element, revisCollec) {\n for (var i = 0; i < element.length; i++) {\n if (revisCollec.indexOf(element[i]) === -1) {\n revisCollec.push(element[i]);\n }\n }\n return revisCollec;\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.tableFormat.table = tableAdv;\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof TextFrame) {\n bodyWidget = block.containerWidget.containerShape.line.paragraph.bodyWidget;\n }\n else if (block.containerWidget instanceof BlockContainer) {\n if (!isNullOrUndefined(block.containerWidget.containerWidget) && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n bodyWidget = block.containerWidget.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n }\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n if (bodyWidget instanceof TextFrame) {\n bodyWidget = bodyWidget.containerShape.line.paragraph;\n }\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.documentHelper.pages.indexOf(startParaSection.page);\n var endPageIndex = this.documentHelper.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n if (end.paragraph === block) {\n return;\n }\n var para = this.getNextRenderedBlock(block);\n if (!isNullOrUndefined(para)) {\n this.getParagraphFormatInternalInBlock(para, start, end);\n }\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n if (this.start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n if (end.paragraph === start.paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(start.paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.paragraph === end.paragraph && this.isSelectList) {\n var listLevel = this.getListLevel(start.paragraph);\n // let breakCharacterFormat: WCharacterFormat = start.paragraph.characterFormat;\n if (listLevel && listLevel.characterFormat.uniqueCharacterFormat) {\n this.characterFormat.copyFormat(listLevel.characterFormat);\n }\n return;\n }\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph && !paragraph.isEmpty()) {\n this.getCharacterFormatInternal(paragraph, this);\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldEnd) ?\n inline.fieldBegin : inline.fieldEnd;\n j--;\n do {\n this.characterFormat.combineFormat(inline.characterFormat);\n count += inline.length;\n inline = inline.nextNode;\n i++;\n j++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n continue;\n //isFieldStartSelected = true;\n }\n // if (inline instanceof FieldElementBox && (inline as FieldElementBox).fieldType === 1\n // && HelperMethods.isLinkedFieldCharacter((inline as FieldElementBox)) && isFieldStartSelected) {\n // let fieldInline: ElementBox = (inline as FieldElementBox).fieldBegin;\n // do {\n // this.characterFormat.combineFormat(fieldInline.characterFormat);\n // fieldInline = fieldInline.nextNode as ElementBox;\n // } while (!(fieldInline instanceof FieldElementBox));\n // }\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat);\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat);\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n this.characterFormat.copyFormat(this.getPreviousTextElement(inline).characterFormat);\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n this.characterFormat.copyFormat(this.getNextTextElement(inline).characterFormat);\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n this.getCharacterFormatForBlock(blockAdv, start, end);\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox || element instanceof ListTextElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selection.getTop(widget);\n left = this.owner.selection.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n if (widgetInfo instanceof SelectionWidgetInfo) {\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n else {\n var widgetIn = widgetInfo;\n for (var j = 0; j < widgetIn.length; j++) {\n if (widgetIn[j] instanceof SelectionWidgetInfo) {\n isSelected = widgetIn[j].left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetIn[j].left + widgetIn[j].width >= point.x;\n if (isSelected) {\n break;\n }\n }\n }\n }\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.documentHelper.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.documentHelper.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.documentHelper.isTouchInput = isTouchInput;\n _this.documentHelper.updateFocus();\n _this.documentHelper.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin, copyAddress) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n var screenTip = hyperlink.screenTip;\n if (copyAddress) {\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n if (hyperlink.isCrossRef) {\n link += hyperlink.localReference;\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n }\n hyperlink.destroy();\n return link;\n }\n else {\n hyperlink.destroy();\n return screenTip;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos, isFormField) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n var linkText = this.getScreenTipText(fieldBegin);\n if (isFormField) {\n var helpText = fieldBegin.formFieldData.helpText;\n if (isNullOrUndefined(helpText) || helpText === '') {\n return;\n }\n this.toolTipElement.innerHTML = helpText;\n }\n else {\n this.toolTipElement.innerHTML = linkText + '
      ' + toolTipText + '';\n }\n var position = this.getTooltipPosition(fieldBegin.line, xPos, this.toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Get screenTip text\n * @private\n */\n Selection.prototype.getScreenTipText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n if (!hyperlink.screenTip && !hyperlink.localReference) {\n return hyperlink.navigationLink;\n }\n else if (hyperlink.screenTip) {\n return hyperlink.screenTip;\n }\n else {\n return hyperlink.localReference;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setFootnoteContentToToolTip = function (footnote, widget, xPos) {\n if (footnote) {\n if (this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block' &&\n this.owner.contextMenuModule) {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var ln = new L10n('documenteditor', this.owner.defaultLocale);\n ln.setLocale(this.owner.locale);\n var toolTipText = void 0;\n if (footnote.footnoteType === 'Endnote') {\n toolTipText = ln.getConstant('Click to View/Edit Endnote');\n }\n else if (footnote.footnoteType === 'Footnote') {\n toolTipText = ln.getConstant('Click to View/Edit Footnote');\n }\n this.toolTipElement.innerHTML = '' + toolTipText + '';\n var positions = this.getTooltipPosition(footnote.line, xPos, this.toolTipElement, false);\n this.showToolTip(positions.x, positions.y);\n if (!isNullOrUndefined(this.toolTipField)) {\n this.toolTipObject.position = { X: positions.x, Y: positions.y };\n }\n this.toolTipObject.show();\n // this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Set locked content info to tool tip element\n * @private\n */\n Selection.prototype.setLockInfoTooptip = function (widget, xPos, user) {\n if (widget) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n var toolTipElement = this.toolTipElement;\n if (!this.toolTipElement) {\n toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(toolTipElement);\n this.toolTipElement = toolTipElement;\n }\n toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipInfo = l10n.getConstant('This region is locked by');\n toolTipElement.innerHTML = toolTipInfo + ' ' + user + '';\n var position = this.getTooltipPosition(widget, xPos, toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && user !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = user;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * @private\n */\n Selection.prototype.getTooltipPosition = function (widget, xPos, toolTipElement, isFormField) {\n var widgetTop = this.getTop(widget) * this.documentHelper.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.documentHelper.viewerContainer.getBoundingClientRect().width + this.documentHelper.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.documentHelper.zoomFactor;\n if ((left + toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var offsetHeight = !isFormField ? toolTipElement.offsetHeight : 0;\n var top = this.getPageTop(page) + (widgetTop - offsetHeight);\n top = top > this.documentHelper.viewerContainer.scrollTop ? top : top + widget.height + offsetHeight;\n return new Point(left, top);\n };\n /**\n * @private\n */\n Selection.prototype.createPasteElement = function (top, left) {\n var items;\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n switch (this.currentPasteAction) {\n case 'DefaultPaste':\n items = [\n {\n text: locale.getConstant('Keep source formatting'),\n iconCss: 'e-icons e-de-paste-source'\n },\n {\n text: locale.getConstant('Match destination formatting'),\n iconCss: 'e-icons e-de-paste-merge'\n },\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'TextOnly':\n items = [\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'InsertAsColumns':\n case 'OverwriteCells':\n case 'InsertAsRows':\n items = [\n {\n text: locale.getConstant('NestTable'),\n iconCss: 'e-icons e-de-paste-nested-table'\n },\n {\n text: locale.getConstant('InsertAsRows'),\n iconCss: 'e-icons e-de-paste-row'\n }\n ];\n if (this.currentPasteAction === 'InsertAsColumns') {\n var obj = {\n text: locale.getConstant('InsertAsColumns'),\n iconCss: 'e-icons e-de-paste-column'\n };\n items.unshift(obj);\n }\n else if (this.currentPasteAction === 'OverwriteCells') {\n var obj = {\n text: locale.getConstant('OverwriteCells'),\n iconCss: 'e-icons e-de-paste-overwrite-cells'\n };\n items.splice(2, 0, obj);\n }\n break;\n }\n if (!this.pasteElement) {\n this.pasteElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.pasteElement);\n var splitButtonEle = createElement('button', { id: this.owner.containerId + '_iconsplitbtn' });\n this.pasteElement.appendChild(splitButtonEle);\n this.pasteDropDwn = new DropDownButton({\n items: items, iconCss: 'e-icons e-de-paste', select: this.pasteOptions\n });\n this.pasteDropDwn.appendTo(splitButtonEle);\n }\n else {\n this.pasteDropDwn.items = items;\n }\n this.pasteElement.style.display = 'block';\n this.pasteElement.style.position = 'absolute';\n this.pasteElement.style.left = left;\n this.pasteElement.style.top = top;\n this.pasteDropDwn.dataBind();\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.documentHelper.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipElement.style.display = 'none';\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition, isFormField) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n var renderedChild = widget.renderedElements;\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = renderedChild.indexOf(element); i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === renderedChild.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return FootnoteElementBox\n * @private\n */\n Selection.prototype.getFootNoteElementInCurrentSelection = function (lineWidget, position) {\n var inline = undefined;\n var top = this.getTop(lineWidget);\n var lineStartInLeft = this.getLineStartLeft(lineWidget);\n if (position.y < top || position.y > top + lineWidget.height\n || position.x < lineStartInLeft\n || position.x > lineStartInLeft + lineWidget.paragraph.width) {\n return undefined;\n }\n var leftLength = lineWidget.paragraph.x;\n var elementValues = this.getFirstElement(lineWidget, leftLength);\n leftLength = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(lineWidget.paragraph.characterFormat);\n if (position.x <= lineStartInLeft + width || position.x >= lineStartInLeft + width) {\n //Check if paragraph is within a field result.\n var inlineObj = this.documentHelper.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var footNote = inlineObj.element;\n if (footNote instanceof FootnoteElementBox) {\n return footNote;\n }\n else {\n return undefined;\n }\n }\n }\n else {\n if (position.x > leftLength + element.margin.left) {\n for (var i = lineWidget.children.indexOf(element); i < lineWidget.children.length; i++) {\n element = lineWidget.children[i];\n if (position.x < leftLength + element.margin.left + element.width || i === lineWidget.children.length - 1) {\n break;\n }\n leftLength += element.margin.left + element.width;\n }\n }\n if (element instanceof FootnoteElementBox) {\n inline = element;\n }\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(element.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(element.line.paragraph.characterFormat);\n }\n if (position.x <= leftLength + width) {\n return inline;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function (isRetrieve) {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n ;\n }\n var currentInline = this.end.currentWidget.getInline(end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields, isRetrieve);\n }\n else if (this.documentHelper.isFormFillProtectedMode && inline instanceof BookmarkElementBox\n && inline.previousNode instanceof FieldElementBox && inline.previousNode.fieldType === 1) {\n field = undefined;\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields, isRetrieve, false);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (checkedFields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.documentHelper.fields[i]);\n }\n var field = this.getFieldCode(this.documentHelper.fields[i]);\n field = field.trim().toLowerCase();\n var isParagraph = this.paragraphIsInFieldResult(this.documentHelper.fields[i], paragraph);\n if ((isRetrieve || (!isRetrieve && field.match('hyperlink '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n if (isParagraph && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && field.match('ref '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (fields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.documentHelper.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.documentHelper.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n var fieldBegin = this.documentHelper.fields[i];\n var fieldEnd = fieldBegin.fieldEnd;\n if (isRetrieve && fieldBegin.nextNode instanceof BookmarkElementBox) {\n fieldEnd = fieldBegin.nextNode.reference;\n }\n var isInline = (this.inlineIsInFieldResult(fieldBegin, fieldEnd, fieldBegin.fieldSeparator, inline, isRetrieve) || this.isImageField());\n if ((isRetrieve || (!isRetrieve && fieldCode.match('hyperlink '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n if (isInline && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && fieldCode.match('ref '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields, isRetrieve, checkFormField);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, fieldEnd, fieldSeparator, inline, isRetrieve) {\n if (!isNullOrUndefined(fieldEnd) && !isNullOrUndefined(fieldSeparator)) {\n if (this.isExistBeforeInline(fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldEnd, inline, isRetrieve);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in Form field\n * @private\n */\n Selection.prototype.isFormField = function () {\n var inline = this.getCurrentFormField();\n if (inline instanceof FieldElementBox && inline.formFieldData) {\n return true;\n }\n return false;\n };\n /**\n * Return true if selection is in reference field\n * @private\n */\n Selection.prototype.isReferenceField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (field) {\n var fieldCode = this.getFieldCode(field);\n fieldCode = fieldCode.toLowerCase();\n if (field instanceof FieldElementBox && fieldCode.match('ref ')) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in text form field\n * @private\n */\n Selection.prototype.isInlineFormFillMode = function (field) {\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n if (isNullOrUndefined(field)) {\n field = this.getCurrentFormField();\n }\n if (field) {\n if (field.formFieldData instanceof TextFormField && field.formFieldData.type === 'Text') {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getFormFieldType = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.getCurrentFormField();\n }\n if (formField instanceof FieldElementBox) {\n if (formField.formFieldData instanceof TextFormField) {\n return 'Text';\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n return 'CheckBox';\n }\n else if (formField.formFieldData instanceof DropDownFormField) {\n return 'DropDown';\n }\n }\n return undefined;\n };\n /**\n * Get selected form field type\n * @private\n */\n Selection.prototype.getCurrentFormField = function (checkFieldResult) {\n var field;\n field = this.getHyperlinkField(true);\n if (field instanceof FieldElementBox && field.fieldType === 0 && !isNullOrUndefined(field.formFieldData)) {\n return field;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getCurrentTextFrame = function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return container;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return null;\n };\n /**\n * @private\n */\n Selection.prototype.isTableSelected = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(start.paragraph.associatedCell) ||\n isNullOrUndefined(end.paragraph.associatedCell)) {\n return false;\n }\n var table = start.paragraph.associatedCell.ownerTable.getSplitWidgets();\n var firstParagraph = this.getFirstBlockInFirstCell(table[0]);\n var lastParagraph = this.getLastBlockInLastCell(table[table.length - 1]);\n return start.paragraph.associatedCell.equals(firstParagraph.associatedCell) &&\n end.paragraph.associatedCell.equals(lastParagraph.associatedCell)\n && (!firstParagraph.associatedCell.equals(lastParagraph.associatedCell) || (start.offset === 0\n && end.offset === this.getLineLength(lastParagraph.lastChild) + 1));\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.documentHelper.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.isSelectList = true;\n this.selectRange(startPosition, endPosition);\n this.isSelectList = false;\n this.highlightListText(this.documentHelper.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.documentHelper.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top, false);\n this.documentHelper.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var width = inline.width;\n var height = inline.height;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n imageFormat.width = width;\n imageFormat.height = height;\n if (paragraph !== null && paragraph.containerWidget !== null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n *\n * @returns {void}\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n *\n * @returns {void}\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n if (isNullOrUndefined(this.owner.sfdtExportModule)) {\n return;\n }\n this.copyToClipboard(this.getHtmlContent());\n if (isCut && this.owner.editorModule) {\n this.owner.editorModule.handleCut(this);\n }\n this.documentHelper.updateFocus();\n };\n /**\n * Write the selected content as SFDT.\n * @returns SFDT Object.\n */\n Selection.prototype.writeSfdt = function () {\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n return (this.owner.sfdtExportModule.write(startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true));\n };\n /**\n * @private\n */\n Selection.prototype.getHtmlContent = function () {\n var documentContent = this.writeSfdt();\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(documentContent);\n }\n return this.htmlWriter.writeHtml(documentContent);\n };\n Selection.prototype.copyToClipboard = function (htmlContent) {\n window.getSelection().removeAllRanges();\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.style.position = 'relative';\n div.innerHTML = htmlContent;\n document.body.appendChild(div);\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n div.tabIndex = 0;\n div.focus();\n }\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.\n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.showCaret = function () {\n var page = !isNullOrUndefined(this.documentHelper.currentPage) ? this.documentHelper.currentPage : this.documentHelper.currentRenderingPage;\n if (isNullOrUndefined(page) || this.documentHelper.isRowOrCellResizing || (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible && !this.owner.imageResizerModule.isShapeResize)) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right;\n if (this.viewer instanceof PageLayoutViewer) {\n right = page.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n else {\n right = page.boundingRectangle.width - this.owner.viewer.padding.right - this.documentHelper.scrollbarWidth;\n }\n if (!this.owner.enableImageResizerMode || (!this.owner.imageResizerModule.isImageResizerVisible || this.owner.imageResizerModule.isShapeResize)) {\n if (this.isHideSelection(this.start.paragraph)) {\n this.caret.style.display = 'none';\n }\n else if (this.isEmpty && (!this.owner.isReadOnly || this.owner.enableCursorOnReadOnly || this.isInlineFormFillMode())) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n if (!this.documentHelper.isComposingIME) {\n this.caret.style.display = 'none';\n }\n }\n }\n }\n if (!isNullOrUndefined(this) && this.documentHelper.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.documentHelper.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.documentHelper.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.documentHelper.touchEnd.style.display = 'none';\n }\n else {\n this.documentHelper.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.documentHelper.touchStart.style.display = 'none';\n }\n else {\n this.documentHelper.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.documentHelper.editableDiv.focus();\n var child = this.documentHelper.editableDiv.childNodes[this.documentHelper.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.owner.documentHelper.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page && !isNullOrUndefined(this.caret)) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selection.end);\n var topMargin = caretInfo.topMargin;\n //let caretHeight: number = caretInfo.height;\n var viewer = this.viewer;\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.documentHelper.zoomFactor) + 'px';\n if (this.owner.selection.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.documentHelper.isTouchInput || this.documentHelper.touchStart.style.display !== 'none') {\n this.documentHelper.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n this.documentHelper.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n }\n }\n this.showHidePasteOptions(this.caret.style.top, this.caret.style.left);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.showHidePasteOptions = function (top, left) {\n if (Browser.isIE) {\n return;\n }\n if (this.isViewPasteOptions) {\n if (this.pasteElement && this.pasteElement.style.display === 'block') {\n return;\n }\n this.createPasteElement(top, left);\n }\n else if (this.pasteElement) {\n this.pasteElement.style.display = 'none';\n if (!isNullOrUndefined(this.owner.editor)) {\n this.owner.editor.isHtmlPaste = false;\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getRect = function (position) {\n var caretPosition = position.location;\n var page = this.getSelectionPage(position);\n if (page) {\n var documentHelper = this.owner.documentHelper;\n var left = page.boundingRectangle.x + (Math.round(caretPosition.x) * documentHelper.zoomFactor);\n var pageGap = this.viewer.pageGap;\n var pageTop = (page.boundingRectangle.y - pageGap * (page.index + 1)) * documentHelper.zoomFactor + pageGap * (page.index + 1);\n var top_5 = pageTop + (Math.round(caretPosition.y) * documentHelper.zoomFactor);\n return new Point(left, top_5);\n }\n return new Point(0, 0);\n };\n /**\n * Gets current selected page\n * @private\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n caretHeight = topMargin < 0 ? topMargin + height : height;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.documentHelper.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.documentHelper.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.documentHelper.selectionEndPage = endPage;\n if (this.owner.selection.isEmpty) {\n this.documentHelper.selectionStartPage = endPage;\n }\n else {\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.documentHelper.selectionStartPage = startPage;\n }\n }\n }\n this.checkForCursorVisibility();\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(textPosition.paragraph));\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selection.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 32:\n this.owner.editor.insertText(String.fromCharCode(160));\n break;\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.documentHelper.viewerContainer.scrollTop -= this.documentHelper.visibleBounds.height;\n break;\n case 34:\n event.preventDefault();\n this.documentHelper.viewerContainer.scrollTop += this.documentHelper.visibleBounds.height;\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (this.isFormField() && !(this.documentHelper.isDocumentProtected)) {\n var formField = this.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof DropDownFormField) {\n formField = (event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 40) ? formField : formField.nextElement instanceof BookmarkElementBox ? formField.nextElement.reference : formField.fieldEnd;\n var index = event.keyCode === 39 ? 1 : 0;\n var offset = formField.line.getOffset(formField, index);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, formField, index, point);\n }\n }\n if (!this.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode || this.isInlineFormFillMode()) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n else if (this.documentHelper.isDocumentProtected && this.documentHelper.protectionType === 'FormFieldsOnly') {\n if (event.keyCode === 9 || event.keyCode === 32) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n }\n if (this.owner.searchModule) {\n if (!isNullOrUndefined(this.owner.searchModule.searchHighlighters) && this.owner.searchModule.searchHighlighters.length > 0) {\n this.owner.searchModule.searchResults.clear();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.documentHelper.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget, page);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget, page);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.documentHelper.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.documentHelper.zoomFactor)) && this.viewer instanceof PageLayoutViewer) {\n return true;\n }\n else if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + page.boundingRectangle.width)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n var header = page.headerWidget;\n if (header) {\n headerHeight = (header.y + header.height);\n }\n var isEmpty = header.isEmpty && !this.owner.enableHeaderAndFooter;\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var pageHeight = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageHeight);\n var height = isEmpty ? topMargin : Math.min(Math.max(headerHeight, topMargin), pageHeight / 100 * 40);\n height = height * this.documentHelper.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.documentHelper.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n var bottomMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin);\n var isEmpty = page.footerWidget.isEmpty && !this.owner.enableHeaderAndFooter;\n var height = pageRect.height;\n if (isEmpty) {\n height = (height - bottomMargin) * this.documentHelper.zoomFactor;\n }\n else {\n height = (height - Math.min(pageRect.height / 100 * 40, Math.max(footerHeight + footerDistance, bottomMargin))) * this.documentHelper.zoomFactor;\n }\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n this.owner.enableHeaderAndFooter = true;\n widget.page = page;\n this.updateTextPositionForBlockContainer(widget);\n this.shiftBlockOnHeaderFooterEnableDisable();\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.shiftBlockOnHeaderFooterEnableDisable = function () {\n for (var i = 0; i < this.documentHelper.headersFooters.length; i++) {\n var headerFooter = this.documentHelper.headersFooters[i];\n var sectionFormat = this.getBodyWidgetInternal(i, 0).sectionFormat;\n for (var _i = 0, _a = Object.keys(headerFooter); _i < _a.length; _i++) {\n var key = _a[_i];\n var widget = headerFooter[key];\n if (widget.isEmpty) {\n this.owner.editor.shiftPageContent(widget.headerFooterType, sectionFormat);\n }\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n }\n this.selectParagraphInternal(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n this.shiftBlockOnHeaderFooterEnableDisable();\n };\n //#endregion\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n if (this.pasteDropDwn) {\n this.pasteDropDwn.destroy();\n this.pasteDropDwn = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.owner = undefined;\n this.upDownSelectionLength = undefined;\n this.isSkipLayouting = undefined;\n this.isImageSelected = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.destroy();\n }\n this.contextTypeInternal = undefined;\n this.isRetrieveFormatting = undefined;\n this.characterFormatIn = undefined;\n this.paragraphFormatIn = undefined;\n this.sectionFormatIn = undefined;\n this.tableFormatIn = undefined;\n this.cellFormatIn = undefined;\n this.rowFormatIn = undefined;\n this.imageFormatInternal = undefined;\n this.skipFormatRetrieval = undefined;\n this.startInternal = undefined;\n this.endInternal = undefined;\n this.htmlWriterIn = undefined;\n this.toolTipElement = undefined;\n if (!isNullOrUndefined(this.toolTipObject)) {\n this.toolTipObject.destroy();\n }\n this.toolTipField = undefined;\n this.isMoveDownOrMoveUp = undefined;\n this.pasteElement = undefined;\n this.currentPasteAction = undefined;\n this.isViewPasteOptions = undefined;\n this.skipEditRangeRetrieval = undefined;\n this.editPosition = undefined;\n if (!isNullOrUndefined(this.selectedWidgets)) {\n this.selectedWidgets.destroy();\n }\n this.isHighlightEditRegionIn = undefined;\n this.isHighlightFormFields = undefined;\n this.editRangeCollection = [];\n this.editRangeCollection = undefined;\n this.isHightlightEditRegionInternal = undefined;\n this.isCurrentUser = undefined;\n this.isHighlightNext = undefined;\n this.hightLightNextParagraph = undefined;\n this.isWebLayout = undefined;\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.destroy();\n }\n if (!isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters.destroy();\n }\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart) {\n var bookmarks = this.documentHelper.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.documentHelper.selection.selectRange(startPosition, startPosition);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n if (bookmrkElmnt.reference.line.paragraph.bodyWidget == null) {\n bookmrkEnd = bookmrkElmnt;\n }\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name\n */\n Selection.prototype.selectBookmark = function (name) {\n this.navigateBookmark(name);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n /**\n * Return true if selection is in TOC\n * @private\n */\n Selection.prototype.isTOC = function () {\n var info = this.getParagraphInfo(this.start);\n var para = info.paragraph;\n for (var i = 0; i < para.childWidgets[0].children.length; i++) {\n var element = para.childWidgets[0].children[i];\n if (element instanceof FieldElementBox) {\n var fieldCode = this.owner.selection.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n return true;\n }\n }\n else {\n continue;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementsForward = function (lineWidget, startElement, endElement, bidi) {\n if (isNullOrUndefined(startElement)) {\n return undefined;\n }\n var elements = [];\n // while (bidi && startElement && startElement !== endElement && startElement.nextElement && !startElement.isRightToLeft) {\n // startElement = startElement.nextElement;\n // }\n // while (bidi && endElement && startElement !== endElement && endElement.previousElement && !endElement.isRightToLeft) {\n // endElement = endElement.previousElement;\n // }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n if (inlineElement === endElement) {\n elements.push(inlineElement);\n elementIndex = -1;\n break;\n }\n else {\n elements.push(inlineElement);\n }\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements.length === 0 ? undefined : elements;\n };\n // Gets the current line elements in inline reverse order from the end element.\n /**\n * @private\n */\n Selection.prototype.getElementsBackward = function (lineWidget, startElement, endElement, bidi) {\n var elements = [];\n while (bidi && startElement && startElement.previousElement && (!startElement.isRightToLeft\n || startElement instanceof TextElementBox && this.documentHelper.textHelper.isRTLText(startElement.text))) {\n startElement = startElement.previousElement;\n }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i > -1 && i < lineWidget.children.length; bidi ? i++ : i--) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n elements.push(inlineElement);\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements;\n };\n /**\n * Navigate to previous comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousComment = function () {\n this.commentNavigateInternal(false);\n };\n /**\n * Navigate to next comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextComment = function () {\n this.commentNavigateInternal(true);\n };\n Selection.prototype.commentNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedComment) {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedComment = this.documentHelper.comments[0];\n }\n if (this.documentHelper.currentSelectedComment) {\n var comments = this.documentHelper.comments;\n var comment = this.documentHelper.currentSelectedComment;\n var index = comments.indexOf(comment);\n if (next) {\n comment = (index === (comments.length - 1)) ? comments[0] : comments[index + 1];\n }\n else {\n comment = index === 0 ? comments[comments.length - 1] : comments[index - 1];\n }\n this.documentHelper.currentSelectedComment = comment;\n this.selectComment(comment);\n }\n };\n /**\n * Navigate to previous revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousRevision = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * Navigate to next revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextRevision = function () {\n this.revisionNavigateInternal(true);\n };\n /**\n * Method to navigate revisions\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.revisionNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedRevisionInternal) {\n if (this.documentHelper.owner.revisions.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedRevision = this.documentHelper.owner.revisions.get(0);\n }\n if (this.documentHelper.currentSelectedRevision) {\n var revisions = this.documentHelper.owner.revisions.changes;\n var revision = this.documentHelper.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.documentHelper.currentSelectedRevision = revision;\n this.selectRevision(revision);\n }\n this.owner.trackChangesPane.currentSelectedRevision = this.documentHelper.currentSelectedRevision;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectComment = function (comment) {\n if (!isNullOrUndefined(comment)) {\n var startPosition = this.getElementPosition(comment.commentStart, true).startPosition;\n var endPosition = this.getElementPosition(comment.commentEnd, false).startPosition;\n this.selectPosition(startPosition, endPosition);\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.selectComment(comment);\n }\n }\n };\n /**\n * @private\n * @param revision\n * @returns {void}\n */\n Selection.prototype.selectRevision = function (revision) {\n if (!isNullOrUndefined(revision) && revision.range.length > 0) {\n var firstElement = revision.range[0];\n var lastElement = revision.range[revision.range.length - 1];\n if (firstElement instanceof WRowFormat) {\n var rowWidget = firstElement.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n var lastCell = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n else if (firstElement && lastElement) {\n var startPosition = new TextPosition(this.owner);\n var offset = 0;\n if (firstElement instanceof WCharacterFormat) {\n var currentPara = firstElement.ownerBase;\n offset = currentPara.getLength();\n startPosition.setPositionParagraph(currentPara.lastChild, offset);\n }\n else {\n offset = firstElement.line.getOffset(firstElement, 0);\n startPosition.setPositionForLineWidget(firstElement.line, offset);\n }\n var endPosition = new TextPosition(this.owner);\n if (lastElement instanceof WCharacterFormat) {\n var currentPara = lastElement.ownerBase;\n if (currentPara.isEndsWithPageBreak) {\n this.owner.trackChangesPane.isTrackingPageBreak = true;\n endPosition.setPositionParagraph(currentPara.nextRenderedWidget.childWidgets[0], 0);\n }\n else {\n offset = currentPara.getLength();\n endPosition.setPositionParagraph(currentPara.lastChild, offset + 1);\n }\n }\n else {\n offset = lastElement.line.getOffset(lastElement, 0) + lastElement.length;\n if (this.isTOC()) {\n offset += 1;\n }\n endPosition.setPositionForLineWidget(lastElement.line, offset);\n }\n var curentPosition = startPosition.clone();\n if (!startPosition.isExistBefore(endPosition)) {\n startPosition = endPosition;\n endPosition = curentPosition;\n }\n this.selectPosition(startPosition, endPosition);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.selectTableRevision = function (revision) {\n if (!isNullOrUndefined(revision) && revision[0].range.length > 0) {\n var firstElementTable = revision[0].range[0];\n var lastElementTable = revision[revision.length - 1].range[0];\n if (firstElementTable instanceof WRowFormat) {\n var firstRowWidget = firstElementTable.ownerBase;\n var firstCell = firstRowWidget.childWidgets[0];\n var secondRowWidget = lastElementTable.ownerBase;\n var lastCell = secondRowWidget.childWidgets[secondRowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.updateEditRangeCollection = function () {\n if (this.editRangeCollection.length > 0) {\n this.editRangeCollection = [];\n }\n var editRangeStart;\n var everyOneArea;\n if (!this.documentHelper.isDocumentProtected) {\n for (var i = 0; i < this.documentHelper.editRanges.length; i++) {\n var user = this.documentHelper.editRanges.keys[i];\n editRangeStart = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n editRangeStart = this.documentHelper.editRanges.get(this.owner.currentUser);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n if (this.documentHelper.editRanges.containsKey('Everyone')) {\n var user = 'Everyone';\n everyOneArea = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < everyOneArea.length; j++) {\n this.editRangeCollection.push(everyOneArea[j]);\n }\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.onHighlight = function () {\n if (this.isHighlightEditRegion) {\n this.highlightEditRegion();\n }\n else {\n this.unHighlightEditRegion();\n }\n this.viewer.renderVisiblePages();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegion = function () {\n this.updateEditRangeCollection();\n if (this.owner.enableLockAndEdit) {\n this.viewer.updateScrollBars();\n return;\n }\n if (!this.isHighlightEditRegion) {\n this.unHighlightEditRegion();\n return;\n }\n this.isHightlightEditRegionInternal = true;\n if (isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters = new Dictionary();\n }\n this.editRegionHighlighters.clear();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n this.highlightEditRegionInternal(this.editRangeCollection[j]);\n }\n this.isHightlightEditRegionInternal = false;\n this.viewer.updateScrollBars();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightFormFields = function () {\n if (isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters = new Dictionary();\n }\n this.formFieldHighlighters.clear();\n var formFields = this.documentHelper.formFields;\n if (!isNullOrUndefined(formFields) && formFields.length > 0) {\n for (var i = 0; i < formFields.length; i++) {\n var formField = formFields[i];\n if (HelperMethods.isLinkedFieldCharacter(formField)) {\n var offset = formField.line.getOffset(formField, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(formField.line, offset);\n var endElement = formField.fieldEnd;\n offset = endElement.line.getOffset(endElement, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n this.isHighlightFormFields = true;\n this.highlight(startPosition.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n this.isHighlightFormFields = false;\n this.viewer.updateScrollBars();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.unHighlightEditRegion = function () {\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.clear();\n this.editRegionHighlighters = undefined;\n }\n this.isHightlightEditRegionInternal = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegionInternal = function (editRangeStart) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n // if (editRangeStart.user === this.owner.currentUser && editRangeStart.group === '') {\n this.isCurrentUser = true;\n // }\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n this.isCurrentUser = false;\n };\n /**\n * Shows all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.showAllEditingRegion = function () {\n if (this.editRangeCollection.length === 0) {\n this.updateEditRangeCollection();\n }\n this.documentHelper.clearSelectionHighlight();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n var editRangeStart = this.editRangeCollection[j];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n }\n };\n Selection.prototype.highlightEditRegions = function (editRangeStart, startPosition, endPosition) {\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable) || editRangeStart.columnFirst === -1) {\n this.highlight(editRangeStart.line.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n var row = editRangeStart.line.paragraph.associatedCell.ownerRow;\n var cell = row.childWidgets[editRangeStart.columnFirst];\n if (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n if (cell.childWidgets[i] instanceof ParagraphWidget) {\n this.highlight(cell.childWidgets[i], startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n }\n }\n };\n /**\n * Navigate to next editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.navigateToNextEditingRegion = function () {\n var editRange = this.getEditRangeStartElement();\n if (!isNullOrUndefined(editRange)) {\n //Sort based on position\n for (var i = this.editRangeCollection.length - 1; i >= 0; i--) {\n for (var j = 1; j <= i; j++) {\n var nextPosition = this.getPosition(this.editRangeCollection[j - 1]).startPosition;\n var firstPosition = this.getPosition(this.editRangeCollection[j]).startPosition;\n if (nextPosition.isExistAfter(firstPosition)) {\n var temp = this.editRangeCollection[j - 1];\n this.editRangeCollection[j - 1] = this.editRangeCollection[j];\n this.editRangeCollection[j] = temp;\n }\n }\n }\n var index = this.editRangeCollection.indexOf(editRange);\n var editRangeStart = index < this.editRangeCollection.length - 1 ?\n this.editRangeCollection[index + 1] : this.editRangeCollection[0];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Highlight all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.toggleEditingRegionHighlight = function () {\n this.isHighlightEditRegion = !this.isHighlightEditRegion;\n };\n /**\n * @private\n */\n Selection.prototype.getEditRangeStartElement = function () {\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editStart = this.editRangeCollection[i];\n var position = this.getPosition(editStart);\n var start = position.startPosition;\n var end = position.endPosition;\n if ((this.start.isExistAfter(start) || this.start.isAtSamePosition(start))\n && (this.end.isExistBefore(end) || this.end.isAtSamePosition(end))) {\n return editStart;\n }\n }\n return undefined;\n };\n /**\n * Returns true if selection is inside the edit region\n *\n * @returns {boolean}\n */\n Selection.prototype.isSelectionInEditRegion = function () {\n if (!this.documentHelper.isDocumentProtected) {\n return false;\n }\n return this.checkSelectionIsAtEditRegion();\n };\n Selection.prototype.checkSelectionIsAtEditRegion = function (start, end) {\n if (isNullOrUndefined(start) && isNullOrUndefined(end)) {\n start = this.start;\n end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n }\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editRangeStart = this.editRangeCollection[i];\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable)\n || editRangeStart.columnFirst === -1) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else {\n if (editRangeStart.paragraph.isInsideTable && editRangeStart.editRangeEnd &&\n editRangeStart.editRangeEnd.line.paragraph.isInsideTable) {\n var editRangeRow = editRangeStart.paragraph.associatedCell.ownerRow;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(startCell) && !isNullOrUndefined(endCell)) {\n if (editRangeRow.equals(startCell.ownerRow) && editRangeRow.equals(endCell.ownerRow)\n && startCell.index >= editRangeStart.columnFirst && startCell.index <= editRangeStart.columnLast) {\n if (this.isEmpty && startCell.index === editRangeStart.line.paragraph.associatedCell.index) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else if (!this.isCellSelected(startCell, start, end)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n Selection.prototype.isSelectionInsideEditRange = function (editRangeStart, start, end) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n if ((start.isExistAfter(startPosition) || start.isAtSamePosition(startPosition))\n && (end.isExistBefore(endPosition) || end.isAtSamePosition(endPosition))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getPosition = function (element) {\n var offset = element.line.getOffset(element, 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n var endElement;\n if (element instanceof EditRangeStartElementBox) {\n endElement = element.editRangeEnd;\n }\n else if (element instanceof ContentControl) {\n endElement = element.reference;\n }\n else if (element instanceof BookmarkElementBox) {\n endElement = element.reference;\n }\n else if (element instanceof CommentCharacterElementBox) {\n endElement = element.comment.commentEnd;\n }\n offset = endElement.line.getOffset(endElement, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n return { 'startPosition': startPosition, 'endPosition': endPosition };\n };\n /**\n * @private\n */\n Selection.prototype.checkContentControlLocked = function (checkFormat) {\n this.owner.editorModule.isXmlMapped = false;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n var position = this.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(checkFormat)) {\n var cCStartInsideSelction = ((cCstart.isExistAfter(start) || cCstart.isAtSamePosition(start)) && (cCstart.isExistBefore(end) || cCstart.isAtSamePosition(end)));\n var cCEndInsideSelction = ((cCend.isExistAfter(start) || cCend.isAtSamePosition(start)) && (cCend.isExistBefore(end) || cCend.isAtSamePosition(end)));\n if (cCStartInsideSelction && cCEndInsideSelction) {\n if (contentControlStart.contentControlProperties.lockContentControl) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n return false;\n }\n if ((cCStartInsideSelction) || (cCEndInsideSelction)) {\n if (!(cCstart.isAtSamePosition(start) || cCend.isAtSamePosition(start)) && (contentControlStart.contentControlProperties.lockContentControl || contentControlStart.contentControlProperties.lockContents)) {\n return true;\n }\n }\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n if (contentControlStart.contentControlProperties.xmlMapping\n && contentControlStart.contentControlProperties.xmlMapping.isMapped) {\n this.owner.editorModule.isXmlMapped = true;\n }\n if (contentControlStart.contentControlProperties.lockContents) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n else if (isNullOrUndefined(checkFormat)\n && (contentControlStart.contentControlProperties.type === 'CheckBox'\n || contentControlStart.contentControlProperties.type === 'ComboBox'\n || contentControlStart.contentControlProperties.type === 'DropDownList'\n || contentControlStart.contentControlProperties.type === 'Date')) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementPosition = function (element, isEnd) {\n var offset = element.line.getOffset(element, isEnd ? 0 : 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n return { 'startPosition': startPosition, 'endPosition': undefined };\n };\n //Restrict editing implementation ends\n /**\n * Update ref field.\n * @private\n */\n Selection.prototype.updateRefField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (!isNullOrUndefined(field)) {\n if (!this.isReferenceField(field)) {\n return;\n }\n var fieldCode = this.getFieldCode(field).replace(/\\s+/g, ' ');\n fieldCode = fieldCode.trim();\n if (fieldCode.toLowerCase().indexOf('ref') === 0) {\n var code = fieldCode.split(' ');\n if (code.length > 1) {\n var bookmarkId = code[1];\n if (this.documentHelper.bookmarks.containsKey(bookmarkId)) {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmarkStart = this.documentHelper.bookmarks.get(bookmarkId);\n var bookmarkEnd = bookmarkStart.reference;\n var previousNode = bookmarkStart.previousNode;\n if ((isNullOrUndefined(previousNode) || !(previousNode instanceof FieldElementBox))\n && bookmarkEnd.previousNode instanceof FieldElementBox\n && bookmarkEnd.previousNode.fieldType === 1\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin)\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin.formFieldData)) {\n bookmarkStart = bookmarkEnd.previousNode.fieldBegin.fieldSeparator;\n bookmarkEnd = bookmarkEnd.previousNode.fieldBegin.fieldEnd;\n }\n else if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n bookmarkStart = previousNode.fieldSeparator;\n bookmarkEnd = previousNode.fieldEnd;\n }\n var offset = bookmarkStart.line.getOffset(bookmarkStart, 1);\n start.setPositionParagraph(bookmarkStart.line, offset);\n end.setPositionParagraph(bookmarkEnd.line, bookmarkEnd.line.getOffset(bookmarkEnd, 0));\n var documentContent = this.owner.sfdtExportModule.write(start.currentWidget, start.offset, end.currentWidget, end.offset, false, true);\n var startElement = field.fieldSeparator;\n var endElement = field.fieldEnd;\n start.setPositionParagraph(startElement.line, startElement.line.getOffset(startElement, 1));\n end.setPositionParagraph(endElement.line, endElement.line.getOffset(endElement, 0));\n this.owner.editor.pasteContents(documentContent);\n }\n }\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.footnoteReferenceElement = function (start, end, inline) {\n var container = this.getContainerWidget(start.paragraph);\n var count = 0;\n if (container instanceof FootNoteWidget) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n count = 0;\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets.length; j++) {\n var bodyWidget = page.bodyWidgets[j];\n for (var k = 0; k < bodyWidget.childWidgets.length; k++) {\n var paragraph = bodyWidget.childWidgets[k];\n if (paragraph instanceof TableWidget) {\n for (var tr = 0; tr < paragraph.childWidgets.length; tr++) {\n var tablerow = paragraph.childWidgets[tr];\n for (var tc = 0; tc < tablerow.childWidgets.length; tc++) {\n var tablecell = tablerow.childWidgets[tc];\n for (var para = 0; para < tablecell.childWidgets.length; para++) {\n var paragr = tablecell.childWidgets[para];\n for (var line = 0; line < paragr.childWidgets.length; line++) {\n var lines = paragr.childWidgets[line];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n else {\n for (var l = 0; l < paragraph.childWidgets.length; l++) {\n var lines = paragraph.childWidgets[l];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n return Selection;\n}());\nexport { Selection };\n","/* eslint-disable */\nimport { TextSearchResults } from '../index';\nimport { beforeXmlHttpRequestSend } from './../../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextElementBox, ErrorTextElementBox, TableCellWidget, FieldElementBox } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The spell checker module\n */\nvar SpellChecker = /** @class */ (function () {\n function SpellChecker(documentHelper) {\n this.langIDInternal = 0;\n /**\n * Specifies whether spell check has to be performed or not.\n */\n this.enableSpellCheckInternal = true;\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.uniqueSpelledWords = {};\n this.spellSuggestionInternal = true;\n /**\n * @private\n */\n this.uniqueKey = '';\n this.removeUnderlineInternal = false;\n /**\n * @default 1000\n */\n this.uniqueWordsCountInternal = 15000;\n this.performOptimizedCheck = false;\n this.documentHelper = documentHelper;\n this.errorWordCollection = new Dictionary();\n this.uniqueWordsCollection = new Dictionary();\n this.errorSuggestions = new Dictionary();\n this.ignoreAllItems = [];\n this.uniqueSpelledWords = {};\n this.textSearchResults = new TextSearchResults(this.documentHelper.owner);\n this.uniqueKey = this.documentHelper.owner.element.id + '_' + this.createGuid();\n }\n /**\n * Gets module name.\n */\n SpellChecker.prototype.getModuleName = function () {\n return 'SpellChecker';\n };\n Object.defineProperty(SpellChecker.prototype, \"enableOptimizedSpellCheck\", {\n /**\n * Gets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n * @returns {boolean} Returns enableOptimizedSpellCheck\n */\n get: function () {\n return this.performOptimizedCheck;\n },\n /**\n * Sets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n */\n set: function (value) {\n this.performOptimizedCheck = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"uniqueWordsCount\", {\n /**\n * Gets the spell checked Unique words.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.uniqueWordsCountInternal) ? 0 : this.uniqueWordsCountInternal;\n },\n /**\n * Sets the spell checked Unique words.\n *\n * @aspType int\n */\n set: function (value) {\n this.uniqueWordsCountInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"languageID\", {\n /**\n * Gets the languageID.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.langIDInternal) ? 0 : this.langIDInternal;\n },\n /**\n * Sets the languageID.\n *\n * @aspType int\n */\n set: function (value) {\n this.langIDInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"allowSpellCheckAndSuggestion\", {\n /**\n * Getter indicates whether suggestion enabled.\n *\n * @aspType bool\n */\n get: function () {\n return this.spellSuggestionInternal;\n },\n /**\n * Setter to enable or disable suggestion\n *\n * @aspType bool\n */\n set: function (value) {\n this.spellSuggestionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"removeUnderline\", {\n /**\n * Getter indicates whether underline removed for mis-spelled word.\n *\n * @aspType bool\n */\n get: function () {\n return this.removeUnderlineInternal;\n },\n /**\n * Setter to enable or disable underline for mis-spelled word\n *\n * @aspType bool\n */\n set: function (value) {\n this.removeUnderlineInternal = value;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"enableSpellCheck\", {\n /**\n * Getter indicates whether spell check has to be performed or not.\n *\n * @aspType bool\n */\n get: function () {\n return this.enableSpellCheckInternal;\n },\n /**\n * Setter to enable or disable spell check has to be performed or not\n *\n * @aspType bool\n */\n set: function (value) {\n this.enableSpellCheckInternal = value;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to manage replace logic\n *\n * @private\n */\n SpellChecker.prototype.manageReplace = function (content, dialogElement) {\n this.documentHelper.triggerSpellCheck = true;\n var exactText = '';\n var elementInfo;\n if (!isNullOrUndefined(dialogElement) && dialogElement instanceof ErrorTextElementBox) {\n var exactText_1 = dialogElement.text;\n this.documentHelper.selection.start = dialogElement.start;\n this.documentHelper.selection.end = dialogElement.end;\n if (content !== 'Ignore Once') {\n content = this.manageSpecialCharacters(exactText_1, content);\n this.documentHelper.owner.editor.insertTextInternal(content, true);\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n return;\n }\n else {\n this.currentContextInfo = { 'text': exactText_1, 'element': dialogElement };\n }\n }\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element && content !== 'Ignore Once') {\n var elementBox = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = elementBox.start;\n this.documentHelper.selection.end = elementBox.end;\n }\n else {\n this.handleReplace(content);\n }\n if (content !== 'Ignore Once') {\n this.documentHelper.owner.editor.insertTextInternal(content, true);\n if (!isNullOrUndefined(this.currentContextInfo)) {\n this.removeErrorsFromCollection(this.currentContextInfo);\n }\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n }\n //this.documentHelper.owner.errorWordCollection.remove(content);\n this.documentHelper.triggerSpellCheck = false;\n };\n /**\n * Method to handle replace logic\n *\n * @private\n */\n SpellChecker.prototype.handleReplace = function (content) {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex, false, true);\n var startOffset = startInlineObj.element.line.getOffset(startInlineObj.element, 0) + startInlineObj.element.length;\n if (startOffset === offset) {\n this.retrieveExactElementInfo(startInlineObj);\n }\n var exactText = startInlineObj.element.text;\n var startPattern = new RegExp('^[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s]+', 'g');\n var matches = [];\n var matchInfo;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = startPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (content === 'Ignore Once') {\n this.handleIgnoreOnce(startInlineObj);\n return;\n }\n startPosition.offset = offset - startInlineObj.index;\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n startPosition.offset += matches[0].toString().length;\n }\n startPosition.location = this.documentHelper.owner.selection.getPhysicalPositionInternal(startPosition.currentWidget, startPosition.offset, true);\n startPosition = this.documentHelper.owner.searchModule.textSearch.getTextPosition(startPosition.currentWidget, startPosition.offset.toString());\n //startPosition.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n startPosition.setPositionParagraph(startPosition.currentWidget, startPosition.offset);\n var index = (startPosition.offset + startInlineObj.element.length) - startPosition.offset;\n var endOffset = startPosition.currentWidget.getOffset(startInlineObj.element, index);\n var lineWidget = startPosition.currentWidget;\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`]+$', 'g');\n matches = [];\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n endOffset -= matches[0].toString().length;\n }\n this.documentHelper.selection.end = this.documentHelper.owner.searchModule.textSearch.getTextPosition(lineWidget, endOffset.toString());\n this.documentHelper.selection.end.location = this.documentHelper.owner.selection.getPhysicalPositionInternal(startPosition.currentWidget, endOffset, true);\n this.documentHelper.selection.end.setPositionParagraph(lineWidget, endOffset);\n this.currentContextInfo = { 'element': startInlineObj.element, 'text': startInlineObj.element.text };\n };\n /**\n * Method to retrieve exact element info\n *\n * @private\n */\n SpellChecker.prototype.retrieveExactElementInfo = function (startInlineObj) {\n var nextElement = startInlineObj.element.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement instanceof TextElementBox) {\n var nextTextElBox = nextElement;\n if (nextTextElBox.text.trim() != \"\") {\n startInlineObj.element = nextElement;\n }\n }\n };\n /**\n * Method to handle to ignore error Once\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreOnce = function (startInlineObj) {\n var textElement = startInlineObj.element;\n var exactText = '';\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n exactText = this.currentContextInfo.element.text;\n }\n else {\n exactText = textElement.text;\n }\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n if (textElement.ignoreOnceItems.indexOf(exactText) === -1) {\n textElement.ignoreOnceItems.push(exactText);\n }\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n };\n /**\n * Method to handle ignore all items\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreAllItems = function (contextElement) {\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n if (this.ignoreAllItems.indexOf(retrievedText) === -1) {\n this.ignoreAllItems.push(retrievedText);\n this.removeErrorsFromCollection(contextItem);\n this.documentHelper.triggerSpellCheck = true;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n this.documentHelper.triggerSpellCheck = false;\n this.documentHelper.clearSelectionHighlight();\n }\n };\n /**\n * Method to handle dictionary\n *\n * @private\n */\n SpellChecker.prototype.handleAddToDictionary = function (contextElement) {\n var _this = this;\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.callSpellChecker(this.languageID, retrievedText, false, false, true).then(function (data) {\n _this.documentHelper.triggerSpellCheck = true;\n _this.removeErrorsFromCollection(contextItem);\n _this.ignoreAllItems.push(retrievedText);\n _this.documentHelper.owner.editor.reLayout(_this.documentHelper.selection, true);\n _this.documentHelper.triggerSpellCheck = false;\n });\n };\n /**\n * Method to append/remove special characters\n *\n * @private\n */\n SpellChecker.prototype.manageSpecialCharacters = function (exactText, replaceText, isRemove) {\n if (!isNullOrUndefined(exactText)) {\n if (isNullOrUndefined(replaceText)) {\n replaceText = exactText;\n }\n var pattern = new RegExp('^[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s]+', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? match[0] + replaceText : replaceText.replace(match[0], '');\n }\n }\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`]+$', 'g');\n matches = [];\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(replaceText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? replaceText + match[0] : replaceText.slice(0, match.index);\n }\n }\n }\n return replaceText;\n };\n /**\n * Method to remove errors\n *\n * @private\n */\n SpellChecker.prototype.removeErrorsFromCollection = function (contextItem) {\n if (!isNullOrUndefined(contextItem.text) && this.errorWordCollection.containsKey(contextItem.text)) {\n var textElement = this.errorWordCollection.get(contextItem.text);\n if (textElement.indexOf(contextItem.element) >= 0) {\n textElement.splice(0, 1);\n }\n if (textElement.length === 0) {\n this.errorWordCollection.remove(contextItem.text);\n }\n }\n };\n /**\n * Method to retrieve exact text\n *\n * @private\n */\n SpellChecker.prototype.retriveText = function () {\n var exactText;\n var currentElement;\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n currentElement = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = currentElement.start;\n this.documentHelper.selection.end = currentElement.end;\n }\n else {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex);\n currentElement = startInlineObj.element;\n exactText = startInlineObj.element.text;\n }\n return { 'text': exactText, 'element': currentElement };\n };\n /**\n * Method to handle suggestions\n *\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.handleSuggestions = function (allsuggestions) {\n this.spellCheckSuggestion = [];\n if (allsuggestions.length === 0) {\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary'));\n }\n else {\n allsuggestions = (allsuggestions.length > 3) ? this.constructInlineMenu(allsuggestions) : allsuggestions;\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary'));\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellSuggestion = [];\n if (this.spellCheckSuggestion.length > 0) {\n for (var _i = 0, _a = this.spellCheckSuggestion; _i < _a.length; _i++) {\n var str = _a[_i];\n spellSuggestion.push({\n text: str,\n id: this.documentHelper.owner.element.id + '_contextmenu_otherSuggestions_spellcheck_' + (str === this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary') ? 'Add to Dictionary' : str),\n iconCss: ''\n });\n }\n }\n return spellSuggestion;\n };\n /**\n * Method to check whether text element has errors\n *\n * @private\n */\n SpellChecker.prototype.checktextElementHasErrors = function (text, element, left) {\n var hasError = false;\n var erroElements = [];\n text = text.replace(/[\\s]+/g, '');\n if (!isNullOrUndefined(element.errorCollection) && element.errorCollection.length > 0) {\n if (!this.documentHelper.isScrollHandler && (element.ischangeDetected || element.paragraph.isChangeDetected)) {\n this.updateStatusForGlobalErrors(element.errorCollection, element);\n element.errorCollection = [];\n element.ischangeDetected = true;\n return { 'errorFound': hasError, 'elements': erroElements };\n }\n for (var i = 0; i < element.errorCollection.length; i++) {\n if (this.handleErrorCollection(element.errorCollection[i])) {\n hasError = true;\n erroElements.push(element.errorCollection[i]);\n }\n }\n }\n else if (!this.documentHelper.isScrollHandler && element.paragraph.isChangeDetected) {\n element.ischangeDetected = true;\n }\n else if (!element.ischangeDetected && this.handleErrorCollection(element)) {\n hasError = true;\n erroElements.push(element);\n }\n return { 'errorFound': hasError, 'elements': erroElements };\n };\n SpellChecker.prototype.updateStatusForGlobalErrors = function (erroElements, parentElement) {\n if (erroElements.length > 0) {\n for (var i = 0; i < erroElements.length; i++) {\n var exactText = this.manageSpecialCharacters(erroElements[i].text, undefined, true);\n if (this.errorWordCollection.containsKey(exactText)) {\n var elements = this.errorWordCollection.get(exactText);\n for (var j = 0; j < elements.length; j++) {\n if (elements[j] instanceof ErrorTextElementBox && elements[j] === erroElements[i]) {\n elements[j].ischangeDetected = true;\n elements[j].start.offset = parentElement.line.getOffset(parentElement.istextCombined ? this.getCombinedElement(parentElement) : parentElement, 0);\n elements[j].line = parentElement.line;\n break;\n }\n }\n }\n }\n }\n };\n /**\n * Method to handle document error collection.\n *\n * @param {string} errorInElement\n * @private\n */\n SpellChecker.prototype.handleErrorCollection = function (errorInElement) {\n var errors = this.errorWordCollection;\n var exactText = this.manageSpecialCharacters(errorInElement.text, undefined, true);\n if (errors.containsKey(exactText) && errorInElement.length > 1) {\n var ignoreAllIndex = this.ignoreAllItems.indexOf(exactText);\n if (ignoreAllIndex > -1) {\n if (errors.containsKey(exactText)) {\n errors.remove(exactText);\n }\n return false;\n }\n return true;\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.constructInlineMenu = function (inlineSuggestion) {\n for (var i = inlineSuggestion.length - 1; i > 0; i--) {\n if (inlineSuggestion.length > 3) {\n this.spellCheckSuggestion.push(inlineSuggestion[i]);\n inlineSuggestion.pop();\n }\n }\n return inlineSuggestion;\n };\n /**\n * Method to retrieve error element text\n *\n * @private\n */\n SpellChecker.prototype.findCurretText = function () {\n var insertPosition = this.documentHelper.selection.start;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var element;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var text;\n if (!isNullOrUndefined(inlineObj.element)) {\n if (!isNullOrUndefined(inlineObj.element.errorCollection) && inlineObj.element.errorCollection.length > 0) {\n for (var i = 0; i < inlineObj.element.errorCollection.length; i++) {\n var errorElement = inlineObj.element.errorCollection[i];\n if (errorElement.start.location.x <= insertPosition.location.x && errorElement.end.location.x >= insertPosition.location.x) {\n text = errorElement.text;\n element = errorElement;\n break;\n }\n }\n }\n else {\n text = inlineObj.element.text;\n }\n if (text === ' ') {\n inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset + 1, 0);\n text = inlineObj.element.text;\n }\n }\n return { 'text': text, 'element': element };\n };\n SpellChecker.prototype.addErrorCollection = function (text, elementToCompare, suggestions) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (this.errorWordCollection.containsKey(text)) {\n var errorElements = this.errorWordCollection.get(text);\n if (elementToCompare instanceof ErrorTextElementBox) {\n if (!this.compareErrorTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n else if (elementToCompare instanceof TextElementBox) {\n if (!this.compareTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n }\n else {\n if (!isNullOrUndefined(suggestions) && suggestions.length > 0) {\n this.errorSuggestions.add(text, suggestions);\n }\n this.errorWordCollection.add(text, [elementToCompare]);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, true);\n }\n }\n };\n SpellChecker.prototype.addCorrectWordCollection = function (text) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, false);\n }\n };\n /**\n * @private\n */\n SpellChecker.prototype.isInUniqueWords = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.containsKey(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isErrorWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.get(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isCorrectWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return !this.uniqueWordsCollection.get(text);\n };\n SpellChecker.prototype.compareErrorTextElement = function (errorElement, errorCollection) {\n var copyElement = [];\n var isChanged = false;\n for (var i = 0; i < errorCollection.length; i++) {\n copyElement.push(errorCollection[i]);\n }\n var length = errorCollection.length;\n for (var i = 0; i < length; i++) {\n if (copyElement[i] instanceof ErrorTextElementBox) {\n if (copyElement[i].ischangeDetected) {\n var exactText = this.manageSpecialCharacters(copyElement[i].text, undefined, true);\n isChanged = true;\n this.removeErrorsFromCollection({ 'element': copyElement[i], 'text': exactText });\n }\n else {\n var currentElement = copyElement[i];\n if (errorElement.start.offset === currentElement.start.offset && errorElement.end.offset === currentElement.end.offset) {\n return true;\n }\n }\n }\n }\n if (isChanged) {\n this.errorWordCollection.add(this.manageSpecialCharacters(errorElement.text, undefined, true), [errorElement]);\n }\n return false;\n };\n /**\n * Method to compare text elements\n *\n * @private\n */\n SpellChecker.prototype.compareTextElement = function (errorElement, errorCollection) {\n for (var i = 0; i < errorCollection.length; i++) {\n if (errorCollection[i] instanceof TextElementBox) {\n var currentElement = errorCollection[i];\n if (currentElement === errorElement) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle Word by word spell check\n *\n * @private\n */\n SpellChecker.prototype.handleWordByWordSpellCheck = function (jsonObject, elementBox, left, top, underlineY, baselineAlignment, isSamePage) {\n if (jsonObject.HasSpellingError && isSamePage) {\n this.addErrorCollection(elementBox.text, elementBox, jsonObject.Suggestions);\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.line.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n this.documentHelper.render.renderWavyLine(elementBox, left, top, underlineY, '#FF0000', 'Single', baselineAlignment, backgroundColor);\n elementBox.isSpellChecked = true;\n }\n else {\n this.addCorrectWordCollection(elementBox.text);\n elementBox.isSpellChecked = true;\n }\n };\n /**\n * Method to check errors for combined elements\n *\n * @private\n */\n SpellChecker.prototype.checkElementCanBeCombined = function (elementBox, underlineY, beforeIndex, callSpellChecker, textToCombine, isNext, isPrevious, canCombine) {\n var currentText = isNullOrUndefined(textToCombine) ? '' : textToCombine;\n var isCombined = isNullOrUndefined(canCombine) ? false : canCombine;\n var checkPrevious = !isNullOrUndefined(isPrevious) ? isPrevious : true;\n var checkNext = !isNullOrUndefined(isNext) ? isNext : true;\n var combinedElements = [];\n var line = this.documentHelper.selection.getLineWidget(elementBox, 0);\n var index = line.children.indexOf(elementBox);\n var prevText = elementBox.text;\n combinedElements.push(elementBox);\n var difference = (isPrevious) ? 0 : 1;\n var prevCombined = false;\n var isPrevField = false;\n if (elementBox.text !== '\\v') {\n if (checkPrevious) {\n var textElement = undefined;\n for (var i = index - difference; i >= 0; i--) {\n textElement = line.children[i];\n if (textElement instanceof TextElementBox && !isPrevField) {\n if (prevText.indexOf(' ') !== 0 && textElement.text.lastIndexOf(' ') !== textElement.text.length - 1) {\n prevCombined = !isNullOrUndefined(textToCombine) ? true : false;\n currentText = textElement.text + currentText;\n prevText = textElement.text;\n isPrevField = false;\n combinedElements.push(textElement);\n isCombined = true;\n }\n else if (!isNullOrUndefined(textElement)) {\n textElement = textElement.nextElement;\n break;\n }\n }\n else if (textElement instanceof FieldElementBox && textElement.fieldType !== 1) {\n isPrevField = true;\n }\n }\n var currentElement = (isCombined) ? textElement : elementBox;\n if (this.lookThroughPreviousLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n if (isPrevious) {\n currentText = (prevCombined) ? currentText : elementBox.text + currentText;\n }\n else {\n currentText += elementBox.text;\n }\n isPrevField = false;\n var nextText = elementBox.text;\n if (checkNext) {\n var canCombine_1 = false;\n var element = undefined;\n for (var i = index + 1; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof TextElementBox && !isPrevField) {\n if (nextText.lastIndexOf(' ') !== nextText.length - 1 && element.text.indexOf(' ') !== 0) {\n currentText += element.text;\n nextText = element.text;\n isPrevField = false;\n combinedElements.push(element);\n canCombine_1 = true;\n isCombined = true;\n }\n else if (!isNullOrUndefined(element)) {\n element = element.previousElement;\n break;\n }\n }\n else if (element instanceof FieldElementBox && element.fieldType !== 2) {\n isPrevField = true;\n }\n }\n var currentElement = (canCombine_1) ? element : elementBox;\n if (currentElement.text !== '\\f' && this.lookThroughNextLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n }\n if (isCombined && callSpellChecker && !this.checkCombinedElementsBeIgnored(combinedElements, currentText)) {\n this.handleCombinedElements(elementBox, currentText, underlineY, beforeIndex);\n }\n return isCombined;\n };\n SpellChecker.prototype.lookThroughPreviousLine = function (currentText, prevText, currentElement, underlineY, beforeIndex) {\n if (!isNullOrUndefined(currentElement) && currentElement.indexInOwner === 0 && !isNullOrUndefined(currentElement.line.previousLine)) {\n var previousLine = currentElement.line.previousLine;\n var index = previousLine.children.length - 1;\n if (!isNullOrUndefined(previousLine.children[index]) && previousLine.children[index] instanceof TextElementBox) {\n var firstElement = previousLine.children[index];\n if (!isNullOrUndefined(currentElement.text)) {\n if (currentElement.text.indexOf(' ') !== 0 && firstElement.text.lastIndexOf(' ') !== firstElement.text.length - 1) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, false, true, true);\n return true;\n }\n }\n }\n }\n return false;\n };\n SpellChecker.prototype.lookThroughNextLine = function (currentText, prevText, elementBox, underlineY, beforeIndex) {\n if (!isNullOrUndefined(elementBox) && elementBox.indexInOwner === elementBox.line.children.length - 1 && !isNullOrUndefined(elementBox.line.nextLine)) {\n var nextLine = elementBox.line.nextLine;\n if (!isNullOrUndefined(nextLine.children[0]) && nextLine.children[0] instanceof TextElementBox) {\n var firstElement = nextLine.children[0];\n if (elementBox.text.lastIndexOf(' ') !== elementBox.text.length - 1 && firstElement.text.indexOf(' ') !== 0) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, true, false, true);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle combined elements\n *\n * @param {TextElementBox} elementBox\n * @param {string} currentText\n * @param {number} underlineY\n * @param {number} beforeIndex\n * @private\n */\n SpellChecker.prototype.handleCombinedElements = function (elementBox, currentText, underlineY, beforeIndex) {\n elementBox.istextCombined = true;\n var splittedText = currentText.split(/[\\s]+/);\n if (this.ignoreAllItems.indexOf(currentText) === -1 && elementBox instanceof TextElementBox && elementBox.ignoreOnceItems.indexOf(currentText) === -1) {\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText_1 = splittedText[i];\n currentText_1 = this.manageSpecialCharacters(currentText_1, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText_1, elementBox, underlineY, i, 0, i === splittedText.length - 1, beforeIndex);\n }\n }\n else {\n currentText = this.manageSpecialCharacters(currentText, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText, elementBox, underlineY, 0, 0, true, beforeIndex);\n }\n }\n };\n /**\n * Method to check error element collection has unique element\n *\n * @param {ErrorTextElementBox[]} errorCollection\n * @param {ErrorTextElementBox} elementToCheck\n * @private\n */\n SpellChecker.prototype.checkArrayHasSameElement = function (errorCollection, elementToCheck) {\n for (var i = 0; i < errorCollection.length; i++) {\n var errorText = errorCollection[i];\n if ((errorText.start.location.x === elementToCheck.start.location.x) && (errorText.start.location.y === elementToCheck.start.location.y)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n SpellChecker.prototype.handleSplitWordSpellCheck = function (jsonObject, currentText, elementBox, isSamePage, underlineY, iteration, markIndex, isLastItem) {\n if (jsonObject.HasSpellingError && elementBox.text !== ' ' && isSamePage) {\n var matchResults = this.getMatchedResultsFromElement(elementBox, currentText);\n markIndex = (elementBox.istextCombined) ? elementBox.line.getOffset(this.getCombinedElement(elementBox), 0) : markIndex;\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, matchResults.textResults, matchResults.elementInfo, 0, elementBox, false, null, markIndex);\n this.handleMatchedResults(matchResults.textResults, elementBox, underlineY, iteration, jsonObject.Suggestions, isLastItem);\n }\n else {\n this.addCorrectWordCollection(currentText);\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n this.updateUniqueWords([{ Text: currentText, HasSpellError: jsonObject.HasSpellingError }]);\n };\n SpellChecker.prototype.handleMatchedResults = function (results, elementBox, wavyLineY, index, suggestions, isLastItem) {\n if (results.length === 0 && isLastItem) {\n elementBox.isSpellChecked = true;\n return;\n }\n for (var i = 0; i < results.length; i++) {\n var span = this.createErrorElementWithInfo(results.innerList[i], elementBox);\n var color = '#FF0000';\n if (!isNullOrUndefined(elementBox.errorCollection) && !this.checkArrayHasSameElement(elementBox.errorCollection, span)) {\n elementBox.errorCollection.splice(index, 0, span);\n }\n this.addErrorCollection(span.text, span, suggestions);\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n this.documentHelper.render.renderWavyLine(span, span.start.location.x, span.start.location.y - elementBox.margin.top, wavyLineY, color, 'Single', elementBox.characterFormat.baselineAlignment, backgroundColor);\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n };\n /**\n * Calls the spell checker service\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.callSpellChecker = function (languageID, word, checkSpelling, checkSuggestion, addWord, isByPage) {\n var _this = this;\n var spellchecker = this;\n return new Promise(function (resolve, reject) {\n if (!isNullOrUndefined(_this)) {\n var httpRequest_1 = new XMLHttpRequest();\n var service_1 = _this.documentHelper.owner.serviceUrl + _this.documentHelper.owner.serverActionSettings.spellCheck;\n service_1 = (isByPage) ? service_1 + 'ByPage' : service_1;\n httpRequest_1.open('POST', service_1, true);\n httpRequest_1.setRequestHeader('Content-Type', 'application/json');\n _this.setCustomHeaders(httpRequest_1);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellCheckData = { LanguageID: languageID, TexttoCheck: word, CheckSpelling: checkSpelling, CheckSuggestion: checkSuggestion, AddWord: addWord };\n var httprequestEventArgs = { serverActionType: 'SpellCheck', headers: _this.documentHelper.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.documentHelper.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (!httprequestEventArgs.cancel) {\n httpRequest_1.send(JSON.stringify(spellCheckData));\n }\n httpRequest_1.onreadystatechange = function () {\n if (httpRequest_1.readyState === 4) {\n if (httpRequest_1.status === 200 || httpRequest_1.status === 304) {\n resolve(httpRequest_1.response);\n }\n else {\n var result = {\n name: 'onFailure',\n status: httpRequest_1.status,\n statusText: httpRequest_1.responseText,\n url: service_1\n };\n spellchecker.documentHelper.owner.fireServiceFailure(result);\n reject(httpRequest_1.response);\n }\n }\n };\n }\n });\n };\n SpellChecker.prototype.setCustomHeaders = function (httpRequest) {\n for (var i = 0; i < this.documentHelper.owner.headers.length; i++) {\n var header = this.documentHelper.owner.headers[i];\n for (var _i = 0, _a = Object.keys(header); _i < _a.length; _i++) {\n var key = _a[_i];\n httpRequest.setRequestHeader(key, header[key]);\n }\n }\n };\n /**\n * Method to check for next error\n *\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.checkForNextError = function () {\n if (!isNullOrUndefined(this.viewer)) {\n var errorWords = this.errorWordCollection;\n if (errorWords.length > 0) {\n for (var i = 0; i < errorWords.length; i++) {\n var errorElements = errorWords.get(errorWords.keys[i]);\n for (var j = 0; j < errorElements.length; j++) {\n if (errorElements[j] instanceof ErrorTextElementBox && !errorElements[j].ischangeDetected) {\n this.updateErrorElementTextBox(errorWords.keys[i], errorElements[j]);\n }\n else if (errorElements[j] instanceof TextElementBox) {\n var matchResults = this.getMatchedResultsFromElement(errorElements[j]);\n var results = matchResults.textResults;\n var markIndex = (errorElements[j].ischangeDetected) ? errorElements[j].start.offset : errorElements[j].line.getOffset(errorElements[j], 0);\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, errorElements[j], false, null, markIndex);\n for (var i_1 = 0; i_1 < results.length; i_1++) {\n var element = this.createErrorElementWithInfo(results.innerList[i_1], errorElements[j]);\n this.updateErrorElementTextBox(element.text, element);\n break;\n }\n }\n break;\n }\n break;\n }\n }\n else {\n this.documentHelper.clearSelectionHighlight();\n }\n }\n };\n /**\n * Method to create error element with matched results\n *\n * @param {TextSearchResult} result\n * @param {ElementBox} errorElement\n * @private\n */\n SpellChecker.prototype.createErrorElementWithInfo = function (result, errorElement) {\n var element = new ErrorTextElementBox();\n element.text = result.text;\n element.start = result.start;\n element.end = result.end;\n element.height = errorElement.height;\n element.canTrigger = errorElement.canTrigger;\n element.characterFormat.copyFormat(errorElement.characterFormat);\n element.width = this.documentHelper.textHelper.getWidth(element.text, errorElement.characterFormat);\n return element;\n };\n /**\n * Method to get matched results from element box\n *\n * @private\n * @param {ElementBox} errorElement - Specifies the error element box.\n * @param {string} currentText - Specifies the current text\n * @returns {MatchResults} - Returns match results info.\n */\n SpellChecker.prototype.getMatchedResultsFromElement = function (errorElement, currentText) {\n var line = errorElement.line;\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex((isNullOrUndefined(currentText)) ? errorElement.text : currentText, 'CaseSensitive');\n this.textSearchResults.clearResults();\n var results = this.textSearchResults;\n var textLineInfo = this.documentHelper.owner.searchModule.textSearch.getElementInfo(line.children[0], 0, false);\n var text = textLineInfo.fullText;\n var matches = [];\n var spans = textLineInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n return { 'matches': matches, 'elementInfo': spans, 'textResults': results };\n };\n /**\n * Method to update error element information\n *\n * @private\n * @param {string} error - Specifies the error word.\n * @param {ErrorTextElementBox} errorElement - Specifies the error element box.\n * @returns {void}\n */\n SpellChecker.prototype.updateErrorElementTextBox = function (error, errorElement) {\n var element = errorElement;\n this.documentHelper.clearSelectionHighlight();\n this.documentHelper.selection.start = element.start;\n this.documentHelper.selection.end = element.end;\n this.documentHelper.selection.highlight(errorElement.start.paragraph, errorElement.start, errorElement.end);\n this.documentHelper.owner.spellCheckDialog.updateSuggestionDialog(error, element);\n };\n /**\n * Method to retrieve space information in a text\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getWhiteSpaceCharacterInfo = function (text, characterFormat) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var width = 0;\n var length = 0;\n matchedText = text.match(/[\\s]+/);\n if (!isNullOrUndefined(matchedText) && matchedText.length > 0) {\n for (var i = 0; i < matchedText.length; i++) {\n width += this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n length += matchedText[i].length;\n }\n }\n return { 'width': width, 'wordLength': length, 'isBeginning': (!isNullOrUndefined(matchedText) && matchedText.index === 0) };\n };\n /**\n * Retrieve Special character info\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getSpecialCharactersInfo = function (text, characterFormat) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var beginingwidth = 0;\n var endWidth = 0;\n var length = 0;\n matchedText = text.match(/^[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n beginingwidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n }\n length = matchedText.length;\n }\n matchedText = text.match(/[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*$/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n endWidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n }\n length = matchedText.length;\n }\n return { 'beginningWidth': beginingwidth, 'endWidth': endWidth, 'wordLength': length };\n };\n /**\n * Method to retrieve next available combined element\n *\n * @private\n * @param {ElementBox} element - Specified the element.\n * @returns {ElementBox} - Returns combined element.\n */\n SpellChecker.prototype.getCombinedElement = function (element) {\n var prevElement = element;\n while (!isNullOrUndefined(element) && element instanceof TextElementBox && element.istextCombined) {\n prevElement = element;\n element = element.previousElement;\n }\n return prevElement;\n };\n SpellChecker.prototype.checkCombinedElementsBeIgnored = function (elements, exactText) {\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].ignoreOnceItems.indexOf(exactText) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Method to update error collection\n *\n * @private\n * @param {TextElementBox} currentElement - Specifies current element.\n * @param {TextElementBox} splittedElement - Specifies splitted element.\n * @returns {void}\n */\n SpellChecker.prototype.updateSplittedElementError = function (currentElement, splittedElement) {\n var errorCount = currentElement.errorCollection.length;\n if (errorCount > 0) {\n var errorCollection = [];\n for (var i = 0; i < errorCount; i++) {\n errorCollection.push(currentElement.errorCollection[i]);\n }\n for (var i = 0; i < errorCount; i++) {\n if (currentElement.text.indexOf(errorCollection[i].text) === -1) {\n splittedElement.ischangeDetected = true;\n currentElement.errorCollection.splice(0, 1);\n }\n }\n }\n };\n /**\n * @private\n * @param {Page} page - Specifies the page.\n * @returns {string} - Returns page content.\n */\n SpellChecker.prototype.getPageContent = function (page) {\n var content = '';\n if (this.documentHelper.owner.sfdtExportModule) {\n var sfdtExport = this.documentHelper.owner.sfdtExportModule;\n sfdtExport.Initialize();\n var document_1 = sfdtExport.writePage(page);\n if (this.documentHelper.owner.textExportModule) {\n var textExport = this.documentHelper.owner.textExportModule;\n textExport.pageContent = '';\n textExport.setDocument(document_1);\n textExport.writeInternal();\n content = textExport.pageContent;\n }\n }\n return content;\n };\n /**\n * @private\n * @param {any[]} spelledWords - Specifies spelledWords\n * @returns {void}\n */\n SpellChecker.prototype.updateUniqueWords = function (spelledWords) {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n this.uniqueSpelledWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n }\n this.uniqueSpelledWords = this.uniqueSpelledWords || {};\n var totalCount = spelledWords.length + Object.keys(this.uniqueSpelledWords).length;\n if (totalCount <= this.uniqueWordsCount) {\n for (var i = 0; i < spelledWords.length; i++) {\n this.checkForUniqueWords(spelledWords[i]);\n }\n }\n localStorage.setItem(this.uniqueKey, JSON.stringify(this.uniqueSpelledWords));\n this.uniqueSpelledWords = {};\n };\n SpellChecker.prototype.checkForUniqueWords = function (spellData) {\n var identityMatched = this.uniqueSpelledWords[spellData.Text];\n if (!identityMatched) {\n this.uniqueSpelledWords[spellData.Text] = spellData.HasSpellError;\n }\n };\n /**\n * Method to clear cached words for spell check\n *\n * @returns {void}\n */\n SpellChecker.prototype.clearCache = function () {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n };\n SpellChecker.prototype.createGuid = function () {\n var dateTime = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (char) {\n var randNo = (dateTime + Math.random() * 16) % 16 | 0;\n dateTime = Math.floor(dateTime / 16);\n return (char === 'x' ? randNo : (randNo & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n };\n /**\n * Check spelling in page data\n *\n * @private\n * @param {string} wordToCheck - Specifies wordToCheck\n * @returns {WordSpellInfo} - Retruns WordSpellInfo\n */\n SpellChecker.prototype.checkSpellingInPageInfo = function (wordToCheck) {\n var hasError = false;\n var elementPresent = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var uniqueWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n if (!isNullOrUndefined(uniqueWords)) {\n if (!isNullOrUndefined(uniqueWords[wordToCheck])) {\n return { hasSpellError: uniqueWords[wordToCheck], isElementPresent: true };\n }\n }\n return { hasSpellError: hasError, isElementPresent: elementPresent };\n };\n /**\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.destroy = function () {\n this.errorWordCollection = undefined;\n this.ignoreAllItems = undefined;\n this.errorSuggestions = undefined;\n this.uniqueWordsCollection = undefined;\n this.uniqueSpelledWords = {};\n this.textSearchResults = undefined;\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n this.documentHelper = undefined;\n };\n return SpellChecker;\n}());\nexport { SpellChecker };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Class which performs optimized text measuring logic to find font height.\n */\nvar Optimized = /** @class */ (function () {\n /**\n * Constructor to initialize Optimized module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object.\n */\n function Optimized(documentHelper) {\n this.documentHelper = documentHelper;\n this.optimizedHeightCollection = {};\n }\n Optimized.prototype.getModuleName = function () {\n return 'Optimized';\n };\n /**\n * Construct key based on the character format.\n *\n * @param {WCharacterFormat} characterFormat - the character format to construct key.\n * @returns {string} - the constructed key.\n */\n Optimized.prototype.getkeyFromCharFormat = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * Method to retrieve font information with optimized text measuring logic.\n *\n * @param {WCharacterFormat} characterFormat -character format to apply.\n * @returns {string} - returns font size information.\n */\n Optimized.prototype.getFontInfo = function (characterFormat) {\n var container = document.createElement('div');\n container.setAttribute('style', 'position:absolute;top:-1000px;left:-1000px;opacity:0;font-size:0px;line-height:normal;');\n // constant tested height value for calculating height factor which matches 90% accuracy with GDI+ value.\n var maxFontHeight = 288;\n var factor = 1.0 / window.devicePixelRatio;\n container.style.transform = 'scale(' + factor.toString() + ',' + factor.toString() + ')';\n /* eslint-disable-next-line max-len */\n container.innerHTML = 'mm';\n document.body.appendChild(container);\n /* eslint-disable-next-line max-len */\n var baseLineFactor = container.firstChild.offsetTop / container.lastChild.offsetHeight;\n var heightFactor = parseFloat((container.lastChild.offsetHeight / maxFontHeight).toFixed(2));\n document.body.removeChild(container);\n return { HeightFactor: heightFactor, BaselineFactor: baseLineFactor };\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @returns {TextSizeInfo} returns text size information.\n */\n Optimized.prototype.getHeightInternal = function (characterFormat) {\n var key = this.getkeyFromCharFormat(characterFormat);\n //With optimized technique, height and baseline factor will be same for each font-family, hence we maintaining cache for the factors and updating height based on font size.\n if (isNullOrUndefined(this.optimizedHeightCollection[key])) {\n var fontInfo = this.getFontInfo(characterFormat);\n this.optimizedHeightCollection[key] = fontInfo;\n var fontHeight = fontInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontInfo.BaselineFactor * fontHeight };\n }\n else {\n var fontSizeInfo = this.optimizedHeightCollection[key];\n var fontHeight = fontSizeInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontSizeInfo.BaselineFactor * fontHeight };\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Optimized.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.optimizedHeightCollection = undefined;\n };\n return Optimized;\n}());\nexport { Optimized };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Class which performs regular text measuring logic to find font height.\n */\nvar Regular = /** @class */ (function () {\n /**\n * Constructor to initialize Regular module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object\n */\n function Regular(documentHelper) {\n this.documentHelper = documentHelper;\n }\n /**\n * Gets module name.\n *\n * @returns {string} - the module name.\n */\n Regular.prototype.getModuleName = function () {\n return 'Regular';\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @returns {TextSizeInfo} returns text size information.\n */\n Regular.prototype.getHeightInternal = function (characterFormat) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.innerText = 'm';\n var iframe = createElement('iframe');\n document.body.appendChild(iframe);\n var innerHtml = ''\n + ''\n + ''\n + ''\n + '';\n if (!isNullOrUndefined(iframe.contentDocument)) {\n iframe.contentDocument.open();\n iframe.contentDocument.write(innerHtml);\n iframe.contentDocument.close();\n }\n this.applyStyle(spanElement, characterFormat);\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'display:inline-block;position:absolute;');\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n iframe.contentDocument.body.appendChild(parentDiv);\n textHeight = spanElement.offsetHeight;\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(iframe);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n Regular.prototype.applyStyle = function (spanElement, characterFormat) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n var style = 'white-space:nowrap;';\n if (characterFormat.fontFamily !== '') {\n style += 'font-family:' + characterFormat.fontFamily + ';';\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n style += 'font-size:' + fontSize.toString() + 'pt;';\n if (characterFormat.bold) {\n style += 'font-weight:bold;';\n }\n if (characterFormat.italic) {\n style += 'font-style:italic;';\n }\n spanElement.setAttribute('style', style);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Regular.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Regular;\n}());\nexport { Regular };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WTableFormat, WSectionFormat, WRowFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, ChartDataFormat, ChartCategory, ChartData, ChartSeries, ChartDataLabels, ChartTrendLines, ChartSeriesFormat, CommentCharacterElementBox, CommentElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, LineFormat, TextFrame, ContentControlProperties, ContentControlListItems, ContentControl, CheckBoxState, XmlMapping, CustomXmlPart, Footnote, FootnoteElementBox, FillFormat, TablePosition } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/dictionary';\nimport { ChartComponent } from '@syncfusion/ej2-office-chart';\nimport { Revision } from '../track-changes/track-changes';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.documentHelper = undefined;\n /**\n * @private\n */\n this.commentStarts = undefined;\n /**\n * @private\n */\n this.commentEnds = undefined;\n /**\n * @private\n */\n this.commentsCollection = undefined;\n /**\n * @private\n */\n this.revisionCollection = undefined;\n this.isPageBreakInsideTable = false;\n this.referedRevisions = [];\n this.isParseHeader = false;\n this.footnotes = undefined;\n this.endnotes = undefined;\n /**\n * @private\n */\n this.isCutPerformed = false;\n /**\n * @private\n */\n this.isPaste = false;\n /**\n * @private\n */\n this.isHtmlPaste = false;\n this.documentHelper = documentHelper;\n this.editableRanges = new Dictionary();\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtReader.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n SfdtReader.prototype.convertJsonToDocument = function (json) {\n this.commentStarts = new Dictionary();\n this.commentEnds = new Dictionary();\n this.commentsCollection = new Dictionary();\n this.revisionCollection = new Dictionary();\n this.referedRevisions = [];\n this.footnotes = new Footnote();\n this.endnotes = new Footnote();\n var sections = [];\n var jsonObject = json;\n jsonObject = (jsonObject instanceof Object) ? jsonObject : JSON.parse(jsonObject);\n var characterFormat = isNullOrUndefined(jsonObject.characterFormat) ?\n this.viewer.owner.characterFormat : jsonObject.characterFormat;\n this.parseCharacterFormat(characterFormat, this.documentHelper.characterFormat);\n var paragraphFormat = isNullOrUndefined(jsonObject.paragraphFormat) ?\n this.viewer.owner.paragraphFormat : jsonObject.paragraphFormat;\n this.parseParagraphFormat(paragraphFormat, this.documentHelper.paragraphFormat);\n this.parseDocumentProtection(jsonObject);\n if (!isNullOrUndefined(jsonObject.defaultTabWidth)) {\n this.documentHelper.defaultTabWidth = jsonObject.defaultTabWidth;\n }\n if (!isNullOrUndefined(jsonObject.trackChanges)) {\n this.documentHelper.owner.enableTrackChanges = jsonObject.trackChanges;\n }\n if (!isNullOrUndefined(jsonObject.dontUseHTMLParagraphAutoSpacing)) {\n this.documentHelper.dontUseHtmlParagraphAutoSpacing = jsonObject.dontUseHTMLParagraphAutoSpacing;\n }\n if (!isNullOrUndefined(jsonObject.alignTablesRowByRow)) {\n this.documentHelper.alignTablesRowByRow = jsonObject.alignTablesRowByRow;\n }\n if (!isNullOrUndefined(jsonObject.background)) {\n this.documentHelper.backgroundColor = this.getColor(jsonObject.background.color);\n }\n if (!isNullOrUndefined(jsonObject.compatibilityMode)) {\n this.documentHelper.compatibilityMode = jsonObject.compatibilityMode;\n if (!isNullOrUndefined(this.documentHelper.owner.documentSettings)) {\n this.documentHelper.owner.documentSettings.compatibilityMode = jsonObject.compatibilityMode;\n }\n }\n if (!isNullOrUndefined(jsonObject.abstractLists)) {\n this.parseAbstractList(jsonObject, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject.lists)) {\n this.parseList(jsonObject, this.documentHelper.lists);\n }\n if (!isNullOrUndefined(jsonObject.styles)) {\n this.parseStyles(jsonObject, this.documentHelper.styles);\n }\n if (!isNullOrUndefined(jsonObject.comments)) {\n this.parseComments(jsonObject, this.documentHelper.comments);\n }\n if (!isNullOrUndefined(jsonObject.revisions)) {\n this.parseRevisions(jsonObject, this.viewer.owner.revisionsInternal.changes);\n }\n if (!isNullOrUndefined(jsonObject.sections)) {\n this.parseSections(jsonObject.sections, sections);\n }\n if (!isNullOrUndefined(jsonObject.customXml)) {\n this.parseCustomXml(jsonObject);\n }\n if (!isNullOrUndefined(jsonObject.formFieldShading)) {\n this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading = jsonObject.formFieldShading;\n }\n if (!isNullOrUndefined(jsonObject.footnotes)) {\n this.parseFootnotes(jsonObject.footnotes, this.documentHelper.footnotes);\n }\n if (!isNullOrUndefined(jsonObject.endnotes)) {\n this.parseEndtnotes(jsonObject.endnotes, this.documentHelper.endnotes);\n }\n this.generalizeRevisions();\n return sections;\n };\n SfdtReader.prototype.generalizeRevisions = function () {\n var _this = this;\n var tempRevisionCollection = new Dictionary();\n var tempRevisons = [];\n this.referedRevisions.forEach(function (element) {\n var revision = _this.documentHelper.revisionsInternal.get(element);\n if (tempRevisons.indexOf(revision) === -1) {\n tempRevisons.push(revision);\n tempRevisionCollection.add(element, revision);\n }\n });\n this.viewer.owner.revisionsInternal.changes = tempRevisons;\n this.documentHelper.revisionsInternal = tempRevisionCollection;\n };\n SfdtReader.prototype.parseFootnotes = function (data, footnote) {\n if (!isNullOrUndefined(data.separator)) {\n this.parseBody(data.separator, footnote.separator);\n }\n if (!isNullOrUndefined(data.continuationNotice)) {\n this.parseBody(data.continuationNotice, footnote.continuationNotice);\n }\n if (!isNullOrUndefined(data.continuationSeparator)) {\n this.parseBody(data.continuationSeparator, footnote.continuationSeparator);\n }\n };\n SfdtReader.prototype.parseEndtnotes = function (data, endnote) {\n if (!isNullOrUndefined(data.separator)) {\n this.parseBody(data.separator, endnote.separator);\n }\n if (!isNullOrUndefined(data.continuationNotice)) {\n this.parseBody(data.continuationNotice, endnote.continuationNotice);\n }\n if (!isNullOrUndefined(data.continuationSeparator)) {\n this.parseBody(data.continuationSeparator, endnote.continuationSeparator);\n }\n };\n SfdtReader.prototype.parseCustomXml = function (data) {\n for (var i = 0; i < data.customXml.length; i++) {\n var xmlData = data.customXml[i];\n if (!this.revisionCollection.containsKey(xmlData.itemID)) {\n this.documentHelper.customXmlData.add(xmlData.itemID, xmlData.xml);\n }\n }\n };\n SfdtReader.prototype.parseDocumentProtection = function (data) {\n if (!isNullOrUndefined(data.formatting)) {\n this.documentHelper.restrictFormatting = data.formatting;\n }\n if (!isNullOrUndefined(data.enforcement)) {\n this.documentHelper.isDocumentProtected = data.enforcement;\n }\n if (!isNullOrUndefined(data.protectionType)) {\n this.documentHelper.protectionType = data.protectionType;\n }\n if (!isNullOrUndefined(data.hashValue)) {\n this.documentHelper.hashValue = data.hashValue;\n }\n if (!isNullOrUndefined(data.saltValue)) {\n this.documentHelper.saltValue = data.saltValue;\n }\n };\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data.styles.length; i++) {\n if (isNullOrUndefined(this.documentHelper.styles.findByName(data.styles[i].name))) {\n this.parseStyle(data, data.styles[i], styles);\n }\n }\n };\n SfdtReader.prototype.parseRevisions = function (data, revisions) {\n for (var i = 0; i < data.revisions.length; i++) {\n var revisionData = data.revisions[i];\n if (!isNullOrUndefined(revisionData.revisionId) && !isNullOrUndefined(revisionData.revisionType)) {\n var revision = this.parseRevision(revisionData);\n var revisionCheck = true;\n if (!this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && this.isPaste) {\n if (revisionData.revisionType === 'Insertion' && this.isPaste && this.documentHelper.owner.enableTrackChanges) {\n continue;\n }\n else {\n if (!this.revisionCollection.containsKey(revisionData.revisionId)) {\n this.revisionCollection.add(revisionData.revisionId, revision);\n }\n }\n }\n else {\n this.revisionCollection.add(revisionData.revisionId, revision);\n }\n for (var j = 0; j < revisions.length; j++) {\n if (revisions[j].revisionID === revision.revisionID) {\n revisionCheck = false;\n }\n }\n if (revisionCheck) {\n revisions.push(revision);\n }\n }\n }\n this.documentHelper.revisionsInternal = this.revisionCollection;\n if (this.documentHelper.owner.sfdtExportModule) {\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n };\n SfdtReader.prototype.parseRevision = function (data) {\n if (!isNullOrUndefined(data)) {\n var revision = new Revision(this.viewer.owner, data.author, data.date);\n revision.revisionID = data.revisionId;\n revision.revisionType = data.revisionType;\n return revision;\n }\n else {\n return undefined;\n }\n };\n SfdtReader.prototype.checkAndApplyRevision = function (inline, item) {\n if (!isNullOrUndefined(inline.revisionIds) && inline.revisionIds.length > 0) {\n for (var i = 0; i < inline.revisionIds.length; i++) {\n var id = inline.revisionIds[i];\n if (this.revisionCollection.containsKey(id)) {\n this.referedRevisions.push(id);\n var revision = this.revisionCollection.get(id);\n if (!(item instanceof WParagraphFormat)) {\n revision.range.push(item);\n }\n item.revisions.push(revision);\n }\n }\n }\n };\n SfdtReader.prototype.parseComments = function (data, comments) {\n var count = 0;\n for (var i = 0; i < data.comments.length; i++) {\n var commentData = data.comments[i];\n var commentElement = undefined;\n commentElement = this.parseComment(commentData, commentElement);\n while (count < commentData.replyComments.length) {\n var replyComment = undefined;\n replyComment = this.parseComment(commentData.replyComments[count], replyComment);\n replyComment.ownerComment = commentElement;\n replyComment.isReply = true;\n commentElement.replyComments.push(replyComment);\n this.commentsCollection.add(replyComment.commentId, replyComment);\n count++;\n }\n this.commentsCollection.add(commentElement.commentId, commentElement);\n comments.push(commentElement);\n count = 0;\n }\n };\n SfdtReader.prototype.parseComment = function (commentData, commentElement) {\n commentElement = new CommentElementBox(commentData.date);\n commentElement.author = commentData.author;\n commentElement.initial = commentData.initial;\n commentElement.commentId = commentData.commentId;\n commentElement.isResolved = commentData.done;\n commentElement.text = this.parseCommentText(commentData.blocks);\n return commentElement;\n };\n SfdtReader.prototype.parseCommentText = function (blocks) {\n var text = '';\n for (var i = 0; i < blocks.length; i++) {\n if (i !== 0) {\n text += '\\n';\n }\n for (var j = 0; j < blocks[i].inlines.length; j++) {\n text = text + blocks[i].inlines[j].text;\n }\n }\n return text;\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles) {\n var wStyle;\n if (!isNullOrUndefined(style.type)) {\n if (style.type === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (style.type === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (!isNullOrUndefined(style.name)) {\n wStyle.name = style.name;\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n wStyle.basedOn = styles.findByName(styleString.name);\n }\n }\n if (!isNullOrUndefined(style.link)) {\n var link = styles.findByName(style.link);\n var linkStyle = this.getStyle(style.link, data);\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n charaStyle.name = style.name + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style.basedOn === 'Normal' ? 'Default Paragraph Font' : (style.basedOn + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style.link : styles.findByName(styleString.name);\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style.characterFormat)) {\n this.parseCharacterFormat(style.characterFormat, wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.parseParagraphFormat(style.paragraphFormat, wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style.next)) {\n if (style.next === style.name) {\n wStyle.next = wStyle;\n }\n else {\n var next = styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style.next, data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data.abstractLists.length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data.abstractLists[i];\n abstractLists.push(abstractList);\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract.abstractListId)) {\n abstractList.abstractListId = abstract.abstractListId;\n }\n if (!isNullOrUndefined(abstract.levels)) {\n for (var j = 0; j < abstract.levels.length; j++) {\n var level = abstract.levels[j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (data.listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n }\n else {\n listLevel.listLevelPattern = data.listLevelPattern;\n listLevel.startAt = data.startAt;\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n if (data.restartLevel >= 0) {\n listLevel.restartLevel = data.restartLevel;\n }\n else {\n listLevel.restartLevel = data.levelNumber;\n }\n }\n listLevel.followCharacter = data.followCharacter;\n this.parseCharacterFormat(data.characterFormat, listLevel.characterFormat);\n this.parseParagraphFormat(data.paragraphFormat, listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data.lists.length; i++) {\n var list = new WList();\n var lists = data.lists[i];\n if (!isNullOrUndefined(lists.abstractListId)) {\n list.abstractListId = lists.abstractListId;\n list.abstractList = this.documentHelper.getAbstractListById(lists.abstractListId);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists.listId)) {\n list.listId = lists.listId;\n }\n if (lists.hasOwnProperty('levelOverrides')) {\n this.parseLevelOverride(lists.levelOverrides, list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride.startAt;\n levelOverrides.levelNumber = levelOverride.levelNumber;\n if (!isNullOrUndefined(levelOverride.overrideListLevel)) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride.overrideListLevel, levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n if (!isNullOrUndefined(item.sectionFormat)) {\n this.parseSectionFormat(item.sectionFormat, section.sectionFormat);\n }\n if (isNullOrUndefined(item.headersFooters)) {\n item.headersFooters = {};\n }\n this.documentHelper.headersFooters.push(this.parseHeaderFooter(item.headersFooters, this.documentHelper.headersFooters));\n this.isParseHeader = false;\n this.parseTextBody(item.blocks, section, i + 1 < data.length);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n this.isParseHeader = true;\n var hfs = {};\n if (!isNullOrUndefined(data.header)) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data.header.blocks, oddHeader);\n }\n if (!isNullOrUndefined(data.footer)) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data.footer.blocks, oddFooter);\n }\n if (!isNullOrUndefined(data.evenHeader)) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data.evenHeader.blocks, evenHeader);\n }\n if (!isNullOrUndefined(data.evenFooter)) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data.evenFooter.blocks, evenFooter);\n }\n if (!isNullOrUndefined(data.firstPageHeader)) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data.firstPageHeader.blocks, firstPageHeader);\n }\n if (!isNullOrUndefined(data.firstPageFooter)) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data.firstPageFooter.blocks, firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section, isSectionBreak) {\n this.parseBody(data, section.childWidgets, section, isSectionBreak);\n };\n SfdtReader.prototype.addCustomStyles = function (data) {\n if (!isNullOrUndefined(data.styles)) {\n for (var i = 0; i < data.styles.length; i++) {\n var style = this.documentHelper.styles.findByName(data.styles[i].name);\n if (style === undefined) {\n this.parseStyle(data, data.styles[i], this.documentHelper.styles);\n }\n }\n }\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container, isSectionBreak, contentControlProperties) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n var hasValidElmts = false;\n if (block.hasOwnProperty('inlines')) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n if (block.inlines.length > 0) {\n hasValidElmts = this.parseParagraph(block.inlines, paragraph, writeInlineFormat);\n }\n if (!(isSectionBreak && block === data[data.length - 1] && !hasValidElmts)) {\n this.parseCharacterFormat(block.characterFormat, paragraph.characterFormat);\n this.parseParagraphFormat(block.paragraphFormat, paragraph.paragraphFormat);\n var styleObj = void 0;\n var styleName = 'Normal';\n if (!isNullOrUndefined(block.paragraphFormat) && !isNullOrUndefined(block.paragraphFormat.styleName)) {\n //Default value to link style object.\n styleName = block.paragraphFormat.styleName;\n }\n styleObj = this.documentHelper.styles.findByName(styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n paragraph.paragraphFormat.applyStyle(styleObj);\n }\n blocks.push(paragraph);\n }\n else if (isSectionBreak && data.length === 1) {\n blocks.push(paragraph);\n }\n paragraph.index = blocks.length - 1;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty('rows')) {\n this.parseTable(block, blocks, blocks.length, container);\n }\n else if (block.hasOwnProperty('contentControlProperties')) {\n var blockStartContentControl = new ContentControl('Block');\n var blockEndContentControl = new ContentControl('Block');\n this.parseContentControlProperties(block.contentControlProperties, blockStartContentControl.contentControlProperties);\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n this.parseBody(block.blocks, blocks, container, isSectionBreak, blockStartContentControl.contentControlProperties);\n for (var j = 0; j < 2; j++) {\n var para = (blocks.length < block.blocks.length) ? blocks[0] : j === 0 ? blocks[blocks.length - block.blocks.length] : blocks[blocks.length - 1];\n var blockWidget = void 0;\n if (para instanceof ParagraphWidget) {\n blockWidget = para;\n }\n else if (para instanceof TableWidget) {\n if (j === 0) {\n blockWidget = para.firstChild.firstChild.firstChild;\n }\n else {\n var cell = para.lastChild.lastChild;\n blockWidget = cell.lastChild;\n }\n }\n if (!isNullOrUndefined(blockWidget) && blockWidget.childWidgets.length === 0) {\n var lineWidget = new LineWidget(blockWidget);\n blockWidget.childWidgets.push(lineWidget);\n }\n if (j === 0) {\n blockWidget.firstChild.children.splice(0, 0, blockStartContentControl);\n blockStartContentControl.line = blockWidget.firstChild;\n }\n else {\n blockWidget.lastChild.children.push(blockEndContentControl);\n blockEndContentControl.line = blockWidget.lastChild;\n }\n }\n }\n if (!isNullOrUndefined(contentControlProperties)) {\n blocks[blocks.length - 1].contentControlProperties = contentControlProperties;\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n table.tableFormat = new WTableFormat(table);\n if (!isNullOrUndefined(block.tableFormat)) {\n this.parseTableFormat(block.tableFormat, table.tableFormat);\n }\n table.title = block.title;\n table.description = block.description;\n this.parseTablePositioning(block, table);\n for (var i = 0; i < block.rows.length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block.rows[i];\n if (!isNullOrUndefined(tableRow.contentControlProperties)) {\n row.contentControlProperties = new ContentControlProperties('Row');\n this.parseContentControlProperties(tableRow.contentControlProperties, row.contentControlProperties);\n }\n if (tableRow.hasOwnProperty('rowFormat')) {\n this.parseRowFormat(tableRow.rowFormat, row.rowFormat);\n this.parseRowGridValues(tableRow, row.rowFormat);\n this.parseRowGridValues(tableRow.rowFormat, row.rowFormat);\n row.index = i;\n for (var j = 0; j < block.rows[i].cells.length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n if (!isNullOrUndefined(block.rows[i].cells[j].contentControlProperties)) {\n cell.contentControlProperties = new ContentControlProperties('Cell');\n this.parseContentControlProperties(block.rows[i].cells[j].contentControlProperties, cell.contentControlProperties);\n }\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n cell.columnIndex = j;\n if (block.rows[i].cells[j].hasOwnProperty('cellFormat')) {\n this.parseCellFormat(block.rows[i].cells[j].cellFormat, cell.cellFormat);\n }\n var item = block.rows[i].cells[j].blocks;\n for (var k = 0; k < item.length; k++) {\n if (item[k].hasOwnProperty('rows')) {\n table.isContainInsideTable = true;\n }\n }\n this.isPageBreakInsideTable = true;\n this.parseTextBody(block.rows[i].cells[j].blocks, cell, false);\n if (!isNullOrUndefined(cell.contentControlProperties)) {\n var cellStartContentControl = new ContentControl('Cell');\n var cellEndContentControl = new ContentControl('Cell');\n cellStartContentControl.contentControlProperties = cell.contentControlProperties;\n cellEndContentControl.contentControlProperties = cell.contentControlProperties;\n cellStartContentControl.type = 0;\n cellEndContentControl.type = 1;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n cellStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, cellStartContentControl);\n cellEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(cellEndContentControl);\n }\n if (!isNullOrUndefined(row.contentControlProperties)) {\n if (row.firstChild === cell) {\n var rowStartContentControl = new ContentControl('Row');\n rowStartContentControl.contentControlProperties = row.contentControlProperties;\n rowStartContentControl.type = 0;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n rowStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, rowStartContentControl);\n }\n else if (row.lastChild === cell) {\n var rowEndContentControl = new ContentControl('Row');\n rowEndContentControl.contentControlProperties = row.contentControlProperties;\n rowEndContentControl.type = 1;\n if (cell.lastChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.lastChild);\n cell.lastChild.childWidgets.push(lineWidget);\n }\n rowEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(rowEndContentControl);\n }\n }\n this.isPageBreakInsideTable = false;\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseTablePositioning = function (block, table) {\n table.wrapTextAround = !isNullOrUndefined(block.wrapTextAround) ? block.wrapTextAround : false;\n if (table.wrapTextAround) {\n table.positioning = new TablePosition();\n table.positioning.allowOverlap = block.positioning.allowOverlap;\n table.positioning.distanceBottom = HelperMethods.convertPointToPixel(block.positioning.distanceBottom);\n table.positioning.distanceLeft = HelperMethods.convertPointToPixel(block.positioning.distanceLeft);\n table.positioning.distanceRight = HelperMethods.convertPointToPixel(block.positioning.distanceRight);\n table.positioning.distanceTop = HelperMethods.convertPointToPixel(block.positioning.distanceTop);\n if (!isNullOrUndefined(block.positioning.verticalAlignment)) {\n table.positioning.verticalAlignment = block.positioning.verticalAlignment;\n }\n if (!isNullOrUndefined(block.positioning.verticalOrigin)) {\n table.positioning.verticalOrigin = block.positioning.verticalOrigin;\n }\n table.positioning.verticalPosition = block.positioning.verticalPosition;\n if (!isNullOrUndefined(block.positioning.horizontalAlignment)) {\n table.positioning.horizontalAlignment = block.positioning.horizontalAlignment;\n }\n if (!isNullOrUndefined(block.positioning.horizontalOrigin)) {\n table.positioning.horizontalOrigin = block.positioning.horizontalOrigin;\n }\n table.positioning.horizontalPosition = block.positioning.horizontalPosition;\n }\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat) {\n if (!isNullOrUndefined(data.gridBefore)) {\n rowFormat.gridBefore = data.gridBefore;\n }\n if (!isNullOrUndefined(data.gridBeforeWidth)) {\n rowFormat.gridBeforeWidth = data.gridBeforeWidth;\n }\n if (!isNullOrUndefined(data.gridBeforeWidthType)) {\n rowFormat.gridBeforeWidthType = data.gridBeforeWidthType;\n }\n if (!isNullOrUndefined(data.gridAfter)) {\n rowFormat.gridAfter = data.gridAfter;\n }\n if (!isNullOrUndefined(data.gridAfterWidth)) {\n rowFormat.gridAfterWidth = data.gridAfterWidth;\n }\n if (!isNullOrUndefined(data.gridAfterWidthType)) {\n rowFormat.gridAfterWidthType = data.gridAfterWidthType;\n }\n };\n SfdtReader.prototype.parseContentControlProperties = function (wContentControlProperties, contentControlProperties) {\n if (!isNullOrUndefined(wContentControlProperties.lockContentControl)) {\n contentControlProperties.lockContentControl = wContentControlProperties.lockContentControl;\n }\n if (!isNullOrUndefined(wContentControlProperties.lockContents)) {\n contentControlProperties.lockContents = wContentControlProperties.lockContents;\n }\n if (!isNullOrUndefined(wContentControlProperties.tag)) {\n contentControlProperties.tag = wContentControlProperties.tag;\n }\n if (!isNullOrUndefined(wContentControlProperties.color)) {\n contentControlProperties.color = wContentControlProperties.color;\n }\n if (!isNullOrUndefined(wContentControlProperties.title)) {\n contentControlProperties.title = wContentControlProperties.title;\n }\n if (!isNullOrUndefined(wContentControlProperties.appearance)) {\n contentControlProperties.appearance = wContentControlProperties.appearance;\n }\n if (!isNullOrUndefined(wContentControlProperties.type)) {\n contentControlProperties.type = wContentControlProperties.type;\n }\n if (!isNullOrUndefined(wContentControlProperties.hasPlaceHolderText)) {\n contentControlProperties.hasPlaceHolderText = wContentControlProperties.hasPlaceHolderText;\n }\n if (!isNullOrUndefined(wContentControlProperties.multiline)) {\n contentControlProperties.multiline = wContentControlProperties.multiline;\n }\n if (!isNullOrUndefined(wContentControlProperties.isTemporary)) {\n contentControlProperties.isTemporary = wContentControlProperties.isTemporary;\n }\n if (!isNullOrUndefined(wContentControlProperties.characterFormat)) {\n this.parseCharacterFormat(wContentControlProperties.characterFormat, contentControlProperties.characterFormat);\n }\n if (contentControlProperties.type === 'CheckBox') {\n if (!isNullOrUndefined(wContentControlProperties.isChecked)) {\n contentControlProperties.isChecked = wContentControlProperties.isChecked;\n }\n if (!isNullOrUndefined(wContentControlProperties.uncheckedState)) {\n contentControlProperties.uncheckedState = new CheckBoxState();\n contentControlProperties.uncheckedState.font = wContentControlProperties.uncheckedState.font;\n contentControlProperties.uncheckedState.value = wContentControlProperties.uncheckedState.value;\n }\n if (!isNullOrUndefined(wContentControlProperties.checkedState)) {\n contentControlProperties.checkedState = new CheckBoxState();\n contentControlProperties.checkedState.font = wContentControlProperties.checkedState.font;\n contentControlProperties.checkedState.value = wContentControlProperties.checkedState.value;\n }\n }\n else if (contentControlProperties.type === 'Date') {\n if (!isNullOrUndefined(wContentControlProperties.dateCalendarType)) {\n contentControlProperties.dateCalendarType = wContentControlProperties.dateCalendarType;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateStorageFormat)) {\n contentControlProperties.dateStorageFormat = wContentControlProperties.dateStorageFormat;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateDisplayLocale)) {\n contentControlProperties.dateDisplayLocale = wContentControlProperties.dateDisplayLocale;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateDisplayFormat)) {\n contentControlProperties.dateDisplayFormat = wContentControlProperties.dateDisplayFormat;\n }\n }\n else if (contentControlProperties.type === 'ComboBox' || contentControlProperties.type === 'DropDownList') {\n if (!isNullOrUndefined(wContentControlProperties.contentControlListItems)) {\n for (var i = 0; i < wContentControlProperties.contentControlListItems.length; i++) {\n var contentControlListItem = new ContentControlListItems();\n contentControlListItem.displayText = wContentControlProperties.contentControlListItems[i].displayText;\n contentControlListItem.value = wContentControlProperties.contentControlListItems[i].value;\n contentControlProperties.contentControlListItems.push(contentControlListItem);\n }\n }\n }\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping)) {\n contentControlProperties.xmlMapping = new XmlMapping();\n contentControlProperties.xmlMapping.isMapped = wContentControlProperties.xmlMapping.isMapped;\n contentControlProperties.xmlMapping.isWordMl = wContentControlProperties.xmlMapping.isWordMl;\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping.prefixMapping)) {\n contentControlProperties.xmlMapping.prefixMapping = wContentControlProperties.xmlMapping.prefixMapping;\n }\n contentControlProperties.xmlMapping.xPath = wContentControlProperties.xmlMapping.xPath;\n contentControlProperties.xmlMapping.storeItemId = wContentControlProperties.xmlMapping.storeItemId;\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping.customXmlPart)) {\n contentControlProperties.xmlMapping.customXmlPart = new CustomXmlPart();\n contentControlProperties.xmlMapping.customXmlPart.id = wContentControlProperties.xmlMapping.customXmlPart.id;\n contentControlProperties.xmlMapping.customXmlPart.xml = wContentControlProperties.xmlMapping.customXmlPart.xml;\n }\n }\n };\n /* eslint-disable */\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat, lineWidget) {\n var isContentControl = false;\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n }\n else {\n isContentControl = true;\n }\n var hasValidElmts = false;\n var revision;\n var trackChange = this.viewer.owner.enableTrackChanges;\n for (var i = 0; i < data.length; i++) {\n var inline = data[i];\n if (inline.hasOwnProperty('text')) {\n var textElement = undefined;\n if (this.documentHelper.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n }\n else if (inline.text === '\\t') {\n textElement = new TabElementBox();\n }\n else if (inline.text === '\\f' && this.isPageBreakInsideTable) {\n continue;\n }\n else {\n textElement = new TextElementBox();\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this.parseCharacterFormat(inline.characterFormat, textElement.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, textElement);\n textElement.text = inline.text;\n if (this.isHtmlPaste && textElement instanceof TextElementBox) {\n var previousElement = void 0;\n if (lineWidget.children.length > 0) {\n previousElement = lineWidget.children[lineWidget.children.length - 1];\n }\n // In html content, text bidi property is not present in the file level\n // Hence bidi property is false for RTL content\n // So, For html pasting we need to check and content and enable bidi to order the content similar to MS Word\n if (this.documentHelper.textHelper.isRTLText(textElement.text)) {\n textElement.characterFormat.bidi = true;\n if (previousElement instanceof TextElementBox && previousElement.text === ' ') {\n previousElement.characterFormat.bidi = true;\n }\n }\n //If previous element is RTL element, the we need to enable bidi for space character\n else if (textElement.text === ' ' && previousElement && previousElement.characterFormat.bidi) {\n textElement.characterFormat.bidi = true;\n }\n }\n if (this.documentHelper.owner.parser.isPaste && !(this.isCutPerformed)) {\n if (!isNullOrUndefined(inline.revisionIds)) {\n for (var j = 0; j < inline.revisionIds.length; j++) {\n if (this.revisionCollection.containsKey(inline.revisionIds[j])) {\n if (trackChange) {\n revision = this.revisionCollection.get(inline.revisionIds[j]);\n }\n if (!isNullOrUndefined(revision) && !isNullOrUndefined(lineWidget.children[i - 1].revisions[j]) && ((!trackChange) || (trackChange && (revision.revisionType === 'Deletion')))) {\n if (revision.revisionID === inline.revisionIds[j]) {\n inline.revisionIds[j] = lineWidget.children[i - 1].revisions[j].revisionID;\n this.checkAndApplyRevision(inline, textElement);\n continue;\n }\n }\n if (!trackChange) {\n revision = this.documentHelper.revisionsInternal.get(inline.revisionIds[j]);\n }\n this.documentHelper.owner.editorModule.insertRevision(textElement, revision.revisionType, revision.author);\n inline.revisionIds[j] = textElement.revisions[j].revisionID;\n }\n }\n }\n }\n else {\n this.checkAndApplyRevision(inline, textElement);\n }\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('footnoteType')) {\n var footnoteElement = new FootnoteElementBox();\n footnoteElement.line = lineWidget;\n footnoteElement.footnoteType = inline.footnoteType;\n if (footnoteElement.footnoteType === 'Footnote') {\n this.documentHelper.footnoteCollection.push(footnoteElement);\n }\n else {\n this.documentHelper.endnoteCollection.push(footnoteElement);\n }\n footnoteElement.symbolCode = inline.symbolCode;\n footnoteElement.symbolFontName = inline.symbolFontName;\n footnoteElement.customMarker = inline.customMarker;\n footnoteElement.characterFormat = new WCharacterFormat(footnoteElement);\n this.parseCharacterFormat(inline.characterFormat, footnoteElement.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, footnoteElement);\n this.parseBody(inline.blocks, footnoteElement.bodyWidget.childWidgets, undefined, false);\n lineWidget.children.push(footnoteElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('chartType')) {\n // chartPreservation\n if (this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.chartType = true;\n }\n var chartElement = new ChartElementBox();\n chartElement.title = inline.chartTitle;\n chartElement.type = inline.chartType;\n chartElement.chartGapWidth = inline.gapWidth;\n chartElement.chartOverlap = inline.overlap;\n this.parseChartTitleArea(inline.chartTitleArea, chartElement.chartTitleArea);\n this.parseChartArea(inline.chartArea, chartElement.chartArea);\n this.parseChartArea(inline.plotArea, chartElement.chartPlotArea);\n this.parseChartLegend(inline.chartLegend, chartElement.chartLegend);\n this.parseChartData(inline, chartElement);\n this.parseChartCategoryAxis(inline.chartPrimaryCategoryAxis, chartElement.chartPrimaryCategoryAxis);\n this.parseChartCategoryAxis(inline.chartPrimaryValueAxis, chartElement.chartPrimaryValueAxis);\n if (inline.chartDataTable != null) {\n this.parseChartDataTable(inline.chartDataTable, chartElement.chartDataTable);\n }\n chartElement.line = lineWidget;\n lineWidget.children.push(chartElement);\n chartElement.height = HelperMethods.convertPointToPixel(inline.height);\n chartElement.width = HelperMethods.convertPointToPixel(inline.width);\n var officeChart = new ChartComponent();\n officeChart.chartRender(inline);\n chartElement.officeChart = officeChart;\n officeChart.chart.appendTo(chartElement.targetElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('imageString')) {\n var image = new ImageElementBox(data[i].isInlineImage);\n image.isMetaFile = data[i].isMetaFile;\n image.isCompressed = data[i].isCompressed;\n image.metaFileImageString = data[i].metaFileImageString;\n image.characterFormat = new WCharacterFormat(image);\n image.line = lineWidget;\n this.checkAndApplyRevision(inline, image);\n lineWidget.children.push(image);\n var imageString = HelperMethods.formatClippedString(inline.imageString).formatClippedString;\n var isValidImage = this.validateImageUrl(imageString);\n if (!isValidImage) {\n image.imageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n }\n else {\n image.imageString = inline.imageString;\n }\n image.width = HelperMethods.convertPointToPixel(inline.width);\n image.height = HelperMethods.convertPointToPixel(inline.height);\n image.top = inline.top;\n image.left = inline.left;\n image.bottom = inline.bottom;\n image.right = inline.right;\n image.cropHeightScale = inline.getimageheight;\n image.cropWidthScale = inline.getimagewidth;\n image.name = inline.name;\n image.alternativeText = inline.alternativeText;\n image.title = inline.title;\n image.visible = inline.visible;\n image.widthScale = inline.widthScale;\n image.heightScale = inline.heightScale;\n image.verticalPosition = HelperMethods.convertPointToPixel(inline.verticalPosition);\n image.verticalOrigin = inline.verticalOrigin;\n image.verticalAlignment = inline.verticalAlignment;\n image.horizontalPosition = HelperMethods.convertPointToPixel(inline.horizontalPosition);\n image.horizontalOrigin = inline.horizontalOrigin;\n image.horizontalAlignment = inline.horizontalAlignment;\n image.allowOverlap = inline.allowOverlap;\n image.textWrappingStyle = isNullOrUndefined(inline.textWrappingStyle) ? 'Inline' : inline.textWrappingStyle;\n image.textWrappingType = inline.textWrappingType;\n image.zOrderPosition = inline.zOrderPosition;\n image.layoutInCell = inline.layoutInCell;\n if (!isNullOrUndefined(inline.top) && inline.top !== 0 ||\n !isNullOrUndefined(inline.bottom) && inline.bottom !== 0 ||\n !isNullOrUndefined(inline.left) && inline.left !== 0 ||\n !isNullOrUndefined(inline.right) && inline.right !== 0) {\n image.isCrop = true;\n }\n if (image.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(image);\n }\n this.parseCharacterFormat(inline.characterFormat, image.characterFormat);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('hasFieldEnd') || (inline.hasOwnProperty('fieldType') && inline.fieldType === 0)) {\n var fieldBegin = new FieldElementBox(0);\n this.parseCharacterFormat(inline.characterFormat, fieldBegin.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, fieldBegin);\n fieldBegin.fieldCodeType = inline.fieldCodeType;\n fieldBegin.hasFieldEnd = inline.hasFieldEnd;\n if (inline.hasOwnProperty('formFieldData')) {\n var formFieldData = void 0;\n if (inline.formFieldData.hasOwnProperty('textInput')) {\n formFieldData = new TextFormField();\n formFieldData.type = inline.formFieldData.textInput.type;\n formFieldData.maxLength = inline.formFieldData.textInput.maxLength;\n formFieldData.defaultValue = inline.formFieldData.textInput.defaultValue;\n formFieldData.format = inline.formFieldData.textInput.format;\n }\n else if (inline.formFieldData.hasOwnProperty('checkBox')) {\n formFieldData = new CheckBoxFormField();\n formFieldData.sizeType = inline.formFieldData.checkBox.sizeType;\n formFieldData.size = inline.formFieldData.checkBox.size;\n formFieldData.defaultValue = inline.formFieldData.checkBox.defaultValue;\n formFieldData.checked = inline.formFieldData.checkBox.checked;\n }\n else {\n formFieldData = new DropDownFormField();\n formFieldData.dropdownItems = inline.formFieldData.dropDownList.dropDownItems;\n formFieldData.selectedIndex = inline.formFieldData.dropDownList.selectedIndex;\n }\n formFieldData.name = inline.formFieldData.name;\n formFieldData.enabled = inline.formFieldData.enabled;\n formFieldData.helpText = inline.formFieldData.helpText;\n formFieldData.statusText = inline.formFieldData.statusText;\n fieldBegin.formFieldData = formFieldData;\n this.documentHelper.formFields.push(fieldBegin);\n }\n this.documentHelper.fieldStacks.push(fieldBegin);\n this.checkAndApplyRevision(inline, fieldBegin);\n fieldBegin.line = lineWidget;\n this.documentHelper.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n var field = undefined;\n if (inline.fieldType === 2) {\n field = new FieldElementBox(2);\n this.parseCharacterFormat(inline.characterFormat, field.characterFormat, writeInlineFormat);\n this.fieldSeparator = field;\n if (this.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2) {\n var fieldTextElement = this.containsFieldBegin(lineWidget);\n if (!isNullOrUndefined(fieldTextElement) && fieldTextElement instanceof TextElementBox && (fieldTextElement.text.match('PAGE') || fieldTextElement.text.match('page'))) {\n this.documentHelper.isPageField = true;\n }\n }\n }\n }\n else if (inline.fieldType === 1) {\n field = new FieldElementBox(1);\n this.parseCharacterFormat(inline.characterFormat, field.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, field);\n this.checkAndApplyRevision(inline, field);\n //For Field End Updated begin and separator. \n if (this.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n hasValidElmts = true;\n }\n //After setting all the property clear the field values\n this.documentHelper.fieldStacks.splice(this.documentHelper.fieldStacks.length - 1, 1);\n this.fieldSeparator = undefined;\n this.documentHelper.isPageField = false;\n this.documentHelper.fieldCollection.push(field.fieldBegin);\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty('bookmarkType')) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline.bookmarkType);\n bookmark.name = inline.name;\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (!this.isParseHeader || this.isPaste) {\n if (inline.bookmarkType === 0) {\n var isAdd = this.isPaste && !this.documentHelper.bookmarks.containsKey(bookmark.name);\n if (!this.isPaste || isAdd) {\n this.documentHelper.bookmarks.add(bookmark.name, bookmark);\n }\n else if (!isAdd) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n else if (inline.bookmarkType === 1) {\n if (this.documentHelper.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this.documentHelper.bookmarks.get(bookmark.name);\n var isConsider = this.isPaste && isNullOrUndefined(bookmarkStart.reference);\n if (!this.isPaste || isConsider) {\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n }\n else if (!isConsider) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n }\n }\n if (bookmark.name.indexOf('_') !== 0) {\n hasValidElmts = true;\n }\n }\n else if (inline.hasOwnProperty('editRangeId')) {\n if (inline.hasOwnProperty('editableRangeStart')) {\n var permEnd = new EditRangeEndElementBox();\n if (this.editableRanges.containsKey(inline.editRangeId)) {\n var start = this.editableRanges.get(inline.editRangeId);\n permEnd.editRangeStart = start;\n start.editRangeEnd = permEnd;\n this.editableRanges.remove(inline.editRangeId);\n }\n lineWidget.children.push(permEnd);\n permEnd.line = lineWidget;\n }\n else {\n var permStart = this.parseEditableRangeStart(inline);\n lineWidget.children.push(permStart);\n permStart.line = lineWidget;\n if (!this.editableRanges.containsKey(inline.editRangeId)) {\n this.editableRanges.add(inline.editRangeId, permStart);\n }\n }\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('commentId')) {\n var commentID = inline.commentId;\n var commentStart = undefined;\n var comment = void 0;\n if (this.commentStarts.containsKey(commentID)) {\n commentStart = this.commentStarts.get(commentID);\n }\n var commentEnd = undefined;\n if (this.commentEnds.containsKey(commentID)) {\n commentEnd = this.commentEnds.get(commentID);\n }\n if (inline.hasOwnProperty('commentCharacterType')) {\n if (inline.commentCharacterType === 0) {\n var commentStartElement = new CommentCharacterElementBox(0);\n commentStartElement.commentId = commentID;\n if (!this.commentStarts.containsKey(commentID)) {\n this.commentStarts.add(commentID, commentStartElement);\n }\n commentStartElement.line = lineWidget;\n lineWidget.children.push(commentStartElement);\n comment = this.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentStart = commentStartElement;\n commentStartElement.comment = comment;\n }\n }\n else {\n var commentEndElement = new CommentCharacterElementBox(1);\n commentEndElement.commentId = commentID;\n if (!this.commentEnds.containsKey(commentID)) {\n this.commentEnds.add(commentID, commentEndElement);\n }\n commentEndElement.line = lineWidget;\n lineWidget.children.push(commentEndElement);\n comment = this.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentEnd = commentEndElement;\n commentEndElement.comment = comment;\n }\n }\n if (!isNullOrUndefined(comment) && comment.isReply) {\n if (isNullOrUndefined(comment.ownerComment.commentStart)) {\n comment.ownerComment.commentStart = comment.commentStart;\n }\n if (isNullOrUndefined(comment.ownerComment.commentEnd)) {\n comment.ownerComment.commentEnd = comment.commentEnd;\n }\n }\n }\n }\n else if (inline.hasOwnProperty('shapeId')) {\n var shape = new ShapeElementBox();\n shape.shapeId = inline.shapeId;\n shape.name = inline.name;\n shape.alternativeText = inline.alternativeText;\n shape.title = inline.title;\n shape.visible = inline.visible;\n shape.width = HelperMethods.convertPointToPixel(inline.width);\n shape.height = HelperMethods.convertPointToPixel(inline.height);\n shape.widthScale = inline.widthScale;\n shape.heightScale = inline.heightScale;\n shape.verticalPosition = HelperMethods.convertPointToPixel(inline.verticalPosition);\n shape.verticalOrigin = inline.verticalOrigin;\n shape.verticalAlignment = inline.verticalAlignment;\n shape.verticalRelativePercent = inline.verticalRelativePercent;\n shape.horizontalPosition = HelperMethods.convertPointToPixel(inline.horizontalPosition);\n shape.horizontalOrigin = inline.horizontalOrigin;\n shape.horizontalAlignment = inline.horizontalAlignment;\n shape.horizontalRelativePercent = inline.horizontalRelativePercent;\n shape.zOrderPosition = inline.zOrderPosition;\n shape.allowOverlap = inline.allowOverlap;\n shape.textWrappingStyle = isNullOrUndefined(inline.textWrappingStyle) ? 'InFrontOfText' : inline.textWrappingStyle;\n shape.textWrappingType = inline.textWrappingType;\n shape.distanceBottom = HelperMethods.convertPointToPixel(inline.distanceBottom);\n shape.distanceLeft = HelperMethods.convertPointToPixel(inline.distanceLeft);\n shape.distanceRight = HelperMethods.convertPointToPixel(inline.distanceRight);\n shape.distanceTop = HelperMethods.convertPointToPixel(inline.distanceTop);\n shape.layoutInCell = inline.layoutInCell;\n shape.lockAnchor = inline.lockAnchor;\n shape.autoShapeType = inline.autoShapeType;\n if (inline.hasOwnProperty('lineFormat')) {\n var lineFormat = new LineFormat();\n lineFormat.line = inline.lineFormat.line;\n lineFormat.lineFormatType = inline.lineFormat.lineFormatType;\n lineFormat.color = inline.lineFormat.color;\n lineFormat.weight = inline.lineFormat.weight;\n lineFormat.dashStyle = inline.lineFormat.lineStyle;\n shape.lineFormat = lineFormat;\n }\n if (inline.hasOwnProperty('fillFormat')) {\n var fillFormat = new FillFormat();\n fillFormat.color = inline.fillFormat.color;\n fillFormat.fill = inline.fillFormat.fill;\n shape.fillFormat = fillFormat;\n }\n if (inline.hasOwnProperty('textFrame')) {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = inline.textFrame.textVerticalAlignment;\n textFrame.marginLeft = HelperMethods.convertPointToPixel(inline.textFrame.leftMargin);\n textFrame.marginRight = HelperMethods.convertPointToPixel(inline.textFrame.rightMargin);\n textFrame.marginTop = HelperMethods.convertPointToPixel(inline.textFrame.topMargin);\n textFrame.marginBottom = HelperMethods.convertPointToPixel(inline.textFrame.bottomMargin);\n this.parseBody(inline.textFrame.blocks, textFrame.childWidgets, textFrame);\n shape.textFrame = textFrame;\n textFrame.containerShape = shape;\n }\n shape.line = lineWidget;\n lineWidget.children.push(shape);\n if (shape.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(shape);\n }\n }\n else if (inline.hasOwnProperty('contentControlProperties')) {\n var inlineStartContentControl = new ContentControl('Inline');\n var inlineEndContentControl = new ContentControl('Inline');\n this.parseContentControlProperties(inline.contentControlProperties, inlineStartContentControl.contentControlProperties);\n inlineEndContentControl.contentControlProperties = inlineStartContentControl.contentControlProperties;\n inlineStartContentControl.line = lineWidget;\n inlineEndContentControl.line = lineWidget;\n inlineStartContentControl.type = 0;\n inlineEndContentControl.type = 1;\n lineWidget.children.push(inlineStartContentControl);\n this.parseParagraph(inline.inlines, paragraph, writeInlineFormat, lineWidget);\n var element = lineWidget.children[lineWidget.children.length - 1];\n while (!(element instanceof ContentControl)) {\n element.contentControlProperties = inlineStartContentControl.contentControlProperties;\n element = element.previousElement;\n }\n lineWidget.children.push(inlineEndContentControl);\n hasValidElmts = true;\n }\n }\n this.isCutPerformed = false;\n if (!isContentControl) {\n paragraph.childWidgets.push(lineWidget);\n }\n return hasValidElmts;\n };\n SfdtReader.prototype.applyCharacterStyle = function (inline, elementbox) {\n if (!isNullOrUndefined(inline.characterFormat) && !isNullOrUndefined(inline.characterFormat.styleName)) {\n var charStyle = this.documentHelper.styles.findByName(inline.characterFormat.styleName, 'Character');\n elementbox.characterFormat.applyStyle(charStyle);\n }\n };\n SfdtReader.prototype.parseEditableRangeStart = function (data) {\n var permStart = new EditRangeStartElementBox();\n if (!isNullOrUndefined(data.columnFirst)) {\n permStart.columnFirst = data.columnFirst;\n }\n if (!isNullOrUndefined(data.columnLast)) {\n permStart.columnLast = data.columnLast;\n }\n if (!isNullOrUndefined(data.user)) {\n permStart.user = data.user;\n if (this.documentHelper.userCollection.indexOf(permStart.user) === -1) {\n this.documentHelper.userCollection.push(permStart.user);\n }\n this.addEditRangeCollection(permStart.user, permStart);\n }\n if (!isNullOrUndefined(data.group) && data.group !== '') {\n permStart.group = data.group;\n permStart.group = permStart.group === 'everyone' ? 'Everyone' : permStart.group;\n if (this.documentHelper.userCollection.indexOf(permStart.group) === -1) {\n this.documentHelper.userCollection.push(permStart.group);\n }\n this.addEditRangeCollection(permStart.group, permStart);\n }\n return permStart;\n };\n SfdtReader.prototype.addEditRangeCollection = function (name, permStart) {\n if (this.documentHelper.editRanges.containsKey(name)) {\n var editStartCollection = this.documentHelper.editRanges.get(name);\n editStartCollection.push(permStart);\n }\n else {\n var newEditStartCollection = [];\n newEditStartCollection.push(permStart);\n this.documentHelper.editRanges.add(name, newEditStartCollection);\n }\n };\n SfdtReader.prototype.parseChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea.chartfontName = titleArea.fontName;\n chartTitleArea.chartFontSize = titleArea.fontSize;\n this.parseChartDataFormat(titleArea.dataFormat, chartTitleArea.dataFormat);\n this.parseChartLayout(titleArea.layout, chartTitleArea.layout);\n };\n SfdtReader.prototype.parseChartDataFormat = function (format, dataFormat) {\n dataFormat.fill.color = format.fill.foreColor;\n dataFormat.fill.rgb = format.fill.rgb;\n dataFormat.line.color = format.line.color;\n dataFormat.line.rgb = format.line.rgb;\n };\n SfdtReader.prototype.parseChartLayout = function (layout, chartLayout) {\n chartLayout.chartLayoutLeft = layout.layoutX;\n chartLayout.chartLayoutTop = layout.layoutY;\n };\n SfdtReader.prototype.parseChartLegend = function (legend, chartLegend) {\n chartLegend.chartLegendPostion = legend.position;\n this.parseChartTitleArea(legend.chartTitleArea, chartLegend.chartTitleArea);\n };\n SfdtReader.prototype.parseChartCategoryAxis = function (categoryAxis, primaryAxis) {\n primaryAxis.categoryAxisType = categoryAxis.categoryType;\n primaryAxis.categoryNumberFormat = categoryAxis.numberFormat;\n primaryAxis.interval = categoryAxis.majorUnit;\n primaryAxis.axisFontSize = categoryAxis.fontSize;\n primaryAxis.axisFontName = categoryAxis.fontName;\n primaryAxis.max = categoryAxis.maximumValue;\n primaryAxis.min = categoryAxis.minimumValue;\n primaryAxis.majorGridLines = categoryAxis.hasMajorGridLines;\n primaryAxis.minorGridLines = categoryAxis.hasMinorGridLines;\n primaryAxis.majorTick = categoryAxis.majorTickMark;\n primaryAxis.minorTick = categoryAxis.minorTickMark;\n primaryAxis.tickPosition = categoryAxis.tickLabelPosition;\n primaryAxis.categoryAxisTitle = categoryAxis.chartTitle;\n if (categoryAxis.chartTitle != null) {\n this.parseChartTitleArea(categoryAxis.chartTitleArea, primaryAxis.chartTitleArea);\n }\n };\n SfdtReader.prototype.parseChartDataTable = function (dataTable, chartDataTable) {\n chartDataTable.showSeriesKeys = dataTable.showSeriesKeys;\n chartDataTable.hasHorzBorder = dataTable.hasHorzBorder;\n chartDataTable.hasVertBorder = dataTable.hasVertBorder;\n chartDataTable.hasBorders = dataTable.hasBorders;\n };\n SfdtReader.prototype.parseChartArea = function (area, chartArea) {\n chartArea.chartForeColor = area.foreColor;\n };\n SfdtReader.prototype.parseChartData = function (inline, chart) {\n for (var i = 0; i < inline.chartCategory.length; i++) {\n var chartCategory = new ChartCategory();\n var xData = inline.chartCategory[i];\n if (xData.hasOwnProperty('categoryXName')) {\n chartCategory.xName = xData.categoryXName;\n }\n for (var j = 0; j < xData.chartData.length; j++) {\n var chartData = new ChartData();\n var yData = xData.chartData[j];\n chartData.yAxisValue = yData.yValue;\n if (inline.chartType === 'Bubble') {\n chartData.bubbleSize = yData.size;\n }\n chartCategory.chartData.push(chartData);\n }\n chart.chartCategory.push(chartCategory);\n }\n this.parseChartSeries(inline, chart);\n };\n SfdtReader.prototype.parseChartSeries = function (inline, chart) {\n var chartType = inline.chartType;\n var isPieType = (chartType === 'Pie' || chartType === 'Doughnut');\n for (var i = 0; i < inline.chartSeries.length; i++) {\n var chartSeries = new ChartSeries();\n var xData = inline.chartSeries[i];\n if (xData.hasOwnProperty('seriesName')) {\n chartSeries.seriesName = xData.seriesName;\n if (isPieType) {\n if (xData.hasOwnProperty('firstSliceAngle')) {\n chartSeries.firstSliceAngle = xData.firstSliceAngle;\n }\n if (chartType === 'Doughnut') {\n chartSeries.doughnutHoleSize = xData.holeSize;\n }\n }\n if (xData.hasOwnProperty('dataLabel')) {\n this.parseChartDataLabels(xData.dataLabel, chartSeries);\n }\n if (xData.hasOwnProperty('seriesFormat')) {\n var seriesFormat = new ChartSeriesFormat();\n var format = xData.seriesFormat;\n seriesFormat.markerStyle = format.markerStyle;\n seriesFormat.markerColor = format.markerColor;\n seriesFormat.numberValue = format.markerSize;\n chartSeries.seriesFormat = seriesFormat;\n }\n if (xData.hasOwnProperty('errorBar')) {\n var errorBar = chartSeries.errorBar;\n errorBar.errorType = xData.errorBar.type;\n errorBar.errorDirection = xData.errorBar.direction;\n errorBar.errorEndStyle = xData.errorBar.endStyle;\n errorBar.numberValue = xData.errorBar.numberValue;\n }\n if (xData.hasOwnProperty('trendLines')) {\n this.parseChartTrendLines(xData.trendLines, chartSeries);\n }\n this.parseChartSeriesDataPoints(xData.dataPoints, chartSeries);\n }\n chart.chartSeries.push(chartSeries);\n }\n };\n SfdtReader.prototype.parseChartDataLabels = function (dataLabels, series) {\n var dataLabel = new ChartDataLabels();\n dataLabel.labelPosition = dataLabels.position;\n dataLabel.fontName = dataLabels.fontName;\n dataLabel.fontColor = dataLabels.fontColor;\n dataLabel.fontSize = dataLabels.fontSize;\n dataLabel.isLegendKey = dataLabels.isLegendKey;\n dataLabel.isBubbleSize = dataLabels.isBubbleSize;\n dataLabel.isCategoryName = dataLabels.isCategoryName;\n dataLabel.isSeriesName = dataLabels.isSeriesName;\n dataLabel.isValue = dataLabels.isValue;\n dataLabel.isPercentage = dataLabels.isPercentage;\n dataLabel.isLeaderLines = dataLabels.isLeaderLines;\n series.dataLabels = dataLabel;\n };\n SfdtReader.prototype.parseChartSeriesDataPoints = function (dataPoints, series) {\n for (var i = 0; i < dataPoints.length; i++) {\n var chartFormat = new ChartDataFormat();\n this.parseChartDataFormat(dataPoints[i], chartFormat);\n series.chartDataFormat.push(chartFormat);\n }\n };\n SfdtReader.prototype.parseChartTrendLines = function (trendLines, series) {\n for (var i = 0; i < trendLines.length; i++) {\n var data = trendLines[i];\n var trendLine = new ChartTrendLines();\n trendLine.trendLineName = data.name;\n trendLine.trendLineType = data.type;\n trendLine.forwardValue = data.forward;\n trendLine.backwardValue = data.backward;\n trendLine.interceptValue = data.intercept;\n trendLine.isDisplayEquation = data.isDisplayEquation;\n trendLine.isDisplayRSquared = data.isDisplayRSquared;\n series.trendLines.push(trendLine);\n }\n };\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat) {\n this.parseBorders(sourceFormat.borders, tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat.allowAutoFit)) {\n tableFormat.allowAutoFit = sourceFormat.allowAutoFit;\n }\n if (!isNullOrUndefined(sourceFormat.cellSpacing)) {\n tableFormat.cellSpacing = sourceFormat.cellSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n tableFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n tableFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n tableFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n tableFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n tableFormat.leftIndent = sourceFormat.leftIndent;\n }\n this.parseShading(sourceFormat.shading, tableFormat.shading);\n if (!isNullOrUndefined(sourceFormat.tableAlignment)) {\n tableFormat.tableAlignment = sourceFormat.tableAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n tableFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n tableFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n tableFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.horizontalPositionAbs)) {\n tableFormat.horizontalPositionAbs = sourceFormat.horizontalPositionAbs;\n }\n if (!isNullOrUndefined(sourceFormat.horizontalPosition)) {\n tableFormat.horizontalPosition = sourceFormat.horizontalPosition;\n }\n if (!isNullOrUndefined(sourceFormat.styleName)) {\n tableFormat.styleName = sourceFormat.styleName;\n }\n };\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(sourceFormat.borders, cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat);\n }\n if (!isNullOrUndefined(sourceFormat.cellWidth)) {\n cellFormat.cellWidth = sourceFormat.cellWidth;\n }\n if (!isNullOrUndefined(sourceFormat.columnSpan)) {\n cellFormat.columnSpan = sourceFormat.columnSpan;\n }\n if (!isNullOrUndefined(sourceFormat.rowSpan)) {\n cellFormat.rowSpan = sourceFormat.rowSpan;\n }\n this.parseShading(sourceFormat.shading, cellFormat.shading);\n if (!isNullOrUndefined(sourceFormat.verticalAlignment)) {\n cellFormat.verticalAlignment = sourceFormat.verticalAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n cellFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n cellFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n cellFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n cellFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n cellFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n cellFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n };\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.allowBreakAcrossPages)) {\n rowFormat.allowBreakAcrossPages = sourceFormat.allowBreakAcrossPages;\n }\n if (!isNullOrUndefined(sourceFormat.isHeader)) {\n rowFormat.isHeader = sourceFormat.isHeader;\n }\n if (!isNullOrUndefined(sourceFormat.heightType)) {\n rowFormat.heightType = sourceFormat.heightType;\n }\n if (!isNullOrUndefined(sourceFormat.height)) {\n rowFormat.height = sourceFormat.height;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n rowFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n rowFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n rowFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n rowFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n rowFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.revisionIds) && sourceFormat.revisionIds.length > 0) {\n this.checkAndApplyRevision(sourceFormat, rowFormat);\n }\n this.parseBorders(sourceFormat.borders, rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n destBorder.isParsing = true;\n this.parseBorder(sourceBorders.left, destBorder.left);\n this.parseBorder(sourceBorders.right, destBorder.right);\n this.parseBorder(sourceBorders.top, destBorder.top);\n this.parseBorder(sourceBorders.bottom, destBorder.bottom);\n this.parseBorder(sourceBorders.vertical, destBorder.vertical);\n this.parseBorder(sourceBorders.horizontal, destBorder.horizontal);\n this.parseBorder(sourceBorders.diagonalDown, destBorder.diagonalDown);\n this.parseBorder(sourceBorders.diagonalUp, destBorder.diagonalUp);\n destBorder.isParsing = false;\n }\n };\n SfdtReader.prototype.parseBorder = function (sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder.color)) {\n destBorder.color = this.getColor(sourceBorder.color);\n }\n if (!isNullOrUndefined(sourceBorder.lineStyle)) {\n destBorder.lineStyle = sourceBorder.lineStyle;\n }\n if (!isNullOrUndefined(sourceBorder.lineWidth)) {\n destBorder.lineWidth = sourceBorder.lineWidth;\n }\n if (!isNullOrUndefined(sourceBorder.hasNoneStyle)) {\n destBorder.hasNoneStyle = sourceBorder.hasNoneStyle;\n }\n if (!isNullOrUndefined(sourceBorder.space)) {\n destBorder.space = sourceBorder.space;\n }\n if (!isNullOrUndefined(sourceBorder.shadow)) {\n destBorder.shadow = sourceBorder.shadow;\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading.backgroundColor)) {\n destShading.backgroundColor = this.getColor(sourceShading.backgroundColor);\n }\n if (!isNullOrUndefined(sourceShading.foregroundColor)) {\n destShading.foregroundColor = this.getColor(sourceShading.foregroundColor);\n }\n if (!isNullOrUndefined(sourceShading.texture) || !isNullOrUndefined(sourceShading.textureStyle)) {\n destShading.textureStyle = !isNullOrUndefined(sourceShading.texture) ? sourceShading.texture : sourceShading.textureStyle;\n }\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseCharacterFormat = function (sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty('inlineFormat')) {\n this.parseCharacterFormat(sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat.baselineAlignment)) {\n characterFormat.baselineAlignment = sourceFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.underline)) {\n characterFormat.underline = sourceFormat.underline;\n }\n if (!isNullOrUndefined(sourceFormat.strikethrough)) {\n characterFormat.strikethrough = sourceFormat.strikethrough;\n }\n if (!isNullOrUndefined(sourceFormat.fontSize)) {\n sourceFormat.fontSize = parseFloat(sourceFormat.fontSize);\n var number = sourceFormat.fontSize * 10;\n if (number % 10 !== 0) {\n number = sourceFormat.fontSize.toFixed(1) * 10;\n //to check worst case scenerio like 8.2 or 8.7 like these to round off\n if (number % 5 === 0) {\n sourceFormat.fontSize = sourceFormat.fontSize.toFixed(1);\n }\n else {\n sourceFormat.fontSize = Math.round(sourceFormat.fontSize);\n }\n }\n var fontSize = parseFloat(sourceFormat.fontSize);\n characterFormat.fontSize = fontSize < 0 ? 0 : fontSize;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamily)) {\n if (sourceFormat.fontFamily.indexOf('\"') !== -1) {\n sourceFormat.fontFamily = sourceFormat.fontFamily.replace('\"', '');\n }\n characterFormat.fontFamily = sourceFormat.fontFamily;\n }\n if (!isNullOrUndefined(sourceFormat.bold)) {\n characterFormat.bold = sourceFormat.bold;\n }\n if (!isNullOrUndefined(sourceFormat.italic)) {\n characterFormat.italic = sourceFormat.italic;\n }\n if (!isNullOrUndefined(sourceFormat.highlightColor)) {\n characterFormat.highlightColor = sourceFormat.highlightColor;\n }\n if (!isNullOrUndefined(sourceFormat.fontColor)) {\n characterFormat.fontColor = this.getColor(sourceFormat.fontColor);\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n characterFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.bdo)) {\n characterFormat.bdo = sourceFormat.bdo;\n }\n if (!isNullOrUndefined(sourceFormat.fontSizeBidi)) {\n characterFormat.fontSizeBidi = sourceFormat.fontSizeBidi < 0 ? 0 : sourceFormat.fontSizeBidi;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamilyBidi)) {\n characterFormat.fontFamilyBidi = sourceFormat.fontFamilyBidi;\n }\n if (!isNullOrUndefined(sourceFormat.boldBidi)) {\n characterFormat.boldBidi = sourceFormat.boldBidi;\n }\n if (!isNullOrUndefined(sourceFormat.italicBidi)) {\n characterFormat.italicBidi = sourceFormat.italicBidi;\n }\n if (!isNullOrUndefined(sourceFormat.revisionIds) && sourceFormat.revisionIds.length > 0) {\n this.checkAndApplyRevision(sourceFormat, characterFormat);\n }\n if (!isNullOrUndefined(sourceFormat.allCaps)) {\n characterFormat.allCaps = sourceFormat.allCaps;\n }\n if (!isNullOrUndefined(sourceFormat.localeIdBidi)) {\n characterFormat.localeIdBidi = sourceFormat.localeIdBidi;\n }\n }\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseParagraphFormat = function (sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.borders)) {\n this.parseBorders(sourceFormat.borders, paragraphFormat.borders);\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n paragraphFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n paragraphFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.rightIndent)) {\n paragraphFormat.rightIndent = sourceFormat.rightIndent;\n }\n if (!isNullOrUndefined(sourceFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = sourceFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(sourceFormat.afterSpacing)) {\n paragraphFormat.afterSpacing = sourceFormat.afterSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.beforeSpacing)) {\n paragraphFormat.beforeSpacing = sourceFormat.beforeSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.spaceBeforeAuto)) {\n paragraphFormat.spaceBeforeAuto = sourceFormat.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(sourceFormat.spaceAfterAuto)) {\n paragraphFormat.spaceAfterAuto = sourceFormat.spaceAfterAuto;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacing = sourceFormat.lineSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = sourceFormat.lineSpacingType;\n }\n else {\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacingType = 'Multiple';\n }\n }\n if (!isNullOrUndefined(sourceFormat.textAlignment)) {\n paragraphFormat.textAlignment = sourceFormat.textAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = sourceFormat.outlineLevel;\n }\n if (!isNullOrUndefined(sourceFormat.contextualSpacing)) {\n paragraphFormat.contextualSpacing = sourceFormat.contextualSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.keepWithNext)) {\n paragraphFormat.keepWithNext = sourceFormat.keepWithNext;\n }\n if (!isNullOrUndefined(sourceFormat.keepLinesTogether)) {\n paragraphFormat.keepLinesTogether = sourceFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(sourceFormat.widowControl)) {\n paragraphFormat.widowControl = sourceFormat.widowControl;\n }\n paragraphFormat.listFormat = new WListFormat(paragraphFormat);\n if (sourceFormat.hasOwnProperty('listFormat')) {\n this.parseListFormat(sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty('tabs')) {\n this.parseTabStop(sourceFormat.tabs, paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (block, listFormat) {\n if (!isNullOrUndefined(block.listFormat)) {\n if (!isNullOrUndefined(block.listFormat.listId)) {\n listFormat.listId = block.listFormat.listId;\n listFormat.list = this.documentHelper.getListById(block.listFormat.listId);\n }\n if (!isNullOrUndefined(block.listFormat.listLevelNumber)) {\n listFormat.listLevelNumber = block.listFormat.listLevelNumber;\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (data, sectionFormat) {\n if (!isNullOrUndefined(data.pageWidth)) {\n sectionFormat.pageWidth = data.pageWidth;\n }\n if (!isNullOrUndefined(data.pageHeight)) {\n sectionFormat.pageHeight = data.pageHeight;\n }\n if (!isNullOrUndefined(data.leftMargin)) {\n sectionFormat.leftMargin = data.leftMargin;\n }\n if (!isNullOrUndefined(data.topMargin)) {\n sectionFormat.topMargin = data.topMargin;\n }\n if (!isNullOrUndefined(data.rightMargin)) {\n sectionFormat.rightMargin = data.rightMargin;\n }\n if (!isNullOrUndefined(data.bottomMargin)) {\n sectionFormat.bottomMargin = data.bottomMargin;\n }\n if (!isNullOrUndefined(data.headerDistance)) {\n sectionFormat.headerDistance = data.headerDistance;\n }\n if (!isNullOrUndefined(data.footerDistance)) {\n sectionFormat.footerDistance = data.footerDistance;\n }\n if (!isNullOrUndefined(data.differentFirstPage)) {\n sectionFormat.differentFirstPage = data.differentFirstPage;\n }\n if (!isNullOrUndefined(data.differentOddAndEvenPages)) {\n sectionFormat.differentOddAndEvenPages = data.differentOddAndEvenPages;\n }\n if (!isNullOrUndefined(data.bidi)) {\n sectionFormat.bidi = data.bidi;\n }\n if (!isNullOrUndefined(data.restartPageNumbering)) {\n sectionFormat.restartPageNumbering = data.restartPageNumbering;\n }\n if (!isNullOrUndefined(data.pageStartingNumber)) {\n sectionFormat.pageStartingNumber = data.pageStartingNumber;\n }\n if (!isNullOrUndefined(data.endnoteNumberFormat)) {\n sectionFormat.endnoteNumberFormat = data.endnoteNumberFormat;\n }\n if (!isNullOrUndefined(data.footNoteNumberFormat)) {\n sectionFormat.footNoteNumberFormat = data.footNoteNumberFormat;\n }\n if (!isNullOrUndefined(data.restartIndexForFootnotes)) {\n sectionFormat.restartIndexForFootnotes = data.restartIndexForFootnotes;\n }\n if (!isNullOrUndefined(data.pageStartingNumber)) {\n sectionFormat.restartIndexForEndnotes = data.restartIndexForEndnotes;\n }\n if (!isNullOrUndefined(data.initialFootNoteNumber)) {\n sectionFormat.initialFootNoteNumber = data.initialFootNoteNumber;\n }\n if (!isNullOrUndefined(data.initialEndNoteNumber)) {\n sectionFormat.initialEndNoteNumber = data.initialEndNoteNumber;\n }\n if (!isNullOrUndefined(data.pageNumberStyle)) {\n sectionFormat.pageNumberStyle = data.pageNumberStyle;\n }\n };\n SfdtReader.prototype.parseTabStop = function (wTabs, tabs) {\n if (wTabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tabStop = new WTabStop();\n tabStop.position = wTabs[i].position;\n tabStop.tabLeader = wTabs[i].tabLeader;\n tabStop.deletePosition = wTabs[i].deletePosition;\n tabStop.tabJustification = wTabs[i].tabJustification;\n tabs.push(tabStop);\n }\n }\n };\n SfdtReader.prototype.validateImageUrl = function (imagestr) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n imagestr = imagestr.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = imagestr.length * 3 / 4;\n if (imagestr.charAt(imagestr.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (imagestr.charAt(imagestr.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the imagestr is not a base64 content\n // - the imagestr is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the imagestr uses a base64 variant (base64url for example)\n return false;\n }\n return true;\n };\n SfdtReader.prototype.containsFieldBegin = function (line) {\n var element = undefined;\n for (var i = line.children.length - 1; i >= 0; i--) {\n element = line.children[i];\n if (element instanceof FieldElementBox && element.hasFieldEnd && element.nextElement instanceof TextElementBox) {\n return element.nextElement;\n }\n else if (element instanceof FieldElementBox) {\n return undefined;\n }\n }\n return element;\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtReader.prototype.destroy = function () {\n if (this.footnotes) {\n this.footnotes.destroy();\n }\n this.footnotes = undefined;\n if (this.endnotes) {\n this.endnotes.destroy();\n }\n this.endnotes = undefined;\n if (this.editableRanges) {\n this.editableRanges.destroy();\n }\n this.editableRanges = undefined;\n if (this.commentEnds) {\n this.commentEnds.destroy();\n }\n this.commentEnds = undefined;\n if (this.commentStarts) {\n this.commentStarts.destroy();\n }\n this.commentStarts = undefined;\n if (this.commentsCollection) {\n this.commentsCollection.destroy();\n }\n this.commentsCollection = undefined;\n if (this.revisionCollection) {\n this.revisionCollection.destroy();\n }\n this.revisionCollection = undefined;\n this.documentHelper = undefined;\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../index';\nimport { Dictionary } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.customXMLItemsPath = 'customXml/item';\n this.customXMLItemsPropspath = 'customXml/itemProps';\n this.itemPropsPath = 'itemProps';\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.chartPath = 'word/charts';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n this.footnotesPath = 'word/footnotes.xml';\n this.endnotesPath = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n this.defaultEmbeddingPath = 'word/embeddings/';\n this.commentsPath = 'word/comments.xml';\n this.commentsExtendedPath = 'word/commentsExtended.xml';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n // private ThemePath: string = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n this.customXMLRelPath = 'customXml/_rels/item';\n this.excelRelationPath = 'xl/_rels/workbook.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n this.footnotesRelationPath = 'word/_rels/footnotes.xml.rels';\n this.endnotesRelationPath = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n // private TemplateContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n this.commentsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.commentsExContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml';\n this.endnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n this.footnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n this.chartsContentType = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n // private ThemeContentType: string = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n this.chartColorStyleContentType = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n this.commentsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.commentsExRelType = 'http://schemas.microsoft.com/office/2011/relationships/commentsExtended';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n this.endnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n this.footnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n this.chartRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n // private ThemeRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n this.chartColorStyleRelType = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n this.svgNamespace = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n this.cxNamespace = 'http://schemas.microsoft.com/office/drawing/2014/chartex';\n // chart\n this.c15Namespace = 'http://schemas.microsoft.com/office/drawing/2015/06/chart';\n this.c7Namespace = 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart';\n this.csNamespace = 'http://schemas.microsoft.com/office/drawing/2012/chartStyle';\n // worksheet\n this.spreadSheetNamespace = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n this.spreadSheet9 = 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.dsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/customXml';\n this.excelFiles = undefined;\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.cRelationShipId = 0;\n this.eRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.seriesCount = 0;\n this.chartStringCount = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n this.mComments = [];\n this.revisions = [];\n this.customXMLProps = [];\n this.paraID = 0;\n this.commentParaID = 0;\n this.commentParaIDInfo = {};\n this.isInsideComment = false;\n this.commentId = {};\n this.currentCommentId = 0;\n this.trackChangesId = 0;\n this.prevRevisionIds = [];\n this.isRevisionContinuous = false;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /* eslint-enable */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"svgImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mSvgImages === undefined) {\n this.mSvgImages = new Dictionary();\n }\n return this.mSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterSvgImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterSvgImages === undefined) {\n this.mHeaderFooterSvgImages = new Dictionary();\n }\n return this.mHeaderFooterSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentCharts\", {\n // Gets the collection of charts present in the document body\n get: function () {\n if (this.mDocumentCharts === undefined) {\n this.mDocumentCharts = new Dictionary();\n }\n return this.mDocumentCharts;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"endnotesFootnotes\", {\n /// Gets the Endnote and Footnote Collection\n get: function () {\n if (this.mFootEndnotesColl === undefined) {\n this.mFootEndnotesColl = new Dictionary();\n }\n return this.mFootEndnotesColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @param {string} fileName - file name\n * @returns {void}\n */\n WordExport.prototype.save = function (documentHelper, fileName) {\n var _this = this;\n this.fileName = fileName;\n this.serialize(documentHelper);\n var excelFiles = this.serializeExcelFiles();\n if (excelFiles && excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.saveInternal(fileName);\n });\n }\n else {\n this.saveInternal(fileName);\n }\n this.close();\n };\n WordExport.prototype.saveInternal = function (fileName) {\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @returns {Promise} - Return Promise\n */\n WordExport.prototype.saveAsBlob = function (documentHelper) {\n var _this = this;\n this.serialize(documentHelper);\n var excelFiles = this.serializeExcelFiles();\n /* eslint-disable */\n return new Promise(function (resolve, reject) {\n if (excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n }\n else {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n }\n });\n /* eslint-enable */\n };\n WordExport.prototype.serializeExcelFiles = function () {\n var _this = this;\n var excelFiles = this.excelFiles;\n var files = [];\n if (excelFiles && excelFiles.length > 0) {\n var _loop_1 = function (i) {\n var fileName = excelFiles.keys[i];\n var excelFile = excelFiles.get(fileName);\n var excelPromise = excelFile.saveAsBlob();\n files.push(excelPromise);\n excelPromise.then(function (blob) {\n var zipArchiveItem = new ZipArchiveItem(blob, fileName);\n _this.mArchive.addItem(zipArchiveItem);\n });\n };\n for (var i = 0; i < excelFiles.length; i++) {\n _loop_1(i);\n }\n this.excelFiles.clear();\n }\n return files;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.saveExcel = function () {\n var xlsxPath = this.defaultEmbeddingPath + 'Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.excelFiles.add(xlsxPath, this.mArchiveExcel);\n this.mArchiveExcel = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n this.fileName = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n if (this.mArchiveExcel) {\n this.mArchiveExcel.destroy();\n this.mArchiveExcel = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var document = documentHelper.owner.sfdtExportModule.write();\n this.setDocument(document);\n this.mComments = documentHelper.comments;\n this.mCustomXML = documentHelper.customXmlData;\n this.revisions = documentHelper.owner.revisions.changes;\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //comments.xml\n this.serializeComments();\n //commentsExtended.xml\n this.serializeCommentsExtended();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n // SerializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n this.serializeFootnotes();\n this.serializeEndnotes();\n //document relations\n this.serializeDocumentRelations();\n // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n this.mLists = document.lists;\n this.mAbstractLists = document.abstractLists;\n this.defCharacterFormat = document.characterFormat;\n this.defParagraphFormat = document.paragraphFormat;\n this.defaultTabWidthValue = document.defaultTabWidth;\n this.dontUseHtmlParagraphAutoSpacing = document.dontUseHTMLParagraphAutoSpacing;\n this.mStyles = document.styles;\n this.formatting = document.formatting;\n this.enforcement = document.enforcement;\n this.hashValue = document.hashValue;\n this.saltValue = document.saltValue;\n this.protectionType = document.protectionType;\n this.formFieldShading = document.formFieldShading;\n this.trackChanges = document.trackChanges;\n this.compatibilityMode = document.compatibilityMode;\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.trackChanges = undefined;\n this.customXMLProps = [];\n this.mRelationShipID = 0;\n this.eRelationShipId = 0;\n this.cRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mSvgImages) {\n this.mSvgImages.destroy();\n this.mSvgImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n if (this.mHeaderFooterSvgImages) {\n this.mHeaderFooterSvgImages.destroy();\n this.mHeaderFooterSvgImages = undefined;\n }\n if (this.mDocumentCharts) {\n this.mDocumentCharts.destroy();\n this.mDocumentCharts = undefined;\n }\n if (this.mFootEndnotesColl) {\n this.mFootEndnotesColl.destroy();\n this.mFootEndnotesColl = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document.sections.length;\n for (var i = 0; i < count; i++) {\n this.section = this.document.sections[i];\n this.lastSection = i === count - 1;\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n this.serializeBodyItems(writer, section.blocks, last);\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the comments (comments.xml)\n WordExport.prototype.serializeComments = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'comments', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentInternal(writer, this.mComments);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCommentCommonAttribute = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeCommentInternal = function (writer, comments) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n writer.writeStartElement('w', 'comment', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, this.commentId[comment.commentId].toString());\n if (comment.author && comment.author !== ' ') {\n writer.writeAttributeString('w', 'author', this.wNamespace, comment.author);\n }\n if (comment.date) {\n writer.writeAttributeString('w', 'date', this.wNamespace, comment.date);\n }\n if (comment.initial && comment.initial !== '') {\n writer.writeAttributeString('w', 'initials', this.wNamespace, comment.initial);\n }\n var blocks = this.retrieveCommentText(comment.text);\n for (var k = 0; k < blocks.length; k++) {\n this.isInsideComment = true;\n this.commentParaID++;\n this.serializeBodyItem(writer, blocks[k], true);\n this.isInsideComment = false;\n }\n if (blocks.length === 0) {\n this.isInsideComment = true;\n this.commentParaID++;\n }\n this.commentParaIDInfo[comment.commentId] = this.commentParaID;\n //}\n this.isInsideComment = false;\n //}\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentInternal(writer, comment.replyComments);\n }\n }\n };\n WordExport.prototype.retrieveCommentText = function (text) {\n var blocks = [];\n var multiText = text.split('\\n');\n multiText = multiText.filter(function (x) { return x !== ''; });\n var block = {};\n if (multiText.length === 0) {\n block.inlines = [{ text: '' }];\n blocks.push(block);\n }\n else {\n while (multiText.length > 0) {\n block.inlines = [{ text: multiText[0] }];\n blocks.push(block);\n multiText.splice(0, 1);\n }\n }\n return blocks;\n };\n // Serialize the comments (commentsExtended.xml)\n WordExport.prototype.serializeCommentsExtended = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w15', 'commentsEx', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentsExInternal(writer, this.mComments, false);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsExtendedPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCommentsExInternal = function (writer, comments, isReply) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n writer.writeStartElement('w15', 'commentEx', this.wNamespace);\n //if (comment.blocks.length > 0) {\n var syncParaID = this.commentParaIDInfo[comment.commentId];\n if (isReply) {\n var paraID = this.commentParaIDInfo[comment.ownerComment.commentId];\n writer.writeAttributeString('w15', 'paraIdParent', this.wNamespace, paraID.toString());\n }\n writer.writeAttributeString('w15', 'paraId', this.wNamespace, syncParaID.toString());\n //}\n var val = comment.done ? 1 : 0;\n writer.writeAttributeString('w15', 'done', this.wNamespace, val.toString());\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentsExInternal(writer, comment.replyComments, true);\n }\n }\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section.headersFooters) {\n this.serializeHFReference(writer, section.headersFooters);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n this.serializeSectionType(writer, 'nextPage');\n this.serializePageSetup(writer, section.sectionFormat);\n this.serializeColumns(writer);\n this.serializeFootNotesPr(writer, section.sectionFormat);\n this.serializeEndNotesPr(writer, section.sectionFormat);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section.sectionFormat !== undefined && section.sectionFormat.differentFirstPage) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n if (!isNullOrUndefined(section.sectionFormat) && section.sectionFormat.bidi) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n WordExport.prototype.serializeFootNotesPr = function (writer, section) {\n if (section.footNoteNumberFormat || section.restartIndexForFootnotes) {\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'pageBottom');\n writer.writeEndElement();\n if (section.footNoteNumberFormat !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section.footNoteNumberFormat));\n writer.writeEndElement();\n }\n if (section.restartIndexForFootnotes !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section.restartIndexForFootnotes));\n writer.writeEndElement();\n }\n if (section.initialFootNoteNumber !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section.initialFootNoteNumber).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.getFootNoteNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'UpperCaseRoman':\n patternType = 'upperRoman';\n break;\n case 'LowerCaseRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpperCaseLetter':\n patternType = 'upperLetter';\n break;\n case 'LowerCaseLetter':\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'decimal';\n break;\n }\n return patternType;\n };\n WordExport.prototype.getFootNoteNumberRestart = function (numberRestart) {\n switch (numberRestart) {\n case 'RestartForEachSection ':\n return 'eachSect';\n case 'RestartForEachPage':\n return 'eachPage';\n default:\n return 'continuous';\n }\n };\n WordExport.prototype.getPageNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'RomanUpper':\n patternType = 'upperRoman';\n break;\n case 'RomanLower':\n patternType = 'lowerRoman';\n break;\n case 'LetterUpper':\n patternType = 'upperLetter';\n break;\n case 'LetterLower':\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'Arabic';\n break;\n }\n return patternType;\n };\n // Serialize the Footnote Properties\n WordExport.prototype.serializeEndNotesPr = function (writer, section) {\n if (section.endnoteNumberFormat || section.restartIndexForEndnotes) {\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'docEnd');\n writer.writeEndElement();\n if (section.endnoteNumberFormat !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section.endnoteNumberFormat));\n writer.writeEndElement();\n }\n if (section.restartIndexForEndnotes !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section.restartIndexForEndnotes));\n writer.writeEndElement();\n }\n if (section.initialEndNoteNumber !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section.initialEndNoteNumber).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n writer.writeAttributeString(undefined, 'space', this.wNamespace, '0');\n writer.writeEndElement();\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n this.serializePageNumberType(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n if (pageSetup.restartPageNumbering) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'start', this.wNamespace, pageSetup.pageStartingNumber.toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageWidth * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageHeight * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup.topMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.rightMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.bottomMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.leftMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup.headerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup.footerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n //Serialize the page number type\n WordExport.prototype.serializePageNumberType = function (writer, pageSetup) {\n if (pageSetup.pageNumberStyle !== undefined) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'fmt', this.wNamespace, this.getPageNumberFormat(pageSetup.pageNumberStyle));\n writer.writeEndElement();\n }\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = this.section.sectionFormat.differentOddAndEvenPages;\n var hf = headersFooters.firstPageHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.firstPageFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.header;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.footer;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[i], isLastSection);\n }\n };\n // serialize the content Control\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentControl = function (writer, contentControlItem, item, isLastSection, inlines) {\n if (isNullOrUndefined(contentControlItem)) {\n throw new Error('contentCOntrol should not be undefined');\n }\n writer.writeStartElement('w', 'sdt', this.wNamespace);\n writer.writeStartElement(undefined, 'sdtPr', this.wNamespace);\n if (!isNullOrUndefined(contentControlItem)) {\n this.serializeContentProperties(writer, contentControlItem, item, isLastSection, inlines);\n }\n };\n // serialize Content Control Properties\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentProperties = function (writer, contentProperties, items, isLastSection, inlines) {\n var repeatSdt = undefined;\n if (!isNullOrUndefined(contentProperties.title)) {\n writer.writeStartElement(undefined, 'alias', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties.title);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tag', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties.tag);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.characterFormat)) {\n this.serializeCharacterFormat(writer, items.contentControlProperties.characterFormat);\n }\n // if (items.hasOwnProperty('blocks') && contentProperties.type !== 'CheckBox') {\n // this.serializeContentParagraph(writer, items);\n // }\n if (contentProperties.lockContents || contentProperties.lockContentControl) {\n writer.writeStartElement(undefined, 'lock', this.wNamespace);\n if (contentProperties.lockContentControl && contentProperties.lockContents) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtContentLocked');\n }\n else if (contentProperties.lockContentControl) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtLocked');\n }\n else if (contentProperties.lockContents) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'contentLocked');\n }\n writer.writeEndElement();\n }\n if (contentProperties.hasPlaceHolderText && isNullOrUndefined(repeatSdt)) {\n writer.writeStartElement('w', 'placeholder', undefined);\n writer.writeAttributeString('w', 'docPart', this.wNamespace, undefined);\n writer.writeEndElement();\n writer.writeStartElement('w', 'showingPlcHdr', undefined);\n writer.writeEndElement();\n }\n if (contentProperties.isTemporary) {\n writer.writeStartElement('w', 'temporary', undefined);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.appearance)) {\n writer.writeStartElement('w15', 'appearance', undefined);\n writer.writeAttributeString('w15', 'val', undefined, contentProperties.appearance.toLowerCase());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.color)) {\n writer.writeStartElement('w15', 'color', undefined);\n writer.writeAttributeString('w', 'val', undefined, this.getColor(contentProperties.color));\n writer.writeEndElement();\n }\n if (contentProperties.multiline) {\n writer.writeStartElement(undefined, 'text', this.wNamespace);\n writer.writeAttributeString('w', 'multiLine', this.wNamespace, '1');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.xmlMapping)) {\n if (contentProperties.xmlMapping.isMapped) {\n writer.writeStartElement('w', 'dataBinding', this.wNamespace);\n writer.writeAttributeString('w', 'xpath', undefined, contentProperties.xmlMapping.xPath);\n writer.writeAttributeString('w', 'storeItemID', undefined, contentProperties.xmlMapping.storeItemId);\n writer.writeEndElement();\n }\n }\n if (contentProperties.picture) {\n writer.writeStartElement('w', 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.uncheckedState || contentProperties.checkedState)) {\n writer.writeStartElement('w14', 'checkbox', undefined);\n if (contentProperties.isChecked) {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '1');\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '0');\n writer.writeEndElement();\n }\n writer.writeStartElement('w14', 'uncheckedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties.uncheckedState.value));\n writer.writeAttributeString('w14', 'font', undefined, (contentProperties.uncheckedState.font));\n writer.writeEndElement();\n writer.writeStartElement('w14', 'checkedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties.checkedState.value));\n writer.writeAttributeString('w14', 'font', undefined, contentProperties.checkedState.font);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.contentControlListItems) && contentProperties.type === 'DropDownList') {\n var dropDownLists = contentProperties.contentControlListItems;\n writer.writeStartElement(undefined, 'dropDownList', this.wNamespace);\n this.serializeContentControlList(writer, dropDownLists);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.contentControlListItems) && contentProperties.type === 'ComboBox') {\n var comboList = contentProperties.contentControlListItems;\n writer.writeStartElement(undefined, 'comboBox', this.wNamespace);\n this.serializeContentControlList(writer, comboList);\n writer.writeEndElement();\n }\n this.serializeContentControlDate(writer, contentProperties);\n if (!isNullOrUndefined(contentProperties.type)) {\n if (contentProperties.type === 'Picture') {\n writer.writeStartElement(undefined, 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n }\n writer.writeEndElement();\n writer.writeStartElement('w', 'sdtContent', this.wNamespace);\n if (inlines) {\n return;\n }\n /* eslint-disable */\n if (items.hasOwnProperty('blocks') && (isNullOrUndefined(items.cellFormat))) {\n for (var i = 0; i < items.blocks.length; i++) {\n var block = items.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n this.paragraph = block;\n this.serializeParagraph(writer, block, isLastSection);\n this.paragraph = undefined;\n }\n else if (block.hasOwnProperty('rowFormat')) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, block, mVerticalMerge);\n }\n else if (block.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, block.contentControlProperties, block, isLastSection);\n }\n else {\n var table = block;\n this.serializeTable(writer, table);\n }\n }\n }\n else if (items.hasOwnProperty('rowFormat')) {\n if (items.cells.length > 0) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, items, mVerticalMerge);\n }\n }\n else if (items.hasOwnProperty('cellFormat')) {\n var mVerticalMerge = new Dictionary();\n this.serializeCell(writer, items, mVerticalMerge);\n }\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.toUnicode = function (code) {\n var charCode = code.charCodeAt(0);\n return charCode.toString(16);\n };\n //serialize dropdown and list property\n WordExport.prototype.serializeContentControlList = function (writer, lists) {\n for (var i = 0; i < lists.length; i++) {\n writer.writeStartElement(undefined, 'listItem', this.wNamespace);\n if (!isNullOrUndefined(lists[i].displayText)) {\n writer.writeAttributeString('w', 'displayText', this.wNamespace, lists[i].displayText);\n }\n writer.writeAttributeString('w', 'value', this.wNamespace, lists[i].value);\n writer.writeEndElement();\n }\n };\n //Serialize character formatfor content control\n WordExport.prototype.serializeContentParagraph = function (writer, items) {\n for (var i = 0; i < items.blocks.length; i++) {\n var blocks = items.blocks[i];\n if (blocks.hasOwnProperty('inlines')) {\n for (var j = 0; j < blocks.inlines.length; j++) {\n var inlines = blocks.inlines[j];\n if (!isNullOrUndefined(inlines.characterFormat)) {\n this.serializeCharacterFormat(writer, inlines.characterFormat);\n }\n }\n }\n }\n };\n // serialize content control date property\n WordExport.prototype.serializeContentControlDate = function (writer, contentProperties) {\n if (contentProperties.type === 'Date') {\n writer.writeStartElement('w', 'date', this.wNamespace);\n if (!isNullOrUndefined(contentProperties.dateDisplayFormat)) {\n writer.writeStartElement('w', 'calender', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateCalendarType);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateDisplayLocale)) {\n writer.writeStartElement('w', 'lid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateDisplayLocale);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateStorageFormat)) {\n writer.writeStartElement('w', 'storeMappedDataAs', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateStorageFormat);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateCalendarType)) {\n writer.writeStartElement('w', 'dateFormat', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateDisplayFormat);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, item.contentControlProperties, item, isLastSection);\n }\n else if (item.hasOwnProperty('inlines')) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].cells.length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty('sectionFormat')\n && sec.blocks.indexOf(item) === sec.blocks.length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n writer.writeStartElement('w', 'p', this.wNamespace);\n if (this.isInsideComment) {\n writer.writeAttributeString('w14', 'paraId', undefined, this.commentParaID.toString());\n }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n this.serializeParagraphFormat(writer, paragraph.paragraphFormat, paragraph);\n }\n if (!isNullOrUndefined(paragraph.characterFormat)) {\n this.serializeCharacterFormat(writer, paragraph.characterFormat);\n }\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.prevRevisionIds = [];\n this.serializeParagraphItems(writer, paragraph.inlines);\n writer.writeEndElement(); //end of paragraph tag.\n };\n //Serialize Revision start\n WordExport.prototype.serializeRevisionStart = function (writer, item, previousNode) {\n if (item.hasOwnProperty('revisionIds')) {\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType === 0) {\n return;\n }\n if (item.hasOwnProperty('fieldType') && item.fieldType === 1) {\n return;\n }\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('bookmarkType') && (previousNode.bookmarkType === 0 && !(previousNode.name.indexOf('_Toc') >= 0) && isNullOrUndefined(item.revisionIds))) {\n return;\n }\n var ids = item.revisionIds;\n for (var i = 0; i < ids.length; i++) {\n var revision = this.retrieveRevision(ids[i]);\n if (revision.revisionType === 'Insertion') {\n this.serializeTrackChanges(writer, 'ins', revision.author, revision.date);\n }\n if (revision.revisionType === 'Deletion') {\n this.serializeTrackChanges(writer, 'del', revision.author, revision.date);\n }\n }\n }\n };\n //Serialize track changes\n WordExport.prototype.serializeTrackChanges = function (writer, type, author, date) {\n writer.writeStartElement('w', type, this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, (this.trackChangesId++).toString());\n writer.writeAttributeString('w', 'author', this.wNamespace, author);\n writer.writeAttributeString('w', 'date', this.wNamespace, date);\n };\n WordExport.prototype.retrieveRevision = function (id) {\n var matchedRevisions = [];\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.revisions[i].revisionID === id) {\n return this.revisions[i];\n }\n }\n return undefined;\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems) {\n var inlines;\n var previousNode = undefined;\n var isContinueOverride = false;\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty('contentControlProperties')) {\n inlines = true;\n this.serializeContentControl(writer, item.contentControlProperties, item, undefined, inlines);\n this.serializeParagraphItems(writer, item.inlines);\n }\n if (item.hasOwnProperty('inlines')) {\n this.serializeParagraphItems(writer, item);\n }\n this.serializeRevisionStart(writer, item, previousNode);\n var isBdo = false;\n if (item.characterFormat) {\n isBdo = !isNullOrUndefined(item.characterFormat.bdo) && item.characterFormat.bdo !== 'None';\n if (isBdo && !isContinueOverride) {\n this.serializeBiDirectionalOverride(writer, item.characterFormat);\n isContinueOverride = true;\n }\n }\n if (isContinueOverride && !isBdo) {\n writer.writeEndElement();\n isContinueOverride = false;\n }\n if (item.hasOwnProperty('fieldType')) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty('imageString')) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty('shapeId')) {\n var currentParargaph = this.paragraph;\n this.serializeShape(writer, item);\n this.paragraph = currentParargaph;\n }\n else if (item.hasOwnProperty('bookmarkType')) {\n this.serializeBookMark(writer, item);\n }\n else if (item.hasOwnProperty('editRangeId')) {\n this.serializeEditRange(writer, item);\n }\n else if (item.hasOwnProperty('chartType')) {\n this.chart = item;\n this.serializeChart(writer, item);\n // chart.xml\n this.serializeChartStructure();\n }\n else if (item.hasOwnProperty('commentCharacterType')) {\n this.serializeComment(writer, item);\n }\n else if (item.hasOwnProperty('footnoteType')) {\n this.serializeEFReference(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n //Serialize revision end\n this.serializeRevisionEnd(writer, item, previousNode);\n previousNode = item;\n if (inlines) {\n writer.writeEndElement();\n writer.writeEndElement();\n inlines = false;\n }\n }\n if (isContinueOverride) {\n writer.writeEndElement();\n }\n };\n WordExport.prototype.serializeEFReference = function (writer, item) {\n var efId = '';\n var ef = item.blocks;\n if (item.footnoteType === 'Footnote') {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n writer.writeStartElement(undefined, 'footnoteReference', this.wNamespace);\n if (this.document.footnotes.continuationNotice && this.efRelationShipId === 0) {\n this.efRelationShipId = 1;\n }\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'footnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n writer.writeStartElement(undefined, 'endnoteReference', this.wNamespace);\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'endnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.addFootnotesEndnotes = function (ef, efType, id) {\n var efColl = new Dictionary();\n this.endnotesFootnotes.add(efType, efColl);\n this.endnotesFootnotes.get(efType).add(id, ef);\n };\n WordExport.prototype.serializeEndnotesFootnote = function (writer, efType) {\n if (this.endnotesFootnotes.length === 0) {\n return;\n }\n var endnoteFootnotePath;\n var endnoteFootnoteRelsPath;\n if (!this.endnotesFootnotes.containsKey(efType)) {\n return;\n }\n var efColl = this.endnotesFootnotes.get(efType);\n var ef = undefined;\n for (var i = 0; i < efColl.keys.length; i++) {\n var id = efColl.keys[i];\n ef = efColl.get(id);\n if (efType === 'endnote') {\n endnoteFootnotePath = this.endnotesPath;\n endnoteFootnoteRelsPath = this.endnotesRelationPath;\n this.serializeInlineEndnotes(writer, ef, id);\n }\n else {\n endnoteFootnotePath = this.footnotesPath;\n endnoteFootnoteRelsPath = this.footnotesRelationPath;\n this.serializeInlineFootnotes(writer, ef, id);\n }\n }\n };\n WordExport.prototype.serializeInlineEndnotes = function (writer, endNote, id) {\n this.endNoteFootnote = endNote;\n var owner = this.blockOwner;\n this.blockOwner = endNote;\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, endNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n };\n WordExport.prototype.serializeInlineFootnotes = function (writer, footNote, id) {\n this.endNoteFootnote = footNote;\n var owner = this.blockOwner;\n this.blockOwner = footNote;\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, footNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n };\n // private footnoteXMLItem(fileIndex: number): any {\n // let writer = new XmlWriter;\n // writer.writeStartElement(undefined, 'Sources', this.wNamespace)\n // writer.writeAttributeString('xmlns', 'b', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'xmlns', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'SelectedStyle', undefined,\"\\APASixthEditionOfficeOnline.xsl\")\n // writer.writeAttributeString(undefined,'StyleName', undefined,\"APA\")\n // writer.writeAttributeString(undefined,'Version', undefined,\"6\")\n // writer.writeEndElement();\n // let itemPath: string = this.customXMLItemsPath + fileIndex + '.xml';\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, itemPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPath;\n // }\n // private footnoteXMLItemProps(itemID: string, fileIndex: number): any {\n // let writer: XmlWriter = new XmlWriter();\n // let customitemPropsPath: string = this.customXMLItemsPropspath + fileIndex + '.xml';\n // let itemPropsPath: string = this.itemPropsPath + fileIndex + '.xml';\n // writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n // writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n // writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n // writer.writeStartElement('ds','schemaRefs', this.wNamespace);\n // writer.writeStartElement('ds', 'schemaRef', this.wNamespace);\n // writer.writeAttributeString('ds','uri', undefined,'http://schemas.openxmlformats.org/officeDocument/2006/bibliography' )\n // writer.writeEndElement();\n // writer.writeEndElement();\n // writer.writeEndElement();\n // this.customXMLProps.push(customitemPropsPath);\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPropsPath;\n // }\n //Serialize the Footnote Endnotes Common Atributes\n WordExport.prototype.writeEFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'aink', undefined, 'http://schemas.microsoft.com/office/drawing/2016/ink');\n writer.writeAttributeString('xmlns', 'am3d', undefined, 'http://schemas.microsoft.com/office/drawing/2017/,odel3d');\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeFootnotes = function () {\n if (isNullOrUndefined(this.document.footnotes)) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'footnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document.footnotes.separator, true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document.footnotes.continuationSeparator, true);\n writer.writeEndElement();\n if (this.document.footnotes.continuationNotice) {\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document.footnotes.continuationNotice, true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'footnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.footnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n WordExport.prototype.serializeEndnotes = function () {\n if (isNullOrUndefined(this.document.endnotes)) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'endnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document.endnotes.separator, true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document.endnotes.continuationSeparator, true);\n writer.writeEndElement();\n if (this.document.endnotes.continuationNotice) {\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document.endnotes.continuationNotice, true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'endnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.endnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n //Serialize Revision end\n WordExport.prototype.serializeRevisionEnd = function (writer, item, previousNode) {\n if (item.hasOwnProperty('revisionIds')) {\n //skip revision end for field begin as we combine to end with field code text\n if (item.hasOwnProperty('fieldType') && item.fieldType === 0) {\n return;\n }\n //skip revision end for field result text as we need to only on field end.\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('fieldType') && (previousNode.fieldType === 2 || (previousNode.fieldType === 0 && item.text.indexOf('TOC') >= 0))) {\n return;\n }\n for (var i = 0; i < item.revisionIds.length; i++) {\n var revision = this.retrieveRevision(item.revisionIds[i]);\n if (revision.revisionType === 'Insertion' || revision.revisionType === 'Deletion') {\n writer.writeEndElement();\n }\n }\n }\n };\n // Serialize the comment\n WordExport.prototype.serializeComment = function (writer, comment) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n if (comment.commentCharacterType === 0) {\n writer.writeStartElement('w', 'commentRangeStart', this.wNamespace);\n }\n else if (comment.commentCharacterType === 1) {\n writer.writeStartElement('w', 'commentRangeEnd', this.wNamespace);\n }\n var commentId = this.commentId[comment.commentId];\n if (isNullOrUndefined(commentId)) {\n commentId = this.commentId[comment.commentId] = this.currentCommentId++;\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n if (comment.commentCharacterType === 1) {\n this.serializeCommentItems(writer, commentId);\n }\n }\n };\n WordExport.prototype.serializeCommentItems = function (writer, commentId) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement('w', 'commentReference', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBiDirectionalOverride = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'bdo', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, characterFormat.bdo.toLowerCase());\n };\n // Serialize Document Protection\n //\n WordExport.prototype.serializeEditRange = function (writer, editElement) {\n if (editElement.hasOwnProperty('editableRangeStart')) {\n writer.writeStartElement('w', 'permEnd', this.wNamespace);\n }\n else {\n writer.writeStartElement('w', 'permStart', this.wNamespace);\n if (editElement.user && editElement.user !== '') {\n writer.writeAttributeString('w', 'ed', this.wNamespace, editElement.user);\n }\n if (editElement.group && editElement.group !== '') {\n writer.writeAttributeString('w', 'edGrp', this.wNamespace, editElement.group.toLowerCase());\n }\n if (editElement.columnFirst && editElement.columnFirst !== -1) {\n writer.writeAttributeString('w', 'colFirst', this.wNamespace, editElement.columnFirst.toString());\n }\n if (editElement.columnLast && editElement.columnLast !== -1) {\n writer.writeAttributeString('w', 'colLast', this.wNamespace, editElement.columnLast.toString());\n }\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, editElement.editRangeId);\n writer.writeEndElement();\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark.name);\n var bookmarkName = bookmark.name;\n if (bookmark.bookmarkType === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n }\n else if (bookmark.bookmarkType === 1) {\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image.width >= 0 && image.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image.characterFormat);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n WordExport.prototype.serializeShape = function (writer, item) {\n if (item.width >= 0 && item.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n this.serializeDrawing(writer, item);\n writer.writeEndElement(); //end of run element\n }\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, draw) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n if (draw.hasOwnProperty('chartType')) {\n this.serializeInlineCharts(writer, draw);\n }\n else {\n if (draw.textWrappingStyle === 'Inline') {\n this.serializeInlinePictureAndShape(writer, draw);\n }\n else {\n this.serializeWrappingPictureAndShape(writer, draw);\n }\n }\n writer.writeEndElement();\n };\n // Serialize the Other Wrapping picture & Shape.\n WordExport.prototype.serializeWrappingPictureAndShape = function (writer, picture) {\n writer.writeStartElement('wp', 'anchor', this.wpNamespace);\n this.serializePictureAndShapeDistance(writer, picture);\n writer.writeAttributeString(undefined, 'simplePos', undefined, '0');\n writer.writeAttributeString(undefined, 'relativeHeight', undefined, picture.zOrderPosition ? Math.abs(picture.zOrderPosition).toString() : '0');\n var behindText = (picture.textWrappingStyle && picture.textWrappingStyle === 'Behind');\n writer.writeAttributeString(undefined, 'behindDoc', undefined, behindText ? '1' : '0');\n var lockAnchor = (picture.LockAnchor) ? '1' : '0';\n writer.writeAttributeString(undefined, 'locked', undefined, lockAnchor);\n var layoutcell = (picture.layoutInCell) ? '1' : '0';\n writer.writeAttributeString(undefined, 'layoutInCell', undefined, layoutcell);\n var allowOverlap = (picture.allowOverlap) ? '1' : '0';\n writer.writeAttributeString(undefined, 'allowOverlap', undefined, allowOverlap);\n writer.writeStartElement('wp', 'simplePos', this.wpNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('wp', 'positionH', this.wpNamespace);\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", picture.horizontalOrigin.toString()));\n if (picture.horizontalAlignment === 'None') {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var horPos = Math.round(picture.horizontalPosition * this.emusPerPoint);\n writer.writeString(horPos.toString());\n writer.writeEndElement(); //end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var horAlig = picture.horizontalAlignment.toString().toLowerCase();\n writer.writeString(horAlig);\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionH\n writer.writeStartElement('wp', 'positionV', this.wpNamespace);\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", picture.verticalOrigin.toString()));\n if (picture.verticalAlignment === 'None') {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var vertPos = Math.round(picture.verticalPosition * this.emusPerPoint);\n writer.writeString(vertPos.toString());\n writer.writeEndElement(); // end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var verAlig = picture.verticalAlignment.toString().toLowerCase();\n writer.writeString(verAlig);\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionV\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(picture.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(picture.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n if (!isNullOrUndefined(picture.imageString)) {\n // this.serializePicProperties(writer, draw);\n this.serializeShapeWrapStyle(writer, picture);\n this.serializeDrawingGraphics(writer, picture);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, picture);\n }\n writer.writeEndElement(); // end of anchor\n };\n // Serialize the inline picture & Shape.\n WordExport.prototype.serializeInlinePictureAndShape = function (writer, draw) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(draw.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(draw.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n if (!isNullOrUndefined(draw.imageString)) {\n this.serializeShapeWrapStyle(writer, draw);\n this.serializeDrawingGraphics(writer, draw);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, draw);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializePictureAndShapeDistance = function (writer, draw) {\n var top = draw.distanceTop ? Math.round(draw.distanceTop * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distT', undefined, top);\n var bottom = draw.distanceBottom ? Math.round(draw.distanceBottom * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distB', undefined, bottom);\n var left = draw.distanceLeft ? Math.round(draw.distanceLeft * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distL', undefined, left);\n var right = draw.distanceRight ? Math.round(draw.distanceRight * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distR', undefined, right);\n };\n WordExport.prototype.writeDefaultDistAttribute = function (writer) {\n writer.writeAttributeString(undefined, 'distT', undefined, '0');\n writer.writeAttributeString(undefined, 'distB', undefined, '0');\n writer.writeAttributeString(undefined, 'distL', undefined, '0');\n writer.writeAttributeString(undefined, 'distR', undefined, '0');\n };\n // serialize inline chart\n WordExport.prototype.serializeInlineCharts = function (writer, item) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(item.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(item.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement(); // end of wp:extend\n writer.writeStartElement(undefined, 'effectExtent', this.wpNamespace);\n writer.writeAttributeString(undefined, 'l', undefined, '0');\n writer.writeAttributeString(undefined, 't', undefined, '0');\n writer.writeAttributeString(undefined, 'r', undefined, '0');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeEndElement(); // end of wp: effectExtent\n this.serializeDrawingGraphicsChart(writer, item);\n writer.writeEndElement(); // end of inline\n };\n // Serialize the graphics element for chart.\n WordExport.prototype.serializeDrawingGraphicsChart = function (writer, chart) {\n var id = '';\n id = this.updatechartId(chart);\n // Processing chart\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, this.getNextChartName());\n writer.writeEndElement(); // end of wp docPr\n writer.writeStartElement('wp', 'cNvGraphicFramePr', this.wpNamespace);\n writer.writeEndElement(); // end of cNvGraphicFramePr\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.chartNamespace);\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('r', 'id', undefined, id);\n writer.writeEndElement(); // end of chart\n writer.writeEndElement(); // end of graphic data\n writer.writeEndElement(); // end of graphic\n };\n WordExport.prototype.getNextChartName = function () {\n return 'Chart' + (++this.chartCount);\n };\n // serialize chart\n WordExport.prototype.serializeChart = function (writer, chart) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, chart.characterFormat);\n this.serializeDrawing(writer, chart);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartStructure = function () {\n this.serializeChartXML();\n this.serializeChartColors();\n this.serializeChartExcelData();\n this.serializeChartRelations();\n this.chart = undefined;\n this.saveExcel();\n };\n // serialize Chart.xml\n WordExport.prototype.serializeChartXML = function () {\n var chartPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement('c', 'chartSpace', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'c16r2', undefined, this.c15Namespace);\n this.serializeChartData(writer, this.chart);\n writer.writeStartElement('c', 'externalData', this.chartNamespace);\n writer.writeAttributeString('r', 'id', undefined, 'rId1');\n writer.writeStartElement('c', 'autoUpdate', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoUpdate\n writer.writeEndElement(); // end of externalData\n writer.writeEndElement(); // end of chartSpace\n chartPath = this.chartPath + '/chart' + this.chartCount + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // serialize chart colors.xml\n WordExport.prototype.serializeChartColors = function () {\n var writer = new XmlWriter();\n var colorPath = '';\n writer.writeStartElement('cs', 'colorStyle', this.csNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString(undefined, 'meth', undefined, 'cycle');\n writer.writeAttributeString(undefined, 'id', undefined, '10');\n this.serializeChartColor(writer);\n colorPath = this.chartPath + '/colors' + this.chartCount + '.xml';\n writer.writeEndElement(); // end of cs:colorStyle chart color\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, colorPath);\n this.mArchive.addItem(zipArchiveItem);\n colorPath = '';\n };\n WordExport.prototype.serializeChartColor = function (writer) {\n for (var i = 1; i <= 6; i++) {\n writer.writeStartElement('a', 'schemeClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'accent' + i);\n writer.writeEndElement(); // end of a:schemeClr\n }\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '20000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '40000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '30000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n };\n // serialize chart Excel Data\n WordExport.prototype.serializeChartExcelData = function () {\n if (isNullOrUndefined(this.excelFiles)) {\n this.excelFiles = new Dictionary();\n }\n this.mArchiveExcel = new ZipArchive();\n this.mArchiveExcel.compressionLevel = 'Normal';\n var type = this.chart.chartType;\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n this.serializeWorkBook();\n this.serializeSharedString(isScatterType);\n this.serializeExcelContentTypes();\n this.serializeExcelData(isScatterType);\n this.serializeExcelStyles();\n this.serializeExcelRelation();\n this.serializeExcelGeneralRelations();\n this.chartStringCount = 0;\n };\n WordExport.prototype.serializeWorkBook = function () {\n var writer = new XmlWriter();\n var workbookPath = 'xl/workbook.xml';\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'workbook', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeStartElement(undefined, 'sheets', undefined);\n writer.writeStartElement(undefined, 'sheet', undefined);\n writer.writeAttributeString(undefined, 'name', undefined, 'Sheet1');\n writer.writeAttributeString(undefined, 'sheetId', undefined, '1');\n writer.writeAttributeString('r', 'id', undefined, this.getNextExcelRelationShipID());\n writer.writeEndElement(); // end of sheet\n writer.writeEndElement(); // end of sheets\n writer.writeEndElement(); // end of workbook\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, workbookPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelStyles = function () {\n var writer = new XmlWriter();\n var stylePath = 'xl/styles.xml';\n writer.writeStartElement(undefined, 'styleSheet', undefined);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'x14ac');\n writer.writeAttributeString('xmlns', 'x14ac', undefined, 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac');\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeEndElement(); // end of styleSheet\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, stylePath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelData = function (isScatterType) {\n // excel data\n var sheetPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'worksheet', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'x14', undefined, this.spreadSheet9);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n this.serializeExcelSheet(writer, isScatterType);\n writer.writeEndElement(); // end of worksheet\n sheetPath = 'xl/worksheets' + '/sheet1.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sheetPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeSharedString = function (isScatterType) {\n var chart = this.chart;\n var writer = new XmlWriter();\n var sharedStringPath = '';\n var chartSharedString = [];\n var type = this.chart.chartType;\n var seriesLength = chart.chartSeries.length;\n for (var column = 0; column < seriesLength; column++) {\n var series = chart.chartSeries[column];\n var seriesName = series.seriesName;\n var isString = seriesName.match(/[a-z]/i);\n if (isScatterType && column === 0) {\n chartSharedString.push('X-Values');\n }\n if (isString) {\n chartSharedString.push(series.seriesName);\n this.chartStringCount++;\n }\n }\n if (type === 'Bubble') {\n chartSharedString.push('Size');\n }\n for (var row = 0; row < chart.chartCategory.length; row++) {\n var category = chart.chartCategory[row];\n var format = chart.chartPrimaryCategoryAxis.numberFormat;\n var categoryName = category.categoryXName;\n var isString = categoryName.match(/[a-z]/i);\n if (isString || format === 'm/d/yyyy') {\n chartSharedString.push(category.categoryXName);\n this.chartStringCount++;\n }\n }\n var uniqueCount = this.chartStringCount + 1;\n writer.writeStartElement(undefined, 'sst', undefined);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeAttributeString(undefined, 'count', undefined, uniqueCount.toString());\n writer.writeAttributeString(undefined, 'uniqueCount', undefined, uniqueCount.toString());\n for (var i = 0; i <= chartSharedString.length; i++) {\n writer.writeStartElement(undefined, 'si', undefined);\n writer.writeStartElement(undefined, 't', undefined);\n if (i !== chartSharedString.length) {\n writer.writeString(chartSharedString[i]);\n }\n else if (!isScatterType) {\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(' ');\n }\n writer.writeEndElement(); // end of t\n writer.writeEndElement(); // end of si\n }\n writer.writeEndElement(); // end of sst\n sharedStringPath = 'xl/sharedStrings' + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sharedStringPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // excel sheet data\n WordExport.prototype.serializeExcelSheet = function (writer, isScatterType) {\n var chart = this.chart;\n var type = 's';\n var isBubbleType = (chart.chartType === 'Bubble');\n var bubbleLength;\n var categoryLength = chart.chartCategory.length + 1;\n var format = chart.chartPrimaryCategoryAxis.numberFormat;\n var seriesLength = chart.chartSeries.length + 1;\n if (isBubbleType) {\n bubbleLength = seriesLength;\n seriesLength = seriesLength + 1;\n }\n var category = undefined;\n var series = undefined;\n var count = 0;\n writer.writeStartElement(undefined, 'sheetData', undefined);\n for (var row = 0; row < categoryLength; row++) {\n writer.writeStartElement(undefined, 'row', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, (row + 1).toString());\n for (var column = 0; column < seriesLength; column++) {\n var alphaNumeric = String.fromCharCode('A'.charCodeAt(0) + column) + (row + 1).toString();\n writer.writeStartElement(undefined, 'c', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, alphaNumeric);\n if (row !== 0 && column === 0) {\n category = chart.chartCategory[row - 1];\n var categoryName = category.categoryXName;\n var isString = categoryName.match(/[a-z]/i);\n if (isNullOrUndefined(isString) && format === 'm/d/yyyy') {\n type = 's';\n }\n else if ((!isString && !isNullOrUndefined(isString)) || isScatterType) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && column !== 0 && column !== (bubbleLength)) {\n series = chart.chartSeries[column - 1];\n var seriesName = series.seriesName;\n var isString = seriesName.match(/[a-z]/i);\n if (!isString) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && isBubbleType && column === (bubbleLength)) {\n type = 's';\n }\n else if (row === 0 && column === 0) {\n type = 's';\n }\n else {\n type = 'n';\n }\n writer.writeAttributeString(undefined, 't', undefined, type);\n writer.writeStartElement(undefined, 'v', undefined);\n if (row === 0 && column === 0 && !isScatterType) {\n writer.writeString(this.chartStringCount.toString());\n }\n else if (type === 's') {\n writer.writeString(count.toString());\n count++;\n }\n else if (row !== 0 && type !== 's' && column === 0 && column !== (bubbleLength)) {\n writer.writeString(category.categoryXName);\n }\n else if (column !== 0 && type !== 's' && row === 0 && column !== (bubbleLength)) {\n writer.writeString(series.seriesName);\n }\n else if (column !== 0 && column !== (bubbleLength)) {\n var data = category.chartData[column - 1];\n var yValue = data.yValue;\n writer.writeString(yValue.toString());\n }\n else if (isBubbleType && column === (bubbleLength)) {\n var data = category.chartData[column - 2];\n var size = data.size;\n writer.writeString(size.toString());\n }\n writer.writeEndElement(); // end of v[value]\n writer.writeEndElement(); // end of c[column]\n type = '';\n }\n writer.writeEndElement(); // end of row\n }\n writer.writeEndElement(); // end of sheetData\n };\n // excel content types\n WordExport.prototype.serializeExcelContentTypes = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeOverrideContentType(writer, 'xl/styles.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml');\n this.serializeOverrideContentType(writer, 'xl/workbook.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml');\n // this.serializeOverrideContentType(writer, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml');\n // this.serializeOverrideContentType(writer, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml');\n this.serializeOverrideContentType(writer, 'xl/sharedStrings.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml');\n this.serializeOverrideContentType(writer, 'xl/worksheets/sheet1.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml');\n writer.writeEndElement(); // end of types tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelRelation = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n var worksheetType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\n var sharedStringType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings';\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), worksheetType, 'worksheets/sheet1.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), sharedStringType, 'sharedStrings.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.excelRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.documentRelType, 'xl/workbook.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // get the next Excel relationship ID\n WordExport.prototype.getNextExcelRelationShipID = function () {\n return 'rId' + (++this.eRelationShipId);\n };\n // get the next Chart relationship ID\n WordExport.prototype.getNextChartRelationShipID = function () {\n return 'rId' + (++this.cRelationShipId);\n };\n // chart data\n WordExport.prototype.serializeChartData = function (writer, chart) {\n writer.writeStartElement('c', 'date1904', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('c', 'lang', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'en-US');\n writer.writeEndElement();\n writer.writeStartElement('c', 'roundedCorners', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('mc', 'AlternateContent', this.veNamespace);\n writer.writeStartElement('mc', 'Choice', this.veNamespace);\n writer.writeAttributeString('xmlns', 'c14', undefined, this.c7Namespace);\n writer.writeAttributeString(undefined, 'Requires', undefined, 'c14');\n writer.writeStartElement('c14', 'style', undefined);\n writer.writeAttributeString(undefined, 'val', undefined, '102');\n writer.writeEndElement(); // c14 style end\n writer.writeEndElement(); // mc:choice ened\n writer.writeStartElement('mc', 'Fallback', this.veNamespace);\n writer.writeStartElement('c', 'style', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '2');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement(); // end tag of mc alternate content\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n if (!isNullOrUndefined(this.chart.chartTitle)) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, this.chart.chartTitleArea, this.chart.chartTitle);\n writer.writeEndElement(); // end tag of title\n }\n // serialize plot area\n this.serializeChartPlotArea(writer, chart);\n writer.writeEndElement(); // end tag of chart\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'c', undefined, this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end tag of bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeEndElement(); // end tag of defRPr\n writer.writeEndElement(); // end tag of pPr\n writer.writeStartElement('a', 'endParaRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeEndElement(); // end of a:endParaRPr\n writer.writeEndElement(); // end tag of p\n writer.writeEndElement(); // end tag of txPr\n };\n // chart plot area\n /* eslint-disable */\n WordExport.prototype.serializeChartPlotArea = function (writer, chart) {\n writer.writeStartElement('c', 'autoTitleDeleted', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoTitleDeleted\n writer.writeStartElement('c', 'plotArea', this.chartNamespace);\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n writer.writeEndElement();\n // chart Type\n var serializationChartType = this.chartType(chart);\n var isPieTypeSerialization = (serializationChartType === 'pieChart' || serializationChartType === 'doughnutChart');\n var isScatterType = (serializationChartType === 'scatterChart' || serializationChartType === 'bubbleChart');\n writer.writeStartElement('c', serializationChartType, this.chartNamespace);\n if (serializationChartType === 'barChart') {\n var barDiv = '';\n if (chart.chartType === 'Column_Clustered' || chart.chartType === 'Column_Stacked'\n || chart.chartType === 'Column_Stacked_100') {\n barDiv = 'col';\n }\n else {\n barDiv = 'bar';\n }\n writer.writeStartElement('c', 'barDir', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, barDiv);\n writer.writeEndElement(); // end of barDir\n }\n if (!isPieTypeSerialization && !isScatterType) {\n var grouping = this.chartGrouping(chart.chartType);\n writer.writeStartElement('c', 'grouping', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, grouping);\n writer.writeEndElement(); // end of grouping\n }\n if (serializationChartType === 'scatterChart') {\n writer.writeStartElement('c', 'scatterStyle', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'marker');\n writer.writeEndElement(); // end of scatterStyle\n }\n writer.writeStartElement('c', 'varyColors', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:varyColors\n var valueSheet = '';\n for (var i = 0; i < chart.chartSeries.length; i++) {\n var series = chart.chartSeries[i];\n this.seriesCount = i;\n writer.writeStartElement('c', 'ser', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'order', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:order\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'strRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n var alphaNumeric = String.fromCharCode('B'.charCodeAt(0) + i);\n valueSheet = 'Sheet1!$' + alphaNumeric;\n writer.writeString(valueSheet + '$1');\n valueSheet = valueSheet + '$2:$' + alphaNumeric + '$';\n writer.writeEndElement(); // end of c:f\n writer.writeStartElement('c', 'strCache', this.chartNamespace);\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of ptCount\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, '0');\n writer.writeStartElement('c', 'v', this.chartNamespace);\n writer.writeString(series.seriesName);\n writer.writeEndElement(); // end of c:v\n writer.writeEndElement(); // end of pt\n writer.writeEndElement(); // end of strCache\n writer.writeEndElement(); // end of strRef\n writer.writeEndElement(); // end of tx\n if (chart.chartType === 'Pie' || chart.chartType === 'Doughnut') {\n this.parseChartDataPoint(writer, series);\n writer.writeStartElement('c', 'explosion', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of explosion\n }\n else if (!isScatterType) {\n this.parseChartSeriesColor(writer, series.dataPoints, serializationChartType);\n }\n if (serializationChartType === 'scatterChart') {\n var fillColor = series.dataPoints[0].fill.foreColor;\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'circle');\n writer.writeEndElement(); // end of a: symbol\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '5');\n writer.writeEndElement(); // end of a: size\n this.serializeShapeProperties(writer, fillColor, false);\n writer.writeEndElement(); // end of a: marker\n }\n if (series.dataLabel) {\n this.parseChartDataLabels(writer, series.dataLabel);\n }\n if (series.trendLines) {\n this.parseChartTrendLines(writer, series);\n }\n if (series.errorBar) {\n this.serializeChartErrorBar(writer, series);\n }\n if (serializationChartType === 'scatterChart') {\n this.serializeDefaultShapeProperties(writer);\n }\n else if (serializationChartType === 'bubbleChart') {\n this.serializeShapeProperties(writer, series.dataPoints[i].fill.foreColor, false);\n }\n var categoryType = 'cat';\n var categoryRef = 'strRef';\n var cacheType = 'strCache';\n if (serializationChartType === 'scatterChart') {\n categoryType = 'xVal';\n categoryRef = 'numRef';\n cacheType = 'numCache';\n }\n writer.writeStartElement('c', categoryType, this.chartNamespace);\n writer.writeStartElement('c', categoryRef, this.chartNamespace);\n this.serializeChartCategory(writer, chart, cacheType); // serialize chart yvalue\n writer.writeEndElement(); // end of categoryRef\n writer.writeEndElement(); // end of cat\n this.serializeChartValue(writer, valueSheet, serializationChartType);\n writer.writeEndElement(); // end of c:ser\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n if (isPieTypeSerialization) {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'bestFit');\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: showLeaderLines\n writer.writeEndElement(); // end of c: dLbls\n if (isPieTypeSerialization) {\n var series = this.chart.chartSeries[0];\n var sliceAngle = 0;\n var holeSize = 0;\n if (series.hasOwnProperty('firstSliceAngle')) {\n sliceAngle = series.firstSliceAngle;\n }\n writer.writeStartElement('c', 'firstSliceAng', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, sliceAngle.toString());\n writer.writeEndElement(); // end of c: firstSliceAng\n if (chart.chartType === 'Doughnut') {\n holeSize = series.holeSize;\n writer.writeStartElement('c', 'holeSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, holeSize.toString());\n writer.writeEndElement(); // end of c: holeSize\n }\n }\n if (serializationChartType !== 'lineChart' && !isScatterType) {\n writer.writeStartElement('c', 'gapWidth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart.gapWidth.toString());\n writer.writeEndElement(); // end of gapWidth\n writer.writeStartElement('c', 'overlap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart.overlap.toString());\n writer.writeEndElement(); // end of overlap\n }\n else if (serializationChartType !== 'bubbleChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n if (serializationChartType === 'bubbleChart') {\n writer.writeStartElement('c', 'sizeRepresents', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'area');\n writer.writeEndElement(); // end of smooth\n }\n var type = this.chart.chartType;\n if (!isPieTypeSerialization) {\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n }\n writer.writeEndElement(); // end of chart type\n var isStackedPercentage = (type === 'Column_Stacked_100' || type === 'Area_Stacked_100' ||\n type === 'Bar_Stacked_100' || type === 'Line_Stacked_100' || type === 'Line_Markers_Stacked_100');\n var format = this.chart.chartPrimaryCategoryAxis.categoryType;\n if (!isPieTypeSerialization) {\n this.serializeCategoryAxis(writer, format, isStackedPercentage);\n this.serializeValueAxis(writer, format, isStackedPercentage);\n }\n if (this.chart.hasOwnProperty('chartDataTable')) {\n var dataTable = this.chart.chartDataTable;\n var showHorzBorder = 0;\n var showVertBorder = 0;\n var showOutline = 0;\n var showKeys = 0;\n if (dataTable.showSeriesKeys) {\n showKeys = 1;\n }\n if (dataTable.hasHorzBorder) {\n showHorzBorder = 1;\n }\n if (dataTable.hasVertBorder) {\n showVertBorder = 1;\n }\n if (dataTable.hasBorders) {\n showOutline = 1;\n }\n writer.writeStartElement('c', 'dTable', this.chartNamespace);\n writer.writeStartElement('c', 'showHorzBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showHorzBorder.toString());\n writer.writeEndElement(); // end of showHorzBorder\n writer.writeStartElement('c', 'showVertBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showVertBorder.toString());\n writer.writeEndElement(); // end of showVertBorder\n writer.writeStartElement('c', 'showOutline', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showOutline.toString());\n writer.writeEndElement(); // end of showOutline\n writer.writeStartElement('c', 'showKeys', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showKeys.toString());\n writer.writeEndElement(); // end of showKeys\n writer.writeEndElement(); // end of dTable\n }\n this.serializeDefaultShapeProperties(writer);\n writer.writeEndElement(); // end of plot area\n // legend\n if (!isNullOrUndefined(this.chart.chartLegend.position)) {\n this.serializeChartLegend(writer);\n }\n writer.writeStartElement('c', 'plotVisOnly', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: plotVisOnly\n writer.writeStartElement('c', 'dispBlanksAs', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'gap');\n writer.writeEndElement(); // end of c: dispBlanksAs\n };\n WordExport.prototype.serializeChartLegend = function (writer) {\n var legendPosition = this.chartLegendPosition(this.chart.chartLegend);\n var title = this.chart.chartLegend.chartTitleArea;\n var fill = title.dataFormat.fill.foreColor;\n writer.writeStartElement('c', 'legend', this.chartNamespace);\n writer.writeStartElement('c', 'legendPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, legendPosition);\n writer.writeEndElement();\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartErrorBar = function (writer, series) {\n var errorBar = series.errorBar;\n var errorBarValueType = this.errorBarValueType(errorBar.type);\n var endStyle = 0;\n if (errorBar.endStyle !== 'Cap') {\n endStyle = 1;\n }\n writer.writeStartElement('c', 'errBars', this.chartNamespace);\n writer.writeStartElement('c', 'errBarType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar.direction.toLowerCase());\n writer.writeEndElement(); // end of c: errBarType\n writer.writeStartElement('c', 'errValType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBarValueType);\n writer.writeEndElement(); // end of c: errValType\n writer.writeStartElement('c', 'noEndCap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, endStyle.toString());\n writer.writeEndElement(); // end of c: noEndCap\n writer.writeStartElement('c', 'val', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar.numberValue.toString());\n writer.writeEndElement(); // end of c: val\n this.serializeShapeProperties(writer, '595959', true);\n writer.writeEndElement(); // end of c: errBars\n };\n WordExport.prototype.errorBarValueType = function (type) {\n var valueType = '';\n switch (type) {\n case 'StandardError':\n valueType = 'stdErr';\n break;\n case 'StandardDeviation':\n valueType = 'stdDev';\n break;\n case 'Percentage':\n valueType = 'percentage';\n break;\n case 'Fixed':\n valueType = 'fixedVal';\n break;\n default:\n valueType = 'stdErr';\n break;\n }\n return valueType;\n };\n WordExport.prototype.serializeCategoryAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var axisType = 'catAx';\n var formatCode = this.chart.chartPrimaryCategoryAxis.numberFormat;\n var type = this.chart.chartType;\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n if (format === 'Time') {\n axisType = 'dateAx';\n }\n if (isScatterType) {\n axisType = 'valAx';\n }\n writer.writeStartElement('c', axisType, this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335263360', this.chart.chartPrimaryCategoryAxis, formatCode, isStackedPercentage);\n if (!isScatterType) {\n writer.writeStartElement('c', 'auto', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of auto\n writer.writeStartElement('c', 'lblAlgn', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'ctr');\n writer.writeEndElement(); // end of lblAlgn\n writer.writeStartElement('c', 'lblOffset', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '100');\n writer.writeEndElement(); // end of lblOffset\n }\n if (format === 'Time') {\n writer.writeStartElement('c', 'baseTimeUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'days');\n writer.writeEndElement(); // end of baseTimeUnit\n }\n else if (this.chart.chartType !== 'Bubble') {\n writer.writeStartElement('c', 'noMultiLvlLbl', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of noMultiLvlLbl\n }\n writer.writeEndElement(); // end of catAx\n };\n WordExport.prototype.serializeValueAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var valueAxis = this.chart.chartPrimaryValueAxis;\n var crossBetween = 'between';\n if (format === 'Time') {\n crossBetween = 'midCat';\n }\n writer.writeStartElement('c', 'valAx', this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335265000', valueAxis, 'General', isStackedPercentage);\n writer.writeStartElement('c', 'crossBetween', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, crossBetween);\n writer.writeEndElement(); // end of crossBetween\n if (valueAxis.majorUnit !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'majorUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, valueAxis.majorUnit.toString());\n writer.writeEndElement(); // end of majorUnit\n }\n writer.writeEndElement(); // end of valAx\n };\n WordExport.prototype.serializeAxis = function (writer, axisID, axis, formatCode, isStackedPercentage) {\n var majorTickMark = 'none';\n var minorTickMark = 'none';\n var tickLabelPosition = 'nextTo';\n writer.writeStartElement('c', 'scaling', this.chartNamespace);\n writer.writeStartElement('c', 'orientation', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'minMax');\n writer.writeEndElement(); // end of orientation\n if (axis.maximumValue !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'max', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis.maximumValue.toString());\n writer.writeEndElement(); // end of max\n writer.writeStartElement('c', 'min', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis.minimumValue.toString());\n writer.writeEndElement(); // end of min\n }\n writer.writeEndElement(); // end of scaling\n writer.writeStartElement('c', 'delete', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of delete\n writer.writeStartElement('c', 'axPos', this.chartNamespace);\n if (axisID === '335265000') {\n writer.writeAttributeString(undefined, 'val', undefined, 'l');\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, 'b');\n }\n writer.writeEndElement(); // end of axPos\n if (axis.hasMajorGridLines) {\n writer.writeStartElement('c', 'majorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeEndElement(); // end of majorGridlines\n }\n if (axis.hasMinorGridLines) {\n writer.writeStartElement('c', 'minorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'F2F2F2', true);\n writer.writeEndElement(); // end of minorGridlines\n }\n if (axis.chartTitle) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, axis.chartTitleArea, axis.chartTitle);\n writer.writeEndElement(); // end tag of title\n }\n writer.writeStartElement('c', 'numFmt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'formatCode', undefined, formatCode);\n writer.writeAttributeString(undefined, 'sourceLinked', undefined, '1');\n writer.writeEndElement(); // end of numFmt\n writer.writeStartElement('c', 'majorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, majorTickMark);\n writer.writeEndElement(); // end of majorTickMark\n writer.writeStartElement('c', 'minorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, minorTickMark);\n writer.writeEndElement(); // end of minorTickMark\n writer.writeStartElement('c', 'tickLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, tickLabelPosition);\n writer.writeEndElement(); // end of tickLblPos\n if (this.chart.chartType === 'Bubble') {\n this.serializeShapeProperties(writer, 'BFBFBF', true);\n }\n else {\n this.serializeDefaultShapeProperties(writer);\n }\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of bodyPr\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, axis.fontSize, '595959', axis.fontName);\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: txPr\n writer.writeStartElement('c', 'crossAx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axisID);\n writer.writeEndElement(); // end of crossAx\n writer.writeStartElement('c', 'crosses', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'autoZero');\n writer.writeEndElement(); // end of crosses\n };\n WordExport.prototype.parseChartTrendLines = function (writer, series) {\n for (var i = 0; i < series.trendLines.length; i++) {\n var data = series.trendLines[i];\n var type = this.chartTrendLineType(data.type);\n var dispRSqr = 0;\n var dispEq = 0;\n if (data.isDisplayEquation) {\n dispEq = 1;\n }\n else if (data.isDisplayRSquared) {\n dispRSqr = 1;\n }\n var solidFill = series.dataPoints[i];\n writer.writeStartElement('c', 'trendline', this.chartNamespace);\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '19050');\n this.serializeChartSolidFill(writer, solidFill.fill.foreColor, false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'sysDot');\n writer.writeEndElement(); // end of a: prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeEndElement(); // end of c: spPr\n writer.writeStartElement('c', 'trendlineType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, type);\n writer.writeEndElement(); // end of c: trendlineType\n writer.writeStartElement('c', 'forward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.forward.toString());\n writer.writeEndElement(); // end of c: forward\n writer.writeStartElement('c', 'backward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.backward.toString());\n writer.writeEndElement(); // end of c: backward\n if (data.intercept !== 'NaN') {\n writer.writeStartElement('c', 'intercept', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.intercept.toString());\n writer.writeEndElement(); // end of c: intercept\n }\n writer.writeStartElement('c', 'dispRSqr', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispRSqr.toString());\n writer.writeEndElement(); // end of c: dispRSqr\n writer.writeStartElement('c', 'dispEq', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispEq.toString());\n writer.writeEndElement(); // end of c: dispEq\n writer.writeEndElement(); // end of c: trendline\n }\n };\n WordExport.prototype.chartTrendLineType = function (type) {\n var trendlineType = '';\n switch (type) {\n case 'Linear':\n trendlineType = 'linear';\n break;\n case 'Exponential':\n trendlineType = 'exp';\n break;\n }\n return trendlineType;\n };\n WordExport.prototype.parseChartDataLabels = function (writer, dataLabels) {\n var position = '';\n var dataLabelPosition = dataLabels.position;\n var isLegendKey = 0;\n var isBubbleSize = 0;\n var isCategoryName = 0;\n var isSeriesName = 0;\n var isValue = 0;\n var isPercentage = 0;\n var isLeaderLines = 0;\n switch (dataLabelPosition) {\n case 'Center':\n position = 'ctr';\n break;\n case 'Left':\n position = 'l';\n break;\n case 'Right':\n position = 'r';\n break;\n case 'Outside':\n position = 'outEnd';\n break;\n case 'BestFit':\n position = 'bestFit';\n break;\n case 'Bottom':\n case 'OutsideBase':\n position = 'inBase';\n break;\n case 'Inside':\n position = 'inEnd';\n break;\n case 'Above':\n position = 't';\n break;\n case 'Below':\n position = 'b';\n break;\n default:\n position = 'Automatic';\n break;\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); //end of a:bodyPr.\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); //end of a:lstStyle.\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, dataLabels.fontSize, dataLabels.fontColor, dataLabels.fontName);\n writer.writeEndElement(); //end of a:p.\n writer.writeEndElement(); //end of c:txPr.\n if (dataLabels.isLegendKey) {\n isLegendKey = 1;\n }\n else if (dataLabels.isBubbleSize) {\n isBubbleSize = 1;\n }\n else if (dataLabels.isCategoryName) {\n isCategoryName = 1;\n }\n else if (dataLabels.isSeriesName) {\n isSeriesName = 1;\n }\n else if (dataLabels.isValue) {\n isValue = 1;\n }\n else if (dataLabels.isPercentage) {\n isPercentage = 1;\n }\n else if (dataLabels.isLeaderLines) {\n isLeaderLines = 1;\n }\n if (position !== 'Automatic') {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, position);\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLegendKey.toString());\n writer.writeEndElement(); // end of showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isValue.toString());\n writer.writeEndElement(); // end of showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isCategoryName.toString());\n writer.writeEndElement(); // end of showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isSeriesName.toString());\n writer.writeEndElement(); // end of showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isPercentage.toString());\n writer.writeEndElement(); // end of showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isBubbleSize.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLeaderLines.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeEndElement(); // end of dLbls\n };\n WordExport.prototype.serializeShapeProperties = function (writer, color, isLine) {\n var chartType = this.chart.chartType;\n var isScatterType = (chartType === 'Scatter_Markers' || chartType === 'Bubble');\n // serialize shape\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (!isScatterType || isLine) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '9525');\n this.serializeChartSolidFill(writer, color, false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'solid');\n writer.writeEndElement(); // end of prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end tag of round\n writer.writeEndElement(); // end tag of ln\n }\n else if (chartType === 'Scatter_Markers') {\n this.serializeChartSolidFill(writer, color, false);\n this.serializeDefaultLineProperties(writer);\n }\n else if (chartType === 'Bubble') {\n this.serializeChartSolidFill(writer, color, true);\n this.serializeDefaultLineProperties(writer);\n }\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end tag of spPr\n };\n WordExport.prototype.serializeDefaultShapeProperties = function (writer) {\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n this.serializeDefaultLineProperties(writer);\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n };\n WordExport.prototype.serializeDefaultLineProperties = function (writer) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n };\n WordExport.prototype.serializeTextProperties = function (writer, title, chartTitleName) {\n var fill = title.dataFormat.fill.foreColor;\n var fontSize = title.fontSize * 100;\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'rich', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'rot', undefined, '0');\n writer.writeAttributeString(undefined, 'vert', undefined, 'horz');\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeStartElement('a', 'r', this.aNamespace);\n writer.writeStartElement('a', 'rPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSize.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, title.fontName);\n writer.writeEndElement(); // end of a: rPr\n writer.writeStartElement('a', 't', this.aNamespace);\n writer.writeString(chartTitleName);\n writer.writeEndElement(); // end of a:t\n writer.writeEndElement(); // end of a: r\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: rich\n writer.writeEndElement(); // end of c: tx\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n // writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: layout\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: overlay\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a: lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeEndElement(); // end of a: p\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeEndElement(); // end of c: txPr\n };\n WordExport.prototype.serializeChartTitleFont = function (writer, fontSize, fill, fontName) {\n var fontSizeCalc = fontSize * 100;\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSizeCalc.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, fontName);\n writer.writeEndElement(); // end of defRPr\n writer.writeEndElement(); // end of a: pPr\n };\n WordExport.prototype.serializeChartSolidFill = function (writer, fill, isSeriesFill) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n if (fill !== '000000') {\n writer.writeAttributeString(undefined, 'val', undefined, fill);\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, '595959');\n }\n if (this.chart.chartType === 'Bubble' && isSeriesFill) {\n writer.writeStartElement('a', 'alpha', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '75000');\n writer.writeEndElement(); // end of alpha\n }\n writer.writeEndElement(); // end of srgbClr\n writer.writeEndElement(); // end of solidFill\n };\n WordExport.prototype.serializeFont = function (writer, fontName) {\n writer.writeStartElement('a', 'latin', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:latin\n writer.writeStartElement('a', 'ea', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:ea\n writer.writeStartElement('a', 'cs', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:cs\n };\n WordExport.prototype.parseChartSeriesColor = function (writer, dataPoints, chartType) {\n for (var i = 0; i < dataPoints.length; i++) {\n var data = dataPoints[i];\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (chartType === 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '28575');\n writer.writeAttributeString(undefined, 'cap', undefined, 'rnd');\n }\n if (chartType !== 'lineChart') {\n this.serializeChartSolidFill(writer, data.fill.foreColor, true);\n }\n else {\n this.serializeChartSolidFill(writer, data.line.color, true);\n }\n if (chartType !== 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n }\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n if (chartType === 'lineChart') {\n var symbolType = 'none';\n var size = 0;\n if (this.chart.chartSeries[i].hasOwnProperty('seriesFormat')) {\n symbolType = this.chart.chartSeries[i].seriesFormat.markerStyle;\n size = this.chart.chartSeries[i].seriesFormat.markerSize;\n }\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, symbolType.toLowerCase());\n writer.writeEndElement(); // end of a: symbol\n if (this.chart.chartSeries[i].hasOwnProperty('seriesFormat')) {\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, size.toString());\n writer.writeEndElement(); // end of a: size\n }\n writer.writeEndElement(); // end of a: marker\n }\n }\n };\n WordExport.prototype.parseChartDataPoint = function (writer, series) {\n // data point\n var dataPoints = series.dataPoints;\n var points = [];\n for (var j = 0; j < dataPoints.length; j++) {\n points.push(dataPoints[j]);\n writer.writeStartElement('c', 'dPt', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, j.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'bubble3D', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:bubble3D\n this.parseChartSeriesColor(writer, points, this.chart.chartType);\n writer.writeEndElement(); // end of c:dPt\n points = [];\n }\n };\n // chart data value\n WordExport.prototype.serializeChartCategory = function (writer, chart, cacheType) {\n var chartCategory = chart.chartCategory;\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString('Sheet1!$A$2:$A$' + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', cacheType, this.chartNamespace);\n if (cacheType === 'numCache') {\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n }\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var i = 0; i < chartCategory.length; i++) {\n var category = chartCategory[i];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, i.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (category.categoryXName !== '') {\n writer.writeString(category.categoryXName);\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n writer.writeEndElement(); // end of cacheType\n };\n // chart value\n WordExport.prototype.serializeChartValue = function (writer, valueSheet, chartType) {\n var isScatterType = (chartType === 'scatterChart' || chartType === 'bubbleChart');\n var valueType = 'val';\n if (isScatterType) {\n valueType = 'yVal';\n }\n this.serializeChartYValue(writer, valueType, valueSheet);\n if (chartType === 'bubbleChart') {\n valueType = 'bubbleSize';\n valueSheet = 'Sheet1!$C$2:$C$';\n this.serializeChartYValue(writer, valueType, valueSheet);\n }\n if (chartType === 'lineChart' || chartType === 'scatterChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n };\n WordExport.prototype.serializeChartYValue = function (writer, valueType, valueSheet) {\n var chart = this.chart;\n var chartCategory = chart.chartCategory;\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', valueType, this.chartNamespace);\n writer.writeStartElement('c', 'numRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString(valueSheet + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', 'numCache', this.chartNamespace);\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var j = 0; j < chartCategoryCount; j++) {\n var category = chartCategory[j];\n for (var k = 0; k < category.chartData.length; k++) {\n if (k === this.seriesCount) {\n var chartData = category.chartData[this.seriesCount];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, j.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (valueType !== 'bubbleSize') {\n writer.writeString(chartData.yValue.toString());\n }\n else {\n writer.writeString(chartData.size.toString());\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n }\n }\n writer.writeEndElement(); // end of numCache\n writer.writeEndElement(); // end of numRef\n writer.writeEndElement(); // end of val\n };\n // chart type\n WordExport.prototype.chartType = function (chart) {\n var chartType = chart.chartType;\n switch (chartType) {\n case 'Pie':\n chartType = 'pieChart';\n break;\n case 'Doughnut':\n chartType = 'doughnutChart';\n break;\n case 'Scatter_Markers':\n chartType = 'scatterChart';\n break;\n case 'Bubble':\n chartType = 'bubbleChart';\n break;\n }\n if (chartType === 'Area' || chartType === 'Area_Stacked' || chartType === 'Area_Stacked_100') {\n chartType = 'areaChart';\n }\n if (chartType === 'Bar_Stacked_100' || chartType === 'Bar_Stacked' || chartType === 'Bar_Clustered' ||\n chartType === 'Column_Clustered' || chartType === 'Column_Stacked' || chartType === 'Column_Stacked_100') {\n chartType = 'barChart';\n }\n if (chartType === 'Line' || chartType === 'Line_Markers' || chartType === 'Line_Markers_Stacked' || chartType === 'Line_Stacked'\n || chartType === 'Line_Markers_Stacked_100' || chartType === 'Line_Stacked_100') {\n chartType = 'lineChart';\n }\n return chartType;\n };\n // chart group\n WordExport.prototype.chartGrouping = function (type) {\n var grouping = 'standard';\n if (type === 'Bar_Stacked' || type === 'Column_Stacked' || type === 'Area_Stacked'\n || type === 'Line_Stacked' || type === 'Line_Markers_Stacked') {\n grouping = 'stacked';\n }\n else if (type === 'Bar_Stacked_100' || type === 'Column_Stacked_100' ||\n type === 'Area_Stacked_100' || type === 'Line_Stacked_100' ||\n type === 'Line_Markers_Stacked_100') {\n grouping = 'percentStacked';\n }\n else if (type === 'Bar_Clustered' || type === 'Column_Clustered') {\n grouping = 'clustered';\n }\n return grouping;\n };\n // chart legend position\n WordExport.prototype.chartLegendPosition = function (chart) {\n var legendPosition = chart.position;\n switch (legendPosition) {\n case 'Top':\n legendPosition = 't';\n break;\n case 'Bottom':\n legendPosition = 'b';\n break;\n case 'Left':\n legendPosition = 'l';\n break;\n case 'Right':\n legendPosition = 'r';\n break;\n case 'Corner':\n legendPosition = 'tr';\n break;\n default:\n legendPosition = 'b';\n break;\n }\n return legendPosition;\n };\n // update the chard id\n WordExport.prototype.updatechartId = function (chart) {\n var id = '';\n if (id === '') {\n id = this.addChartRelation(this.documentCharts, chart);\n }\n return id;\n };\n // adds the chart relation.\n WordExport.prototype.addChartRelation = function (chartCollection, chart) {\n var relationId = '';\n relationId = this.getNextRelationShipID();\n chartCollection.add(relationId, chart);\n return relationId;\n };\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n WordExport.prototype.serializeShapeDrawingGraphics = function (writer, shape) {\n var val = shape.autoShapeType;\n var id = shape.shapeId;\n this.serializeShapeWrapStyle(writer, shape);\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, shape.name);\n writer.writeAttributeString(undefined, 'title', undefined, shape.title);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.wpShapeNamespace);\n writer.writeStartElement('wps', 'wsp', this.wpShapeNamespace);\n writer.writeStartElement('wps', 'cNvCnPr', this.wpShapeNamespace);\n writer.writeStartElement('a', 'cxnSpLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeShapeType', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('wps', 'spPr', this.wpShapeNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((shape.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((shape.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n if (val === 'StraightConnector') {\n writer.writeAttributeString(undefined, 'prst', undefined, 'straightConnector1');\n }\n else if (val === 'RoundedRectangle') {\n writer.writeAttributeString(undefined, 'prst', undefined, 'roundRect');\n }\n else {\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n }\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n if (shape.fillFormat && shape.fillFormat.color && shape.fillFormat.fill) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape.fillFormat.color));\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n var lineWeight = shape.lineFormat.weight ? shape.lineFormat.weight * this.emusPerPoint : this.emusPerPoint;\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, lineWeight.toString());\n if ((!isNullOrUndefined(shape.lineFormat.lineFormatType) && shape.lineFormat.lineFormatType !== 'None')\n || shape.lineFormat.line) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape.lineFormat.color));\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'headEnd', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'tailEnd', this.aNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (val === 'Rectangle' || val === 'RoundedRectangle') {\n writer.writeStartElement('wps', 'txbx', this.wpShapeNamespace);\n writer.writeStartElement(undefined, 'txbxContent', this.wNamespace);\n this.serializeBodyItems(writer, shape.textFrame.blocks, true);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeStartElement('wps', 'bodyPr', this.wpShapeNamespace);\n if (!isNullOrUndefined(shape.textFrame)) {\n var margin = void 0;\n if (shape.textFrame.leftMargin >= 0) {\n margin = Math.round(shape.textFrame.leftMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'lIns', undefined, margin);\n }\n if (shape.textFrame.topMargin >= 0) {\n margin = Math.round(shape.textFrame.topMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'tIns', undefined, margin);\n }\n if (shape.textFrame.rightMargin >= 0) {\n margin = Math.round(shape.textFrame.rightMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'rIns', undefined, margin);\n }\n if (shape.textFrame.bottomMargin >= 0) {\n margin = Math.round(shape.textFrame.bottomMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'bIns', undefined, margin);\n }\n writer.writeAttributeString(undefined, 'anchor', undefined, 't');\n writer.writeAttributeString(undefined, 'anchorCtr', undefined, '0');\n }\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeShapeWrapStyle = function (writer, shape) {\n if (shape.textWrappingStyle !== 'Inline') {\n var textWrappingStyle = 'wrapNone';\n if (shape.textWrappingStyle && shape.textWrappingStyle !== 'InFrontOfText' && shape.textWrappingStyle !== 'Behind') {\n textWrappingStyle = 'wrap' + shape.textWrappingStyle;\n if (shape.textWrappingStyle === 'Tight') {\n textWrappingStyle = 'wrap' + 'Square';\n }\n }\n writer.writeStartElement('wp', textWrappingStyle, this.wpNamespace);\n if (shape.textWrappingStyle && shape.textWrappingStyle !== 'InFrontOfText' && shape.textWrappingStyle !== 'Behind' &&\n shape.textWrappingType) {\n var wrapType = shape.textWrappingType === 'Both' ? 'bothSides' : shape.textWrappingType.toLowerCase();\n writer.writeAttributeString(undefined, 'wrapText', undefined, wrapType);\n }\n writer.writeEndElement();\n }\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n var format;\n if (picture.isMetaFile && !isNullOrUndefined(picture.metaFileImageString)) {\n format = HelperMethods.formatClippedString(picture.metaFileImageString).extension;\n if (format !== '.svg') {\n picture.imageString = picture.metaFileImageString;\n }\n }\n id = this.updateShapeId(picture, false);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n if (!isNullOrUndefined(picture.alternativeText)) {\n writer.writeAttributeString(undefined, 'descr', undefined, picture.alternativeText);\n }\n writer.writeAttributeString(undefined, 'name', undefined, !isNullOrUndefined(picture.name) ? picture.name : '');\n if (!isNullOrUndefined(picture.title))\n writer.writeAttributeString(undefined, 'title', undefined, picture.title);\n // else\n // writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(picture.imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, picture.imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n }\n }\n if (format === '.svg') {\n this.serializeBlipExtensions(writer, picture);\n }\n //End Element Blip\n writer.writeEndElement();\n if (picture.iscrop) {\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n var l = Math.round(picture.left * 1000);\n writer.writeAttributeString(undefined, 'l', undefined, l.toString());\n var t = Math.round(picture.top * 1000);\n writer.writeAttributeString(undefined, 't', undefined, t.toString());\n var r = Math.round(picture.right * 1000);\n writer.writeAttributeString(undefined, 'r', undefined, r.toString());\n var b = Math.round(picture.bottom * 1000);\n writer.writeAttributeString(undefined, 'b', undefined, b.toString());\n writer.writeEndElement();\n }\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBlipExtensions = function (writer, picture) {\n writer.writeStartElement('a', 'extLst', this.aNamespace);\n writer.writeStartElement('a', \"ext\", this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, '{96DAC541-7B7A-43D3-8B79-37D633B846F1}');\n writer.writeStartElement(\"asvg\", \"svgBlip\", this.svgNamespace);\n var id = this.updateShapeId(picture, true);\n writer.writeAttributeString(\"r\", \"embed\", undefined, id);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture, isSvgData) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture, isSvgData);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty('sectionFormat') || tOwner.hasOwnProperty('inlines')) {\n id = this.addImageRelation(!isSvgData ? this.documentImages : this.svgImages, picture);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image) {\n var relationId = '';\n // if (imageCollection.ContainsValue(imageRecord)) {\n // foreach(string key in imageCollection.keys)\n // {\n // if (imageRecord === imageCollection[key]) {\n // relationId = key;\n // break;\n // }\n // }\n // }\n // else {\n relationId = this.getNextRelationShipID();\n imageCollection.add(relationId, image);\n // }\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image, isSvgImage) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (isSvgImage) {\n if (this.headerFooterSvgImages.containsKey(headerId)) {\n headerImages = this.headerFooterSvgImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterSvgImages.add(headerId, headerImages);\n }\n }\n else {\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (table.rows.length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table.rows[0].rowFormat;\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n var mVerticalMerge = new Dictionary();\n var mHorizontalMerge = new Dictionary();\n var cellFormats = new Dictionary();\n var rows = table.rows;\n if (rows.length > 0) {\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n var row = rows[rowIndex];\n if (row.cells.length > 0) {\n if (row.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, row.contentControlProperties, row);\n continue;\n }\n var owner_1 = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n var cells = row.cells;\n var cellLength = cells.length;\n var prevColIndex = 0;\n for (var i = 0; i < cellLength; i++) {\n var cell = cells[i];\n var columnIndex = cell.columnIndex;\n if (cell.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, cell.contentControlProperties, cell);\n continue;\n }\n var cellFormat = cell.cellFormat;\n if ((columnIndex - prevColIndex) > 0) {\n var checkIndex = i === 0 ? 0 : (prevColIndex + 1);\n for (var k = checkIndex; k < columnIndex; k++) {\n if (mVerticalMerge.containsKey(k)) {\n var format = this.getMergeCellFormat(cellFormat, cellFormats.get(k), k < cell.columnIndex);\n this.serializeTableCell(writer, cell, format, false);\n mVerticalMerge.set(k, mVerticalMerge.get(k) - 1);\n if (mVerticalMerge.get(k) === 1) {\n mVerticalMerge.remove(k);\n cellFormats.remove(k);\n if (mHorizontalMerge.containsKey(k)) {\n mHorizontalMerge.remove(k);\n }\n }\n if (mHorizontalMerge.containsKey(k)) {\n prevColIndex += mHorizontalMerge.get(k) - 1;\n k += mHorizontalMerge.get(k);\n }\n }\n }\n }\n prevColIndex = columnIndex;\n if (cellFormat.rowSpan > 1) {\n mVerticalMerge.add(columnIndex, cellFormat.rowSpan);\n cellFormats.add(columnIndex, cellFormat);\n }\n this.serializeTableCell(writer, cell, cellFormat, true);\n if (cellFormat.columnSpan > 1 && cellFormat.rowSpan > 1) {\n mHorizontalMerge.add(columnIndex, cellFormat.columnSpan);\n }\n for (var j = columnIndex + 1;; j++) {\n if (mVerticalMerge.containsKey(j)) {\n var mergeFormat = this.getMergeCellFormat(cellFormat, cellFormats.get(j), j < cell.columnIndex);\n this.serializeTableCell(writer, cell, mergeFormat, false);\n mVerticalMerge.set(j, mVerticalMerge.get(j) - 1);\n prevColIndex++;\n if (mVerticalMerge.get(j) === 1) {\n mVerticalMerge.remove(j);\n cellFormats.remove(j);\n if (mHorizontalMerge.containsKey(j)) {\n mHorizontalMerge.remove(j);\n }\n }\n if (mHorizontalMerge.containsKey(j)) {\n prevColIndex += mHorizontalMerge.get(j) - 1;\n j += mHorizontalMerge.get(j);\n }\n }\n else if (!(i === (cellLength - 1) && j < table.columnCount)) {\n break;\n }\n }\n }\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner_1;\n }\n }\n }\n writer.writeEndElement();\n this.table = owner;\n };\n WordExport.prototype.getMergeCellFormat = function (cellFormat, mergedCellFormat, before) {\n var format = mergedCellFormat;\n if (before) {\n format.borders.right = cellFormat.borders.left;\n }\n else {\n format.borders.left = cellFormat.borders.right;\n }\n return format;\n };\n WordExport.prototype.serializeTableCell = function (xmlWriter, cell, cellFormat, mergeStart) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n xmlWriter.writeStartElement(undefined, 'tc', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(xmlWriter, cellFormat);\n this.serializeCellMargins(xmlWriter, cellFormat);\n xmlWriter.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(xmlWriter, cellFormat.borders, 8, false);\n xmlWriter.writeEndElement(); // end of tcBorders\n this.serializeShading(xmlWriter, cell.cellFormat.shading);\n this.serializeTableCellDirection(xmlWriter, cellFormat);\n this.serializeCellVerticalAlign(xmlWriter, cellFormat.verticalAlignment);\n if (cellFormat.columnSpan > 1) {\n var num = cellFormat.columnSpan;\n xmlWriter.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n xmlWriter.writeEndElement();\n }\n if (cellFormat.rowSpan > 1) {\n xmlWriter.writeStartElement(undefined, 'vMerge', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, mergeStart ? 'restart' : 'continue');\n xmlWriter.writeEndElement(); // end of vMerge\n }\n xmlWriter.writeEndElement(); // end of tcPr\n if (cell && cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(xmlWriter, item, false);\n itemIndex += 1;\n }\n }\n else {\n xmlWriter.writeStartElement(undefined, 'p', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pPr', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pStyle', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n xmlWriter.writeEndElement(); //end of pStyle\n xmlWriter.writeEndElement(); //end of pPr\n xmlWriter.writeEndElement(); //end of P\n }\n xmlWriter.writeEndElement(); //end of table cell 'tc' \n this.blockOwner = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table.grid.length !== 0) {\n this.serializeGridColumns(writer, table.grid);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n var mVerticalMerge = new Dictionary();\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.cells.length > 0) {\n if (row.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, row.contentControlProperties, row);\n continue;\n }\n this.serializeRow(writer, row, mVerticalMerge);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row, mVerticalMerge) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row.cells, mVerticalMerge);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n this.serializeRowMargins(writer, row.rowFormat);\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row.rowFormat.height > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row.rowFormat.heightType === 'Exactly') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row.rowFormat.heightType === 'AtLeast') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row.rowFormat.height * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row.rowFormat;\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat.gridBefore;\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat.gridAfter;\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat.gridBeforeWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat.gridAfterWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!rowFormat.allowBreakAcrossPages) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (rowFormat.isHeader) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n //serialize revision\n if (!isNullOrUndefined(rowFormat.revisionIds) && rowFormat.revisionIds.length > 0) {\n this.serializeRevisionStart(writer, rowFormat, undefined);\n this.serializeRevisionEnd(writer, rowFormat, undefined);\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells, mVerticalMerge) {\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, cells[i].contentControlProperties, cells[i]);\n continue;\n }\n this.serializeCell(writer, cells[i], mVerticalMerge);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell, mVerticalMerge) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n mVerticalMerge = this.serializeCellFormat(writer, cell.cellFormat, true, true, mVerticalMerge);\n if (cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n var increment = 1;\n // let count: number = 0;\n if (mVerticalMerge.containsKey((cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment) && this.row.cells.length === 1) {\n var length_1 = mVerticalMerge.keys[mVerticalMerge.keys.length - 1];\n while (increment <= length_1) {\n increment = this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n increment++;\n }\n }\n else {\n this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n }\n this.blockOwner = owner;\n };\n WordExport.prototype.createCellForMerge = function (writer, cell, mVerticalMerge, increment) {\n while (mVerticalMerge.containsKey((cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment)\n && (((this.row.cells.indexOf(cell) === this.row.cells.length - 1) || this.row.cells.indexOf(cell) === cell.columnIndex))\n && cell.nextNode === undefined) {\n var collKey = (cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n var endProperties = true;\n if (!isNullOrUndefined(this.spanCellFormat)) {\n endProperties = false;\n mVerticalMerge = this.serializeCellFormat(writer, this.spanCellFormat, false, endProperties, mVerticalMerge);\n }\n else {\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n endProperties = false;\n }\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n if (isNullOrUndefined(this.spanCellFormat)) {\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell.cellFormat.borders, 8, false);\n writer.writeEndElement();\n }\n if (!endProperties) {\n writer.writeEndElement();\n }\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement(); //end of P\n writer.writeEndElement(); //end of table cell 'tc' \n increment++;\n //count++;\n }\n return increment;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat, ensureMerge, endProperties, mVerticalMerge) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table.tableFormat;\n //Get the row format\n var rf = this.row.rowFormat;\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cellFormat);\n // serialize cell margins\n this.serializeCellMargins(writer, cellFormat);\n if (ensureMerge) {\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n mVerticalMerge = this.serializeCellMerge(writer, cellFormat, mVerticalMerge);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n }\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat.borders, 8, false);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell.cellFormat.shading);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat.verticalAlignment);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n if (endProperties) {\n writer.writeEndElement();\n }\n return mVerticalMerge;\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cf) {\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.percentageFactor).toString());\n }\n else if (cf.preferredWidthType === 'Auto') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat, mVerticalMerge) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell.columnIndex;\n var cellIndex = this.row.cells.indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row.cells[cellIndex - 1].columnIndex : cell.columnIndex;\n if (cell.columnIndex === cellIndex) {\n collKey = cell.columnIndex;\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell.columnIndex;\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (collKey === 0 && mVerticalMerge.containsKey(collKey)) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n }\n }\n if (cellFormat.rowSpan > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.spanCellFormat = cellFormat;\n mVerticalMerge.add(collKey, cellFormat.rowSpan - 1);\n if (cellFormat.columnSpan > 1) {\n this.mGridSpans.add(collKey, cellFormat.columnSpan);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (mVerticalMerge.containsKey(collKey) && isserialized) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n return mVerticalMerge;\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell, mVerticalMerge) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell.cellFormat.borders, 8, false);\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell.cellFormat);\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n return mVerticalMerge;\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey, mVerticalMerge) {\n if ((mVerticalMerge.get(collKey) - 1) === 0) {\n mVerticalMerge.remove(collKey);\n this.spanCellFormat = undefined;\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n mVerticalMerge.set(collKey, mVerticalMerge.get(collKey) - 1);\n }\n return mVerticalMerge;\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell.cellFormat.columnSpan > 1) {\n var num = cell.cellFormat.columnSpan;\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n case 'Bottom':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 0, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize'); \n this.serializeTablePositioning(writer, table);\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table.tableFormat);\n this.serializeCellSpacing(writer, table.tableFormat);\n this.serializeTableIndentation(writer, table.tableFormat);\n this.serializeTableMargins(writer, table.tableFormat);\n this.serializeTableBorders(writer, table.tableFormat);\n this.serializeShading(writer, table.tableFormat.shading);\n if (table.tableFormat.bidi) {\n writer.writeStartElement(undefined, 'bidiVisual', this.wNamespace);\n writer.writeEndElement();\n }\n this.serializeTblLayout(writer, table.tableFormat);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table position\n WordExport.prototype.serializeTablePositioning = function (writer, table) {\n if (table.wrapTextAround) {\n writer.writeStartElement('w', 'tblpPr', this.wNamespace);\n if (table.positioning.distanceLeft > 0) {\n var left = Math.round(table.positioning.distanceLeft * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'leftFromText', this.wNamespace, left);\n }\n if (table.positioning.distanceRight > 0) {\n var right = Math.round(table.positioning.distanceRight * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'rightFromText', this.wNamespace, right);\n }\n if (table.positioning.distanceTop > 0) {\n var top_1 = Math.round(table.positioning.distanceTop * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'topFromText', this.wNamespace, top_1);\n }\n if (table.positioning.distanceBottom > 0) {\n var bottom = Math.round(table.positioning.distanceBottom * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'bottomFromText', this.wNamespace, bottom);\n }\n if (table.positioning.verticalOrigin) {\n var verticalOrigin = table.positioning.verticalOrigin === 'Paragraph' ? 'text' : table.positioning.verticalOrigin.toLowerCase();\n writer.writeAttributeString('w', 'vertAnchor', this.wNamespace, verticalOrigin);\n }\n if (table.positioning.horizontalOrigin && table.positioning.horizontalOrigin !== 'Column') {\n writer.writeAttributeString('w', 'horzAnchor', this.wNamespace, table.positioning.horizontalOrigin.toLowerCase());\n }\n if (table.positioning.horizontalAlignment && table.positioning.horizontalAlignment !== 'Left') {\n var horizontalAlignment = table.positioning.horizontalAlignment.toLowerCase();\n writer.writeAttributeString('w', 'tblpXSpec', this.wNamespace, horizontalAlignment);\n }\n if (table.positioning.verticalAlignment && table.positioning.verticalAlignment !== 'None') {\n var verticalAlignment = table.positioning.verticalAlignment.toLowerCase();\n writer.writeAttributeString('w', 'tblpYSpec', this.wNamespace, verticalAlignment);\n }\n if (((!isNullOrUndefined(table.positioning.horizontalAlignment) && table.positioning.horizontalAlignment === 'Left')\n || !table.positioning.horizontalAlignment)\n && table.positioning.horizontalPosition > 0) {\n var horizontalPosition = Math.round(table.positioning.horizontalPosition * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpX', this.wNamespace, horizontalPosition);\n }\n if ((!table.positioning.verticalAlignment || table.positioning.verticalAlignment === 'None') && table.positioning.verticalPosition > 0) {\n var verticalPosition = Math.round(table.positioning.verticalPosition * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpY', this.wNamespace, verticalPosition);\n }\n writer.writeEndElement();\n if (!table.positioning.allowOverlap) {\n writer.writeStartElement('w', 'tblOverlap', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'never');\n writer.writeEndElement();\n }\n }\n };\n // serialize the table margin\n WordExport.prototype.serializeTableMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tblCellMar');\n };\n // serialize the row margin\n WordExport.prototype.serializeRowMargins = function (writer, format) {\n writer.writeStartElement(undefined, 'tblPrEx', this.wNamespace);\n this.serializeMargins(writer, format, 'tblCellMar');\n writer.writeEndElement();\n };\n // serialize the cell margins\n WordExport.prototype.serializeCellMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tcMar');\n };\n // serialize the table margins, row margins, cell margins\n WordExport.prototype.serializeMargins = function (writer, format, tag) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!isNullOrUndefined(format.topMargin)) {\n var topMargin = Math.round(format.topMargin * 20);\n writer.writeStartElement(undefined, 'top', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, topMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.leftMargin)) {\n var leftMargin = Math.round(format.leftMargin * 20);\n writer.writeStartElement(undefined, 'left', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, leftMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.bottomMargin)) {\n var bottomMargin = Math.round(format.bottomMargin * 20);\n writer.writeStartElement(undefined, 'bottom', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, bottomMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.rightMargin)) {\n var rightMargin = Math.round(format.rightMargin * 20);\n writer.writeStartElement(undefined, 'right', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, rightMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n if (format.backgroundColor && format.backgroundColor !== 'empty') {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format.backgroundColor));\n }\n else {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, 'auto');\n }\n if (format.foregroundColor === 'empty' || isNullOrUndefined(format.foregroundColor)) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format.foregroundColor));\n }\n if (!isNullOrUndefined(format.textureStyle)) {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format.textureStyle));\n }\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n return 'pct5';\n case 'Texture10Percent':\n return 'pct10';\n case 'Texture12Pt5Percent':\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n return 'pct30';\n case 'Texture35Percent':\n return 'pct35';\n case 'Texture37Pt5Percent':\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n return 'pct55';\n case 'Texture60Percent':\n return 'pct60';\n case 'Texture62Pt5Percent':\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n return 'pct80';\n case 'Texture85Percent':\n return 'pct85';\n case 'Texture87Pt5Percent':\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n return 'pct95';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n return 'horzStripe';\n case 'TextureDarkVertical':\n return 'vertStripe';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n return 'thinVertStripe';\n default:\n return 'clear';\n }\n };\n //serialize the paragraph border\n WordExport.prototype.serializeParagraphBorders = function (writer, formatPara) {\n var borders = formatPara.borders;\n writer.writeStartElement(undefined, 'pBdr', this.wNamespace);\n this.serializeBorders(writer, formatPara.borders, 8, true);\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format.borders;\n // if (IsNoneBorder(borders))\n // return;\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format.borders, 8, false);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler, isParagraphBorder) {\n this.serializeBorder(writer, borders.top, 'top', multipler);\n this.serializeBorder(writer, borders.left, 'left', multipler);\n this.serializeBorder(writer, borders.bottom, 'bottom', multipler);\n this.serializeBorder(writer, borders.right, 'right', multipler);\n if (isParagraphBorder) {\n this.serializeBorder(writer, borders.horizontal, 'between', multipler);\n this.serializeBorder(writer, borders.vertical, 'bar', multipler);\n }\n else {\n this.serializeBorder(writer, borders.horizontal, 'insideH', multipler);\n this.serializeBorder(writer, borders.vertical, 'insideV', multipler);\n this.serializeBorder(writer, borders.diagonalDown, 'tl2br', multipler);\n this.serializeBorder(writer, borders.diagonalUp, 'tr2bl', multipler);\n }\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n if (!format.allowAutoFit) {\n writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n writer.writeEndElement();\n }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border.lineStyle;\n var sz = ((border.lineWidth ? border.lineWidth : 0) * multiplier);\n var space = border.space ? border.space : 0;\n if (borderStyle === 'Cleared') {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if (((borderStyle === 'None' || isNullOrUndefined(borderStyle)) && !border.hasNoneStyle) || sz <= 0) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n if (border.color) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border.color));\n }\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (border.shadow) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n return 'dotted';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n return 'dashed';\n case 'DashDotDot':\n return 'dotDotDash';\n case 'Double':\n return 'double';\n case 'ThinThickSmallGap':\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n return 'thinThickLargeGap';\n case 'ThinThickThinLargeGap':\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n return 'wave';\n case 'DoubleWavy':\n return 'doubleWave';\n case 'DashDotStroked':\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n return 'threeDEmboss';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n if (!isNullOrUndefined(format.leftIndent)) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format.leftIndent * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format.cellSpacing) && format.cellSpacing > 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal((format.cellSpacing / 2) * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table.tableFormat.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, (table.tableFormat.preferredWidth * this.percentageFactor).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table.tableFormat.preferredWidthType === 'Point') {\n var tableWidth = Math.round(table.tableFormat.preferredWidth * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format.tableAlignment) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field.characterFormat);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field.fieldType === 0 ? 'begin'\n : field.fieldType === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n if (type === 'begin' && !isNullOrUndefined(field.formFieldData)) {\n var formFieldData = field.formFieldData;\n writer.writeStartElement(undefined, 'ffData', this.wNamespace);\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.name);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'enabled', this.wNamespace);\n writer.writeEndElement();\n if (formFieldData.hasOwnProperty('textInput')) {\n writer.writeStartElement(undefined, 'textInput', this.wNamespace);\n var type_1 = formFieldData.textInput.type;\n if (type_1 === 'Number' || 'Date') {\n writer.writeStartElement(undefined, 'type', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.type == 'Calculation' ? 'calculated' : formFieldData.textInput.type.toString().toLowerCase());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'default', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.defaultValue);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'format', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.format);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else if (formFieldData.hasOwnProperty('checkBox')) {\n writer.writeStartElement(undefined, 'checkBox', this.wNamespace);\n if (formFieldData.checkBox.sizeType === 'Auto') {\n writer.writeStartElement(undefined, 'sizeAuto', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'size', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.roundToTwoDecimal(formFieldData.checkBox.size * 2).toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'defalut', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.checkBox.defaultValue ? '1' : '0');\n writer.writeEndElement();\n if (formFieldData.checkBox.checked) {\n writer.writeStartElement(undefined, 'checked', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.checkBox.checked ? '1' : '0');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'ddList', this.wNamespace);\n if (formFieldData.dropDownList.selectedIndex !== 0) {\n writer.writeStartElement(undefined, 'result', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.dropDownList.selectedIndex.toString());\n writer.writeEndElement();\n }\n for (var i = 0; i < formFieldData.dropDownList.dropDownItems.length; i++) {\n writer.writeStartElement(undefined, 'listEntry', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.dropDownList.dropDownItems[i].toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (field.fieldType === 0 && field.fieldCodeType === 'FieldFormTextInput') {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement(undefined, 'instrText', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString('FORMTEXT');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode, efType) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n if (!isNullOrUndefined(span.characterFormat)) {\n this.serializeCharacterFormat(writer, span.characterFormat);\n }\n if (span.text === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span.text === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else if (span.text === '\\f') {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'page');\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%02') {\n writer.writeStartElement(undefined, 'footnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%02' && efType === 'endnote') {\n writer.writeStartElement(undefined, 'endnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%03') {\n writer.writeStartElement(undefined, 'separator', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%04') {\n writer.writeStartElement(undefined, 'continuationSeparator', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n var isDeleteText = this.retrieveDeleteRevision(span);\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType !== 2;\n var localName = isField ? isDeleteText ? 'delInstrText' : 'instrText' : isDeleteText ? 'delText' : 't';\n writer.writeStartElement(undefined, localName, this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span.text);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n WordExport.prototype.retrieveDeleteRevision = function (span) {\n if (span.hasOwnProperty('revisionIds')) {\n if (span.revisionIds.length > 0) {\n for (var i = 0; i < span.revisionIds.length; i++) {\n if (this.retrieveRevision(span.revisionIds[i]).revisionType === 'Deletion') {\n return true;\n }\n }\n }\n }\n return false;\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph) {\n if (isNullOrUndefined(paragraphFormat)) {\n return;\n }\n this.serializeParagraphBorders(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat.styleName)) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat.styleName);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat.listFormat);\n }\n if (paragraphFormat.bidi) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.keepWithNext) && paragraphFormat.keepWithNext) {\n writer.writeStartElement(undefined, 'keepNext', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.keepLinesTogether) && paragraphFormat.keepLinesTogether) {\n writer.writeStartElement(undefined, 'keepLines', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.outlineLevel)) {\n writer.writeStartElement(undefined, 'outlineLvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getOutlineLevelValue(paragraphFormat.outlineLevel).toString());\n writer.writeEndElement();\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat.contextualSpacing)) {\n writer.writeStartElement('w', 'contextualSpacing', this.wNamespace);\n if (!paragraphFormat.contextualSpacing) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.widowControl)) {\n writer.writeStartElement('w', 'widowControl', this.wNamespace);\n if (paragraphFormat.widowControl) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '1');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat.textAlignment, paragraphFormat.bidi);\n if (!isNullOrUndefined(paragraphFormat.tabs) && paragraphFormat.tabs.length > 0) {\n this.serializeTabs(writer, paragraphFormat.tabs);\n }\n };\n WordExport.prototype.getOutlineLevelValue = function (outlineLvl) {\n if (outlineLvl.indexOf('Level') !== -1) {\n var lvlNumber = parseInt(outlineLvl.substring(5), 10);\n if (lvlNumber > 0) {\n return lvlNumber - 1;\n }\n }\n return 9;\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop.position === 0 && tabStop.deletePosition !== 0) {\n position = tabStop.deletePosition * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop.position * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop.tabJustification));\n }\n if (!isNullOrUndefined(tabStop.tabLeader) && (tabStop.tabLeader !== 'None')) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop.tabLeader));\n }\n if (!isNaN(position)) {\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n }\n writer.writeEndElement();\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n return 'dot';\n case 'Hyphen':\n return 'hyphen';\n case 'Underscore':\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n return 'bar';\n case 'Center':\n return 'center';\n case 'Decimal':\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n return 'num';\n case 'Right':\n return 'right';\n default:\n return 'clear';\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf.listId) || !isNullOrUndefined(lf.listLevelNumber)) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf.listLevelNumber) && lf.listLevelNumber !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf.listLevelNumber.toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf.listId)) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n var listId = (lf.listId + 1).toString();\n if (lf.listId === -1) {\n listId = '';\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, listId);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment, isBidi) {\n if (isBidi) {\n if (txtAlignment === 'Right') {\n txtAlignment = 'Left';\n }\n else if (txtAlignment === 'Left') {\n txtAlignment = 'Right';\n }\n }\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n alignment = 'center';\n break;\n case 'Right':\n alignment = 'right';\n break;\n case 'Justify':\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n if (!isNullOrUndefined(paragraphFormat.beforeSpacing)) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.spaceBeforeAuto)) {\n var value = (paragraphFormat.spaceBeforeAuto) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'beforeAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat.afterSpacing)) {\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.spaceAfterAuto)) {\n var value = (paragraphFormat.spaceAfterAuto) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'afterAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n if (!isNullOrUndefined(paragraphFormat.lineSpacing)) {\n var lineSpacingValue = (paragraphFormat.lineSpacingType === 'AtLeast' || paragraphFormat.lineSpacingType === 'Exactly') ? this.roundToTwoDecimal(paragraphFormat.lineSpacing * this.twentiethOfPoint) : this.roundToTwoDecimal(paragraphFormat.lineSpacing * 240);\n writer.writeAttributeString(undefined, 'line', this.wNamespace, lineSpacingValue.toString());\n }\n if (!isNullOrUndefined(paragraphFormat.lineSpacingType)) {\n var lineSpacingType = 'auto';\n if (paragraphFormat.lineSpacingType === 'AtLeast') {\n lineSpacingType = 'atLeast';\n }\n else if (paragraphFormat.lineSpacingType === 'Exactly') {\n lineSpacingType = 'exact';\n }\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, lineSpacingType);\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat.leftIndent)) {\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.leftIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.rightIndent)) {\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.rightIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n if (paragraphFormat.firstLineIndent < 0) {\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n else {\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n //creates custom xml mapping\n WordExport.prototype.serializeCustomXMLMapping = function (customXML, writer) {\n if (customXML.length > 0) {\n var keys = customXML.keys;\n for (var i = 0; i < keys.length; i++) {\n var customXmlWriter = new XmlWriter();\n customXmlWriter.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var xmlData = this.mCustomXML.get(keys[i]);\n var itemID = keys[i];\n var id = this.getNextRelationShipID();\n var fileIndex = i + 1;\n var itemPath = this.createXMLItem(xmlData, id, fileIndex);\n var itemPropsPath = this.createXMLItemProps(itemID, fileIndex);\n this.serializeRelationShip(writer, id, this.customXmlRelType, '../' + itemPath);\n this.customXMLRelation(customXmlWriter, fileIndex, itemPropsPath);\n customXmlWriter.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(customXmlWriter.buffer, this.customXMLRelPath + fileIndex + '.xml.rels');\n this.mArchive.addItem(zipArchiveItem);\n }\n }\n };\n WordExport.prototype.customXMLRelation = function (writer, fileIndex, itemPropsPath) {\n this.serializeRelationShip(writer, 'rId1', this.wordMLCustomXmlPropsRelType, itemPropsPath);\n };\n WordExport.prototype.createXMLItem = function (xmlData, id, fileIndex) {\n var xmlBlob = new Blob([xmlData], { type: 'text/plain' });\n var itemPath = this.customXMLItemsPath + fileIndex + '.xml';\n var zipArchiveItem = new ZipArchiveItem(xmlBlob, itemPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPath;\n };\n WordExport.prototype.createXMLItemProps = function (itemID, fileIndex) {\n var writer = new XmlWriter();\n var customitemPropsPath = this.customXMLItemsPropspath + fileIndex + '.xml';\n var itemPropsPath = this.itemPropsPath + fileIndex + '.xml';\n writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n writer.writeEndElement();\n this.customXMLProps.push(customitemPropsPath);\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPropsPath;\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = style.type === 'Paragraph' ? 'paragraph' : 'character';\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style.name);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.name);\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style.basedOn)) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.basedOn);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style.next)) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.next);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style.link)) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.link);\n writer.writeEndElement();\n }\n if (style.type === 'Paragraph') {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style.paragraphFormat, undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n this.serializeCharacterFormat(writer, style.characterFormat);\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat.styleName)) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat.styleName);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontFamily)) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n writer.writeAttributeString(undefined, 'ascii', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'hAnsi', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'eastAsia', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'cs', this.wNamespace, characterFormat.fontFamilyBidi);\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat.bold)) {\n this.serializeBoolProperty(writer, 'b', characterFormat.bold);\n }\n if (characterFormat.boldBidi) {\n this.serializeBoolProperty(writer, 'bCs', characterFormat.boldBidi);\n }\n if (!isNullOrUndefined(characterFormat.italic)) {\n this.serializeBoolProperty(writer, 'i', characterFormat.italic);\n }\n if (!isNullOrUndefined(characterFormat.italicBidi)) {\n this.serializeBoolProperty(writer, 'iCs', characterFormat.italicBidi);\n }\n if (characterFormat.bidi) {\n writer.writeStartElement(undefined, 'rtl', this.wNamespace);\n writer.writeEndElement();\n }\n if (characterFormat.allCaps) {\n this.serializeBoolProperty(writer, 'caps', characterFormat.allCaps);\n }\n if (!isNullOrUndefined(characterFormat.strikethrough)) {\n switch (characterFormat.strikethrough) {\n case 'SingleStrike':\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (characterFormat.fontColor === 'empty' || characterFormat.fontColor === '#00000000') {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat.fontColor));\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSize * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSizeBidi)) {\n writer.writeStartElement(undefined, 'szCs', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSizeBidi * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat.highlightColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.revisionIds) && characterFormat.revisionIds.length > 0) {\n this.serializeRevisionStart(writer, characterFormat, undefined);\n this.serializeRevisionEnd(writer, characterFormat, undefined);\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat.underline));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.baselineAlignment)) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat.baselineAlignment) {\n case 'Subscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n case 'Superscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'DotDotDashHeavy':\n return 'dashDotDotHeavy';\n case 'DotDashHeavy':\n return 'dashDotHeavy';\n case 'DashHeavy':\n return 'dashedHeavy';\n case 'DashLong':\n return 'dashLong';\n case 'DashLongHeavy':\n return 'dashLongHeavy';\n case 'DotDash':\n return 'dotDash';\n case 'DotDotDash':\n return 'dotDotDash';\n case 'Dotted':\n return 'dotted';\n case 'DottedHeavy':\n return 'dottedHeavy';\n case 'Double':\n return 'double';\n case 'Single':\n return 'single';\n case 'Thick':\n return 'thick';\n case 'Wavy':\n return 'wave';\n case 'WavyDouble':\n return 'wavyDouble';\n case 'WavyHeavy':\n return 'wavyHeavy';\n case 'Words':\n return 'words';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document.lists.length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document.abstractLists);\n this.serializeListInstances(writer, this.document.lists);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList.abstractListId.toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList.levels.length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList.levels[ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list.listId + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list.abstractListId.toString());\n writer.writeEndElement();\n for (var lvl = 0, cnt = list.levelOverrides.length; lvl < cnt; lvl++) {\n this.serializeLevelOverrides(writer, list.levelOverrides[lvl], lvl);\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel.listLevelPattern));\n writer.writeEndElement();\n // if (listLevel.restartLevel > 0) {\n // writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n // writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n // writer.writeEndElement();\n // }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel.paragraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel.characterFormat);\n writer.writeEndElement();\n };\n //Serialize the levelOverrides\n WordExport.prototype.serializeLevelOverrides = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvlOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'startOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'Arabic':\n patternType = 'decimal';\n break;\n case 'UpRoman':\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n patternType = 'lowerLetter';\n break;\n // case 'Ordinal':\n // patternType = 'ordinal';\n // break;\n // case 'Number':\n // patternType = 'cardinalText';\n // break;\n // case 'OrdinalText':\n // patternType = 'ordinalText';\n // break;\n // case 'LeadingZero':\n // patternType = 'decimalZero';\n // break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n // case 'FarEast':\n // patternType = 'aiueoFullWidth';\n // break;\n // case 'Special':\n // patternType = 'russianLower';\n // break;\n // case 'None':\n // patternType = 'none';\n // break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel.numberFormat));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel.followCharacter === 'Tab') {\n fc = 'tab';\n }\n else if (listLevel.followCharacter === 'Space') {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentProtectionSettings = function (writer) {\n writer.writeStartElement('w', 'documentProtection', this.wNamespace);\n if (this.formatting) {\n writer.writeAttributeString('w', 'formatting', this.wNamespace, '1');\n }\n if (this.protectionType && this.protectionType !== 'NoProtection') {\n var editMode = void 0;\n switch (this.protectionType) {\n case 'ReadOnly':\n editMode = 'readOnly';\n break;\n case 'FormFieldsOnly':\n editMode = 'forms';\n break;\n case 'CommentsOnly':\n editMode = 'comments';\n break;\n case 'RevisionsOnly':\n editMode = 'trackedChanges';\n break;\n }\n writer.writeAttributeString('w', 'edit', this.wNamespace, editMode);\n }\n writer.writeAttributeString('w', 'cryptProviderType', this.wNamespace, 'rsaAES');\n writer.writeAttributeString('w', 'cryptAlgorithmClass', this.wNamespace, 'hash');\n writer.writeAttributeString('w', 'cryptAlgorithmType', this.wNamespace, 'typeAny');\n writer.writeAttributeString('w', 'cryptAlgorithmSid', this.wNamespace, '14');\n writer.writeAttributeString('w', 'cryptSpinCount', this.wNamespace, '100000');\n if (this.enforcement) {\n writer.writeAttributeString('w', 'enforcement', this.wNamespace, '1');\n }\n if (this.hashValue) {\n writer.writeAttributeString('w', 'hash', this.wNamespace, this.hashValue);\n }\n if (this.saltValue) {\n writer.writeAttributeString('w', 'salt', this.wNamespace, this.saltValue);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n this.serializeDocumentProtectionSettings(writer);\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n if (this.trackChanges) {\n writer.writeStartElement(undefined, 'trackRevisions', this.wNamespace);\n writer.writeEndElement();\n }\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n if (!this.formFieldShading) {\n writer.writeStartElement(undefined, 'doNotShadeFormData', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n if (this.dontUseHtmlParagraphAutoSpacing) {\n this.serializeBoolProperty(writer, 'doNotUseHTMLParagraphAutoSpacing', this.dontUseHtmlParagraphAutoSpacing);\n }\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n var compatValue = HelperMethods.getCompatibilityModeValue(this.compatibilityMode);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, compatValue);\n writer.writeEndElement();\n writer.writeEndElement();\n if (this.document.footnotes) {\n //this.serializeFootNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n if (this.document.endnotes) {\n // this.serializeEndNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header.blocks, true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) { // || hasHFHyperlinks ||hasHFAlternateChunks\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer, false);\n if (this.headerFooterSvgImages.containsKey(hfId)) {\n this.serializeSvgImageRelation(this.headerFooterSvgImages.get(hfId), writer);\n }\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer.blocks, true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n if (this.document.endnotes) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.endnoteRelType, 'endnotes.xml');\n }\n if (this.document.footnotes) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.footnoteRelType, 'footnotes.xml');\n }\n if (this.mComments.length > 0) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsRelType, 'comments.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsExRelType, 'commentsExtended.xml');\n }\n }\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n if (this.document.lists.length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n //this.serializeFootnoteEndnoteRelations(writer);\n this.serializeHeaderFooterRelations(writer);\n //this.serializeFootnoteXMLMapping(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer, false);\n this.serializeSvgImageRelation(this.svgImages, writer);\n // serialize custom xml\n this.serializeCustomXMLMapping(this.mCustomXML, writer);\n // serialize chart relations\n this.serializeChartDocumentRelations(this.documentCharts, writer);\n this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // serialize chart relations\n WordExport.prototype.serializeChartDocumentRelations = function (charts, writer) {\n if (charts.length > 0) {\n var keys = charts.keys;\n for (var i = 1; i <= keys.length; i++) {\n this.serializeRelationShip(writer, keys[i - 1], this.chartRelType, 'charts/chart' + i + '.xml');\n }\n }\n };\n WordExport.prototype.serializeChartRelations = function () {\n var writer = new XmlWriter();\n this.resetChartRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var chartColorPath = 'colors' + this.chartCount + '.xml';\n var chartRelationPath = this.chartPath + '/_rels/chart' + this.chartCount + '.xml.rels';\n var chartExcelPath = '../embeddings/Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.packageRelType, chartExcelPath);\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.chartColorStyleRelType, chartColorPath);\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer, isSvg) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n base64ImageString = !isSvg ? mImage.imageString : mImage.metaFileImageString;\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var imageInfo = HelperMethods.formatClippedString(base64ImageString);\n var extension = imageInfo.extension;\n var formatClippedString = imageInfo.formatClippedString;\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = new Blob([this.encodedString(formatClippedString)]);\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n WordExport.prototype.serializeSvgImageRelation = function (svgImages, writer) {\n this.serializeImagesRelations(svgImages, writer, true);\n };\n /**\n * @private\n */\n WordExport.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.getEFNextRelationShipID = function () {\n return (++this.efRelationShipId).toString();\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n this.serializeOverrideContentType(writer, this.commentsPath, this.commentsContentType);\n //comments.xml\n this.serializeOverrideContentType(writer, this.commentsExtendedPath, this.commentsExContentType);\n //charts.xml\n if (this.chartCount > 0) {\n var count = 1;\n this.serializeDefaultContentType(writer, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n while (count <= this.chartCount) {\n this.serializeOverrideContentType(writer, 'word/charts/chart' + count + '.xml', this.chartsContentType);\n this.serializeOverrideContentType(writer, 'word/charts/colors' + count + '.xml', this.chartColorStyleContentType);\n count++;\n }\n }\n // Custom XML mapping\n if (this.customXMLProps.length > 0) {\n for (var i = 0; i < this.customXMLProps.length; i++) {\n this.serializeOverrideContentType(writer, this.customXMLProps[i], this.customXmlContentType);\n }\n }\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n this.SerializeEFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n WordExport.prototype.SerializeEFContentTypes = function (writer) {\n this.serializeEFContentType(writer);\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeEFContentType = function (writer) {\n var contentType;\n var partName;\n partName = this.endnotesPath;\n contentType = this.endnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n partName = this.footnotesPath;\n contentType = this.footnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.resetExcelRelationShipId = function () {\n this.eRelationShipId = 0;\n };\n WordExport.prototype.resetChartRelationShipId = function () {\n this.cRelationShipId = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","/* eslint-disable */\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n /**\n * @private\n */\n this.pageContent = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @param {string} fileName - Specified file name.\n * @return {void}\n */\n TextExport.prototype.save = function (documentHelper, fileName) {\n this.serialize(documentHelper);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * Save text document as Blob.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @return {Promise} - Returns promise object.\n */\n TextExport.prototype.saveAsBlob = function (documentHelper) {\n this.serialize(documentHelper);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (documentHelper) {\n var document = documentHelper.owner.sfdtExportModule.write();\n this.setDocument(document);\n };\n /**\n * @private\n * @param document\n */\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n /**\n * @private\n * @param streamWriter - Stream writer instance.\n * @return {void}\n */\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks, false);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body, isHeaderFooter) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara, isHeaderFooter);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara, isHeaderFooter) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isHeaderFooter || paragraph.inlines.length > 0)\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks, false);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n this.writeHeaderFooter(streamWriter, section.headersFooters.header);\n this.writeHeaderFooter(streamWriter, section.headersFooters.footer);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenFooter);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageFooter);\n };\n TextExport.prototype.writeHeaderFooter = function (streamWriter, headerFooter) {\n if (headerFooter && headerFooter.blocks) {\n this.writeBody(streamWriter, headerFooter.blocks, true);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n if (!isNullOrUndefined(writer)) {\n writer.writeLine('');\n }\n else {\n this.pageContent = this.pageContent + ' ';\n }\n };\n TextExport.prototype.writeText = function (writer, text) {\n if (!isNullOrUndefined(writer)) {\n writer.write(text);\n }\n else {\n this.pageContent += text;\n }\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WCharacterFormat } from '../format/index';\nimport { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableRowWidget, TableCellWidget, ImageElementBox, ContentControl, ListTextElementBox, BookmarkElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, ShapeElementBox, FootnoteElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n function SfdtExport(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.startLine = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.blockContent = false;\n this.startContent = false;\n this.multipleLineContent = false;\n this.nestedContent = false;\n this.editRangeId = -1;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.nestedBlockContent = false;\n this.nestedBlockEnabled = false;\n this.blocks = [];\n this.contentInline = [];\n this.isContentControl = false;\n this.isBlockClosed = true;\n /**\n * @private\n */\n this.isExport = true;\n /**\n * @private\n */\n this.isPartialExport = false;\n this.checkboxOrDropdown = false;\n /**\n * @private\n */\n this.copyWithTrackChange = false;\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(SfdtExport.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtExport.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.startLine = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.document = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.startBlock = undefined;\n this.endBlock = undefined;\n this.isPartialExport = false;\n };\n /**\n * Serialize the data as Syncfusion document text.\n *\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return JSON.stringify(this.write());\n };\n /**\n * @private\n * @param documentHelper - Specifies document helper instance.\n * @returns {Promise}\n */\n SfdtExport.prototype.saveAsBlob = function (documentHelper) {\n var sfdt = new Blob([this.serialize()], { type: 'text/plain' });\n return new Promise(function (resolve, reject) {\n resolve(sfdt);\n });\n };\n SfdtExport.prototype.updateEditRangeId = function () {\n var index = -1;\n for (var i = 0; i < this.documentHelper.editRanges.keys.length; i++) {\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys[i].length; j++) {\n var editRangeStart = this.documentHelper.editRanges.get(keys[i]);\n for (var z = 0; z < editRangeStart.length; z++) {\n index++;\n editRangeStart[z].editRangeId = index;\n editRangeStart[z].editRangeEnd.editRangeId = index;\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable */\n SfdtExport.prototype.write = function (line, startOffset, endLine, endOffset, writeInlineStyles, isExport) {\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n this.Initialize();\n this.updateEditRangeId();\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n this.isExport = false;\n if (!isNullOrUndefined(isExport)) {\n this.isExport = isExport;\n }\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n if (this.isPartialExport) {\n this.startBlock = this.getParentBlock(startPara);\n this.endBlock = this.getParentBlock(endPara);\n }\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document.sections.push(section);\n if (startCell === endCell || isNullOrUndefined(endCell)) {\n this.startLine = line;\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n if (this.endCell.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && startCell.ownerTable.associatedCell.ownerTable === this.endCell.ownerTable &&\n (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n startCell = startCell.ownerTable.associatedCell;\n }\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n var nextBlock = void 0;\n if ((startCell === endCell && !this.isPartialExport) || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section.blocks.push(paragraph);\n var lastBlock = line.paragraph;\n nextBlock = this.writeParagraph(line.paragraph, paragraph, section.blocks, line.indexInOwner, startOffset);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section.blocks);\n if (this.isPartialExport && isNullOrUndefined(nextBlock)) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n }\n // Todo:continue in next section\n }\n else {\n // Specially handled for nested table cases\n // selection start inside table and end in paragraph outside table\n if (isNullOrUndefined(endCell) && startCell.ownerTable.associatedCell) {\n var startTable = startCell.getContainerTable();\n var lastRow = startTable.childWidgets[startTable.childWidgets.length - 1];\n var endCell_1 = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n if (endCell_1.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n while (startCell.ownerTable !== endCell_1.ownerTable) {\n startCell = startCell.ownerTable.associatedCell;\n }\n }\n this.endColumnIndex = endCell_1.columnIndex + endCell_1.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n var table = this.createTable(startCell.ownerTable);\n section.blocks.push(table);\n var lastBlock = startCell.ownerTable;\n nextBlock = this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section.blocks);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section.blocks);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n }\n }\n }\n else {\n this.isExport = true;\n if (this.documentHelper.pages.length > 0) {\n var page = this.documentHelper.pages[0];\n this.writePage(page);\n }\n }\n this.writeStyles(this.documentHelper);\n this.writeLists(this.documentHelper);\n this.writeComments(this.documentHelper);\n this.writeRevisions(this.documentHelper);\n this.writeCustomXml(this.documentHelper);\n this.footnotes(this.documentHelper);\n this.endnotes(this.documentHelper);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.getNextBlock = function (nextBlock, lastBlock) {\n if (isNullOrUndefined(nextBlock) && this.isPartialExport && this.endBlock\n && !this.endBlock.equals(lastBlock)) {\n nextBlock = lastBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (nextBlock && lastBlock.bodyWidget.index !== nextBlock.bodyWidget.index) {\n var section = this.createSection(nextBlock.bodyWidget);\n this.document.sections.push(section);\n }\n else {\n nextBlock = undefined;\n }\n }\n return nextBlock;\n };\n /**\n * @private\n */\n SfdtExport.prototype.Initialize = function () {\n this.lists = [];\n this.document = {};\n this.document.sections = [];\n this.document.characterFormat = this.writeCharacterFormat(this.documentHelper.characterFormat);\n this.document.paragraphFormat = this.writeParagraphFormat(this.documentHelper.paragraphFormat);\n this.document.defaultTabWidth = this.documentHelper.defaultTabWidth;\n this.document.trackChanges = this.owner.enableTrackChanges;\n this.document.enforcement = this.documentHelper.isDocumentProtected;\n this.document.hashValue = this.documentHelper.hashValue;\n this.document.saltValue = this.documentHelper.saltValue;\n this.document.formatting = this.documentHelper.restrictFormatting;\n this.document.protectionType = this.documentHelper.protectionType;\n this.document.dontUseHTMLParagraphAutoSpacing = this.documentHelper.dontUseHtmlParagraphAutoSpacing;\n this.document.formFieldShading = this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading;\n this.document.compatibilityMode = this.documentHelper.compatibilityMode;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writePage = function (page) {\n if (page.bodyWidgets.length > 0) {\n var nextBlock = page.bodyWidgets[0];\n do {\n nextBlock = this.writeBodyWidget(nextBlock, 0);\n } while (!isNullOrUndefined(nextBlock));\n }\n return this.document;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return undefined;\n }\n var section = this.createSection(bodyWidget);\n this.document.sections.push(section);\n this.writeHeaderFooters(this.documentHelper.headersFooters[bodyWidget.index], section);\n var firstBlock = bodyWidget.childWidgets[index];\n do {\n firstBlock = this.writeBlock(firstBlock, 0, section.blocks);\n } while (firstBlock);\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n if (isNullOrUndefined(next) && !isNullOrUndefined(bodyWidget.page.nextPage) && !isNullOrUndefined(bodyWidget.page.nextPage)) {\n next = bodyWidget.page.nextPage.bodyWidgets[0];\n }\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n return next;\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n section.headersFooters.header = this.writeHeaderFooter(hfs[0]);\n section.headersFooters.footer = this.writeHeaderFooter(hfs[1]);\n section.headersFooters.evenHeader = this.writeHeaderFooter(hfs[2]);\n section.headersFooters.evenFooter = this.writeHeaderFooter(hfs[3]);\n section.headersFooters.firstPageHeader = this.writeHeaderFooter(hfs[4]);\n section.headersFooters.firstPageFooter = this.writeHeaderFooter(hfs[5]);\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget) || widget.isEmpty) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter.blocks = [];\n var firstBlock = widget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, headerFooter.blocks);\n } while (firstBlock);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section.sectionFormat = {};\n section.sectionFormat.pageWidth = bodyWidget.sectionFormat.pageWidth;\n section.sectionFormat.pageHeight = bodyWidget.sectionFormat.pageHeight;\n section.sectionFormat.leftMargin = bodyWidget.sectionFormat.leftMargin;\n section.sectionFormat.rightMargin = bodyWidget.sectionFormat.rightMargin;\n section.sectionFormat.topMargin = bodyWidget.sectionFormat.topMargin;\n section.sectionFormat.bottomMargin = bodyWidget.sectionFormat.bottomMargin;\n section.sectionFormat.differentFirstPage = bodyWidget.sectionFormat.differentFirstPage;\n section.sectionFormat.differentOddAndEvenPages = bodyWidget.sectionFormat.differentOddAndEvenPages;\n section.sectionFormat.headerDistance = bodyWidget.sectionFormat.headerDistance;\n section.sectionFormat.footerDistance = bodyWidget.sectionFormat.footerDistance;\n section.sectionFormat.bidi = bodyWidget.sectionFormat.bidi;\n if (bodyWidget.sectionFormat.restartPageNumbering) {\n section.sectionFormat.restartPageNumbering = bodyWidget.sectionFormat.restartPageNumbering;\n section.sectionFormat.pageStartingNumber = bodyWidget.sectionFormat.pageStartingNumber;\n }\n if (!isNullOrUndefined(bodyWidget.page.endnoteWidget || bodyWidget.page.footnoteWidget)) {\n section.sectionFormat.endnoteNumberFormat = bodyWidget.sectionFormat.endnoteNumberFormat;\n section.sectionFormat.footNoteNumberFormat = bodyWidget.sectionFormat.footNoteNumberFormat;\n section.sectionFormat.restartIndexForFootnotes = bodyWidget.sectionFormat.restartIndexForFootnotes;\n section.sectionFormat.restartIndexForEndnotes = bodyWidget.sectionFormat.restartIndexForEndnotes;\n section.sectionFormat.initialFootNoteNumber = bodyWidget.sectionFormat.initialFootNoteNumber;\n section.sectionFormat.initialEndNoteNumber = bodyWidget.sectionFormat.initialEndNoteNumber;\n }\n if (!isNullOrUndefined(bodyWidget.sectionFormat.pageNumberStyle)) {\n section.sectionFormat.pageNumberStyle = bodyWidget.sectionFormat.pageNumberStyle;\n }\n section.blocks = [];\n section.headersFooters = {};\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return undefined;\n }\n if (widget instanceof ParagraphWidget) {\n if (widget.hasOwnProperty('contentControlProperties')) {\n var block = this.blockContentControl(widget);\n this.blockContent = false;\n if (!isNullOrUndefined(block) && (this.isBlockClosed || !this.nestedBlockContent)) {\n this.nestedBlockEnabled = false;\n blocks.push(block);\n this.blocks = [];\n }\n return this.nextBlock;\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n return this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var tableWidget = widget;\n if (tableWidget.hasOwnProperty('contentControlProperties') && tableWidget.contentControlProperties.type !== 'BuildingBlockGallery') {\n var block = this.tableContentControl(tableWidget);\n if (!isNullOrUndefined(block) && this.isBlockClosed) {\n blocks.push(block);\n }\n return this.nextBlock;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n return this.writeTable(tableWidget, table, 0, blocks);\n }\n };\n SfdtExport.prototype.writeParagraphs = function (widget) {\n var blocks = this.blocks;\n var child = widget.childWidgets[0];\n var firstElement = child.children[0];\n var secondElement = child.children[1];\n if (firstElement instanceof ListTextElementBox || secondElement instanceof ListTextElementBox) {\n firstElement = child.children[2];\n secondElement = child.children[3];\n }\n if (this.nestedBlockEnabled) {\n blocks = [];\n }\n if ((firstElement instanceof ContentControl && secondElement instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent)) {\n var nestedBlocks = false;\n if (secondElement instanceof ContentControl) {\n if (secondElement.contentControlWidgetType === 'Block') {\n nestedBlocks = true;\n }\n }\n if ((nestedBlocks || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent && firstElement.type === 0 && secondElement instanceof ContentControl && firstElement.contentControlWidgetType === 'Block'))) {\n this.nestedBlockContent = true;\n this.nestedBlockEnabled = true;\n var block = this.blockContentControl(widget);\n if (!isNullOrUndefined(block)) {\n this.blocks.push(block);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n if (!this.nestedBlockContent && this.nestedBlockEnabled) {\n this.nestedBlockEnabled = false;\n }\n return blocks;\n };\n SfdtExport.prototype.contentControlProperty = function (contentControlPropertie) {\n var contentControlProperties = {};\n var contentControlListItems = [];\n contentControlProperties.lockContentControl = contentControlPropertie.lockContentControl;\n contentControlProperties.lockContents = contentControlPropertie.lockContents;\n contentControlProperties.tag = contentControlPropertie.tag;\n contentControlProperties.color = contentControlPropertie.color;\n contentControlProperties.title = contentControlPropertie.title;\n if (!isNullOrUndefined(contentControlPropertie.appearance)) {\n contentControlProperties.appearance = contentControlPropertie.appearance;\n }\n contentControlProperties.type = contentControlPropertie.type;\n contentControlProperties.hasPlaceHolderText = contentControlPropertie.hasPlaceHolderText;\n contentControlProperties.multiline = contentControlPropertie.multiline;\n contentControlProperties.isTemporary = contentControlPropertie.isTemporary;\n if (!isNullOrUndefined(contentControlPropertie.isChecked)) {\n contentControlProperties.isChecked = contentControlPropertie.isChecked;\n }\n if (!isNullOrUndefined(contentControlPropertie.uncheckedState)) {\n contentControlProperties.uncheckedState = this.tounCheckedState(contentControlPropertie.uncheckedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.checkedState)) {\n contentControlProperties.checkedState = this.toCheckedState(contentControlPropertie.checkedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.dateCalendarType)) {\n contentControlProperties.dateCalendarType = contentControlPropertie.dateCalendarType;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateStorageFormat)) {\n contentControlProperties.dateStorageFormat = contentControlPropertie.dateStorageFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayLocale)) {\n contentControlProperties.dateDisplayLocale = contentControlPropertie.dateDisplayLocale;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayFormat)) {\n contentControlProperties.dateDisplayFormat = contentControlPropertie.dateDisplayFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.xmlMapping)) {\n contentControlProperties.xmlMapping = contentControlPropertie.xmlMapping;\n }\n if (!isNullOrUndefined(contentControlPropertie.characterFormat)) {\n contentControlProperties.characterFormat = this.writeCharacterFormat(contentControlPropertie.characterFormat);\n }\n contentControlProperties.contentControlListItems = contentControlPropertie.contentControlListItems;\n return contentControlProperties;\n };\n SfdtExport.prototype.tounCheckedState = function (state) {\n var unCheckedState = {};\n unCheckedState.font = state.font;\n unCheckedState.value = state.value;\n return unCheckedState;\n };\n SfdtExport.prototype.toCheckedState = function (state) {\n var checkedState = {};\n checkedState.font = state.font;\n checkedState.value = state.value;\n return checkedState;\n };\n SfdtExport.prototype.blockContentControl = function (widget) {\n var block = {};\n if (widget.childWidgets.length === 0) {\n this.nextBlock = widget.nextWidget;\n return undefined;\n }\n block.blocks = this.writeParagraphs(widget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (widget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n this.nestedBlockContent = true;\n return this.blocks = block.blocks;\n }\n else {\n this.isBlockClosed = true;\n }\n }\n if (!isNullOrUndefined(block.blocks)) {\n var child = widget.childWidgets[0];\n var firstChild = child.children[0];\n var secondChild = child.children[1];\n if (firstChild instanceof ListTextElementBox || secondChild instanceof ListTextElementBox) {\n firstChild = child.children[2];\n secondChild = child.children[3];\n }\n if ((firstChild instanceof ContentControl && secondChild instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstChild instanceof ContentControl && !this.nestedBlockContent)) {\n if (!(secondChild instanceof ContentControl)) {\n block.contentControlProperties = this.contentControlProperty(firstChild.contentControlProperties);\n return block;\n }\n else if (secondChild.contentControlWidgetType === 'Block') {\n block.contentControlProperties = this.contentControlProperty(secondChild.contentControlProperties);\n }\n else {\n block.contentControlProperties = this.contentControlProperty(widget.contentControlProperties);\n }\n }\n else {\n block.contentControlProperties = this.contentControlProperty(widget.contentControlProperties);\n }\n return block;\n }\n };\n SfdtExport.prototype.tableContentControl = function (tableWidget) {\n var block = {};\n block.blocks = this.tableContentControls(tableWidget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (tableWidget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n return this.blocks = block.blocks;\n }\n else {\n this.isBlockClosed = true;\n }\n }\n block.contentControlProperties = this.contentControlProperty(tableWidget.contentControlProperties);\n return block;\n };\n SfdtExport.prototype.tableContentControls = function (tableWidget) {\n var blocks = [];\n if (!this.isBlockClosed) {\n blocks = this.blocks;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n this.nextBlock = this.writeTable(tableWidget, table, 0, blocks);\n return blocks;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph.inlines)) {\n return undefined;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n next = paragraphWidget.nextRenderedWidget;\n if (isNullOrUndefined(next) && paragraphWidget.containerWidget instanceof BodyWidget &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage) &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage.bodyWidgets)) {\n next = paragraphWidget.containerWidget.page.nextPage.bodyWidgets[0].childWidgets[0];\n }\n return (next instanceof BlockWidget && paragraphWidget.containerWidget.index === next.containerWidget.index) ? next : undefined;\n };\n SfdtExport.prototype.writeInlines = function (paragraph, line, inlines) {\n this.contentInline = [];\n var lineWidget = line;\n var isformField = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (this.isExport && this.checkboxOrDropdown) {\n if (isformField && element instanceof TextElementBox) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 2) {\n isformField = true;\n }\n }\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (element instanceof FootnoteElementBox) {\n inlines.push(this.writeInlinesFootNote(paragraph, element, line, inlines));\n continue;\n }\n if (element instanceof ContentControl || this.startContent || this.blockContent) {\n this.writeInlinesContentControl(element, line, inlines, i);\n continue;\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n if (this.isExport && element instanceof FieldElementBox && element.fieldType === 1) {\n isformField = false;\n this.checkboxOrDropdown = false;\n }\n }\n };\n SfdtExport.prototype.inlineContentControl = function (element, nextElement, inlines) {\n var inline = {};\n var nestedContentInline = [];\n if (!isNullOrUndefined(inlines)) {\n if (this.nestedContent) {\n inlines = inlines[inlines.length - 1].inlines;\n inline = this.inlineContentControls(element, inlines[inlines.length - 1].inlines);\n var nestedContentinline = this.nestedContentProperty(nextElement, inlines[inlines.length - 1]);\n if (!isNullOrUndefined(nestedContentinline)) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n this.inlineContentControls(element, inlines[inlines.length - 1].inlines);\n }\n }\n else {\n if (this.nestedContent) {\n inline.inlines = this.inlineContentControls(element, undefined, nestedContentInline);\n var nestedContentinline = this.nestedContentProperty(nextElement, inline);\n if (!isNullOrUndefined(nestedContentinline) || this.multipleLineContent) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n inline.inlines = this.inlineContentControls(element, this.contentInline);\n }\n }\n if (nextElement instanceof ContentControl && nextElement.type === 1 && !this.nestedContent) {\n if (this.multipleLineContent) {\n inlines[inlines.length - 1].contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n this.multipleLineContent = false;\n return;\n }\n else {\n inline.contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n }\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.nestedContentProperty = function (nextElement, inline, inlines) {\n if (!isNullOrUndefined(nextElement)) {\n if (nextElement.type === 1) {\n inline.contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.inlineContentControls = function (element, contentInline, nestedContentInline) {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(nestedContentInline)) {\n nestedContentInline.push(inline);\n return nestedContentInline;\n }\n contentInline.push(inline);\n return contentInline;\n };\n /* eslint-disable */\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n if (element.removedIds.length > 0) {\n for (var i = 0; i < element.removedIds.length; i++) {\n element.revisions[i] = this.documentHelper.revisionsInternal.get(element.removedIds[i]);\n }\n }\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n if (element instanceof FieldElementBox) {\n inline.fieldType = element.fieldType;\n if (element.fieldType === 0) {\n inline.hasFieldEnd = true;\n if (element.formFieldData) {\n inline.formFieldData = {};\n inline.formFieldData.name = element.formFieldData.name;\n inline.formFieldData.enabled = element.formFieldData.enabled;\n inline.formFieldData.helpText = element.formFieldData.helpText;\n inline.formFieldData.statusText = element.formFieldData.statusText;\n if (element.formFieldData instanceof TextFormField) {\n inline.formFieldData.textInput = {};\n inline.formFieldData.textInput.type = element.formFieldData.type;\n inline.formFieldData.textInput.maxLength = element.formFieldData.maxLength;\n inline.formFieldData.textInput.defaultValue = element.formFieldData.defaultValue;\n inline.formFieldData.textInput.format = element.formFieldData.format;\n }\n else if (element.formFieldData instanceof CheckBoxFormField) {\n inline.formFieldData.checkBox = {};\n this.checkboxOrDropdown = true;\n inline.formFieldData.checkBox.sizeType = element.formFieldData.sizeType;\n inline.formFieldData.checkBox.size = element.formFieldData.size;\n inline.formFieldData.checkBox.defaultValue = element.formFieldData.defaultValue;\n inline.formFieldData.checkBox.checked = element.formFieldData.checked;\n }\n else {\n inline.formFieldData.dropDownList = {};\n this.checkboxOrDropdown = true;\n inline.formFieldData.dropDownList.dropDownItems = element.formFieldData.dropdownItems;\n inline.formFieldData.dropDownList.selectedIndex = element.formFieldData.selectedIndex;\n }\n }\n }\n if (element.fieldCodeType && element.fieldCodeType !== '') {\n inline.fieldCodeType = element.fieldCodeType;\n }\n }\n else if (element instanceof ChartElementBox) {\n this.writeChart(element, inline);\n }\n else if (element instanceof ImageElementBox) {\n inline.imageString = element.imageString;\n inline.metaFileImageString = element.metaFileImageString;\n inline.isMetaFile = element.isMetaFile;\n inline.isCompressed = element.isCompressed;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.iscrop = element.isCrop;\n if (element.isCrop) {\n inline.bottom = element.bottom;\n inline.right = element.right;\n inline.left = element.left;\n inline.top = element.top;\n inline.getimagewidth = element.cropWidthScale;\n inline.getimageheight = element.cropHeightScale;\n }\n inline.name = element.name;\n inline.alternativeText = element.alternativeText;\n inline.title = element.title;\n inline.visible = element.visible;\n inline.widthScale = element.widthScale;\n inline.heightScale = element.heightScale;\n inline.verticalPosition = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline.verticalOrigin = element.verticalOrigin;\n inline.verticalAlignment = element.verticalAlignment;\n inline.horizontalPosition = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline.horizontalOrigin = element.horizontalOrigin;\n inline.horizontalAlignment = element.horizontalAlignment;\n inline.allowOverlap = element.allowOverlap;\n inline.textWrappingStyle = element.textWrappingStyle;\n inline.textWrappingType = element.textWrappingType;\n inline.layoutInCell = element.layoutInCell;\n inline.zOrderPosition = element.zOrderPosition;\n }\n else if (element instanceof BookmarkElementBox) {\n inline.bookmarkType = element.bookmarkType;\n inline.name = element.name;\n }\n else if (element instanceof TextElementBox) {\n // replacing the no break hyphen character by '-'\n if (element.text.indexOf(String.fromCharCode(30)) !== -1) {\n inline.text = element.text.replace(/\\u001e/g, '-');\n }\n else if (element.text.indexOf(String.fromCharCode(31)) !== -1) {\n inline.text = element.text.replace(/\\u001f/g, '');\n }\n else if (element.revisions.length !== 0) {\n if (!this.isExport && this.owner.enableTrackChanges && !this.isPartialExport) {\n this.copyWithTrackChange = true;\n for (var x = 0; x < element.revisions.length; x++) {\n var revision = element.revisions[x];\n if (this.selectedRevisionId.indexOf(revision.revisionID) === -1) {\n this.selectedRevisionId.push(revision.revisionID);\n }\n if (element.revisions[x].revisionType === 'Deletion') {\n element.revisions.pop();\n }\n else if (element.revisions[x].revisionType === 'Insertion') {\n element.revisions.pop();\n inline.text = element.text;\n }\n else {\n inline.text = element.text;\n }\n }\n }\n else {\n inline.text = element.text;\n }\n }\n else {\n inline.text = element.text;\n }\n }\n else if (element instanceof EditRangeStartElementBox) {\n inline.user = element.user;\n inline.group = element.group;\n inline.columnFirst = element.columnFirst;\n inline.columnLast = element.columnLast;\n inline.editRangeId = element.editRangeId.toString();\n }\n else if (element instanceof EditRangeEndElementBox) {\n inline.editableRangeStart = {\n 'user': element.editRangeStart.user,\n 'group': element.editRangeStart.group,\n 'columnFirst': element.editRangeStart.columnFirst,\n 'columnLast': element.editRangeStart.columnLast\n };\n inline.editRangeId = element.editRangeId.toString();\n }\n else if (element instanceof CommentCharacterElementBox) {\n if (!this.isExport && element.commentType === 0) {\n this.selectedCommentsId.push(element.commentId);\n }\n inline.commentCharacterType = element.commentType;\n inline.commentId = element.commentId;\n }\n else if (element instanceof ShapeElementBox) {\n this.writeShape(element, inline);\n }\n else {\n inline = undefined;\n }\n if (element.revisions.length > 0) {\n inline.revisionIds = [];\n for (var x = 0; x < element.revisions.length; x++) {\n //revisionIdes[x] = element.revisions[x];\n if (this.selectedRevisionId.indexOf(element.revisions[x].revisionID) === -1) {\n this.selectedRevisionId.push(element.revisions[x].revisionID);\n }\n inline.revisionIds.push(element.revisions[x].revisionID);\n //this.document.revisionIdes.push(inline.revisionIds)\n }\n }\n /*if(element.removedIds.length > 0){\n inline.revisionIds = [];\n for(let x:number = 0;x < element.removedIds.length; x++){\n inline.revisionIds.push(element.removedIds);\n }\n }*/\n return inline;\n };\n SfdtExport.prototype.writeShape = function (element, inline) {\n inline.shapeId = element.shapeId;\n inline.name = element.name;\n inline.alternativeText = element.alternativeText;\n inline.title = element.title;\n inline.visible = element.visible;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.widthScale = element.widthScale;\n inline.heightScale = element.heightScale;\n inline.verticalPosition = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline.verticalOrigin = element.verticalOrigin;\n inline.verticalAlignment = element.verticalAlignment;\n inline.verticalRelativePercent = element.verticalRelativePercent;\n inline.horizontalPosition = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline.horizontalOrigin = element.horizontalOrigin;\n inline.horizontalAlignment = element.horizontalAlignment;\n inline.horizontalRelativePercent = element.horizontalRelativePercent;\n inline.zOrderPosition = element.zOrderPosition;\n inline.allowOverlap = element.allowOverlap;\n inline.textWrappingStyle = element.textWrappingStyle;\n inline.textWrappingType = element.textWrappingType;\n inline.distanceBottom = HelperMethods.convertPixelToPoint(element.distanceBottom);\n inline.distanceLeft = HelperMethods.convertPixelToPoint(element.distanceLeft);\n inline.distanceRight = HelperMethods.convertPixelToPoint(element.distanceRight);\n inline.distanceTop = HelperMethods.convertPixelToPoint(element.distanceTop);\n inline.layoutInCell = element.layoutInCell;\n inline.lockAnchor = element.lockAnchor;\n inline.autoShapeType = element.autoShapeType;\n if (element.fillFormat) {\n inline.fillFormat = {};\n inline.fillFormat.color = element.fillFormat.color;\n inline.fillFormat.fill = element.fillFormat.fill;\n }\n if (element.lineFormat) {\n inline.lineFormat = {};\n inline.lineFormat.lineFormatType = element.lineFormat.lineFormatType;\n inline.lineFormat.color = element.lineFormat.color;\n inline.lineFormat.weight = element.lineFormat.weight;\n inline.lineFormat.lineStyle = element.lineFormat.dashStyle;\n inline.lineFormat.line = element.lineFormat.line;\n }\n if (element.textFrame) {\n inline.textFrame = {};\n inline.textFrame.textVerticalAlignment = element.textFrame.textVerticalAlignment;\n inline.textFrame.leftMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginLeft);\n inline.textFrame.rightMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginRight);\n inline.textFrame.topMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginTop);\n inline.textFrame.bottomMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginBottom);\n inline.textFrame.blocks = [];\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var textFrameBlock = element.textFrame.childWidgets[j];\n this.writeBlock(textFrameBlock, 0, inline.textFrame.blocks);\n }\n }\n };\n SfdtExport.prototype.writeChart = function (element, inline) {\n inline.chartLegend = {};\n inline.chartTitleArea = {};\n inline.chartArea = {};\n inline.plotArea = {};\n inline.chartCategory = [];\n inline.chartSeries = [];\n inline.chartPrimaryCategoryAxis = {};\n inline.chartPrimaryValueAxis = {};\n this.writeChartTitleArea(element.chartTitleArea, inline.chartTitleArea);\n this.writeChartArea(element.chartArea, inline.chartArea);\n this.writeChartArea(element.chartPlotArea, inline.plotArea);\n this.writeChartCategory(element, inline.chartCategory);\n this.createChartSeries(element, inline.chartSeries);\n this.writeChartLegend(element.chartLegend, inline.chartLegend);\n this.writeChartCategoryAxis(element.chartPrimaryCategoryAxis, inline.chartPrimaryCategoryAxis);\n this.writeChartCategoryAxis(element.chartPrimaryValueAxis, inline.chartPrimaryValueAxis);\n if (element.chartDataTable.showSeriesKeys !== undefined) {\n inline.chartDataTable = {};\n this.writeChartDataTable(element.chartDataTable, inline.chartDataTable);\n }\n inline.chartTitle = element.title;\n inline.chartType = element.type;\n inline.gapWidth = element.chartGapWidth;\n inline.overlap = element.chartOverlap;\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n };\n SfdtExport.prototype.writeChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea.fontName = titleArea.chartfontName;\n chartTitleArea.fontSize = titleArea.chartFontSize;\n chartTitleArea.layout = {};\n chartTitleArea.dataFormat = this.writeChartDataFormat(titleArea.dataFormat);\n this.writeChartLayout(titleArea.layout, chartTitleArea.layout);\n };\n SfdtExport.prototype.writeChartDataFormat = function (format) {\n var chartDataFormat = {};\n chartDataFormat.fill = {};\n chartDataFormat.line = {};\n if (!isNullOrUndefined(format.fill.color)) {\n if (format.fill.color.length > 6) {\n chartDataFormat.fill.foreColor = format.fill.color.substring(2);\n }\n else {\n chartDataFormat.fill.foreColor = format.fill.color;\n }\n }\n chartDataFormat.fill.rgb = format.fill.rgb;\n chartDataFormat.line.color = format.line.color;\n chartDataFormat.line.rgb = format.line.rgb;\n return chartDataFormat;\n };\n SfdtExport.prototype.writeChartLayout = function (layout, chartLayout) {\n chartLayout.layoutX = layout.chartLayoutLeft;\n chartLayout.layoutY = layout.chartLayoutTop;\n };\n SfdtExport.prototype.writeChartArea = function (area, chartArea) {\n chartArea.foreColor = area.chartForeColor;\n };\n SfdtExport.prototype.writeChartLegend = function (legend, chartLegend) {\n chartLegend.position = legend.chartLegendPostion;\n chartLegend.chartTitleArea = {};\n this.writeChartTitleArea(legend.chartTitleArea, chartLegend.chartTitleArea);\n };\n SfdtExport.prototype.writeChartCategoryAxis = function (categoryAxis, primaryCategoryAxis) {\n primaryCategoryAxis.chartTitle = categoryAxis.categoryAxisTitle;\n primaryCategoryAxis.chartTitleArea = {};\n this.writeChartTitleArea(categoryAxis.chartTitleArea, primaryCategoryAxis.chartTitleArea);\n primaryCategoryAxis.categoryType = categoryAxis.categoryAxisType;\n primaryCategoryAxis.fontSize = categoryAxis.axisFontSize;\n primaryCategoryAxis.fontName = categoryAxis.axisFontName;\n primaryCategoryAxis.numberFormat = categoryAxis.categoryNumberFormat;\n primaryCategoryAxis.maximumValue = categoryAxis.max;\n primaryCategoryAxis.minimumValue = categoryAxis.min;\n primaryCategoryAxis.majorUnit = categoryAxis.interval;\n primaryCategoryAxis.hasMajorGridLines = categoryAxis.majorGridLines;\n primaryCategoryAxis.hasMinorGridLines = categoryAxis.minorGridLines;\n primaryCategoryAxis.majorTickMark = categoryAxis.majorTick;\n primaryCategoryAxis.minorTickMark = categoryAxis.minorTick;\n primaryCategoryAxis.tickLabelPosition = categoryAxis.tickPosition;\n };\n SfdtExport.prototype.writeChartDataTable = function (chartDataTable, dataTable) {\n dataTable.showSeriesKeys = chartDataTable.showSeriesKeys;\n dataTable.hasHorzBorder = chartDataTable.hasHorzBorder;\n dataTable.hasVertBorder = chartDataTable.hasVertBorder;\n dataTable.hasBorders = chartDataTable.hasBorders;\n };\n SfdtExport.prototype.writeChartCategory = function (element, chartCategory) {\n var data = element.chartCategory;\n chartCategory.chartData = [];\n for (var i = 0; i < data.length; i++) {\n var xData = data[i];\n var categories = this.createChartCategory(xData, element.chartType);\n chartCategory.push(categories);\n }\n };\n SfdtExport.prototype.createChartCategory = function (data, type) {\n var chartCategory = {};\n chartCategory.chartData = [];\n this.writeChartData(data, chartCategory.chartData, type);\n chartCategory.categoryXName = data.categoryXName;\n return chartCategory;\n };\n SfdtExport.prototype.writeChartData = function (element, chartData, type) {\n var data = element.chartData;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var yCategory = this.createChartData(yData, type);\n chartData.push(yCategory);\n }\n };\n SfdtExport.prototype.createChartData = function (data, type) {\n var chartData = {};\n chartData.yValue = data.yValue;\n if (type === 'Bubble') {\n chartData.size = data.size;\n }\n return chartData;\n };\n SfdtExport.prototype.createChartSeries = function (element, chartSeries) {\n var data = element.chartSeries;\n var type = element.chartType;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var series = this.writeChartSeries(yData, type);\n chartSeries.push(series);\n }\n };\n SfdtExport.prototype.writeChartSeries = function (series, type) {\n var isPieType = (type === 'Pie' || type === 'Doughnut');\n var chartSeries = {};\n var errorBar = {};\n var errorBarData = series.errorBar;\n chartSeries.dataPoints = [];\n chartSeries.seriesName = series.seriesName;\n if (isPieType) {\n if (!isNullOrUndefined(series.firstSliceAngle)) {\n chartSeries.firstSliceAngle = series.firstSliceAngle;\n }\n if (type === 'Doughnut') {\n chartSeries.holeSize = series.doughnutHoleSize;\n }\n }\n if (!isNullOrUndefined(series.dataLabels.labelPosition)) {\n var dataLabel = this.writeChartDataLabels(series.dataLabels);\n chartSeries.dataLabel = dataLabel;\n }\n if (!isNullOrUndefined(series.seriesFormat.markerStyle)) {\n var seriesFormat = {};\n var format = series.seriesFormat;\n seriesFormat.markerStyle = format.markerStyle;\n seriesFormat.markerSize = format.numberValue;\n seriesFormat.markerColor = format.markerColor;\n chartSeries.seriesFormat = seriesFormat;\n }\n if (!isNullOrUndefined(errorBarData.type)) {\n errorBar.type = errorBarData.type;\n errorBar.direction = errorBarData.direction;\n errorBar.endStyle = errorBarData.endStyle;\n errorBar.numberValue = errorBarData.numberValue;\n chartSeries.errorBar = errorBarData;\n }\n if (series.trendLines.length > 0) {\n chartSeries.trendLines = [];\n for (var i = 0; i < series.trendLines.length; i++) {\n var trendLine = this.writeChartTrendLines(series.trendLines[i]);\n chartSeries.trendLines.push(trendLine);\n }\n }\n for (var i = 0; i < series.chartDataFormat.length; i++) {\n var format = this.writeChartDataFormat(series.chartDataFormat[i]);\n chartSeries.dataPoints.push(format);\n }\n return chartSeries;\n };\n SfdtExport.prototype.writeChartDataLabels = function (dataLabels) {\n var dataLabel = {};\n dataLabel.position = dataLabels.position;\n dataLabel.fontName = dataLabels.fontName;\n dataLabel.fontColor = HelperMethods.convertArgbToRgb(dataLabels.fontColor);\n dataLabel.fontSize = dataLabels.fontSize;\n dataLabel.isLegendKey = dataLabels.isLegendKey;\n dataLabel.isBubbleSize = dataLabels.isBubbleSize;\n dataLabel.isCategoryName = dataLabels.isCategoryName;\n dataLabel.isSeriesName = dataLabels.isSeriesName;\n dataLabel.isValue = dataLabels.isValue;\n dataLabel.isPercentage = dataLabels.isPercentage;\n dataLabel.isLeaderLines = dataLabels.isLeaderLines;\n return dataLabel;\n };\n SfdtExport.prototype.writeChartTrendLines = function (trendLines) {\n var trendLine = {};\n trendLine.name = trendLines.trendLineName;\n trendLine.type = trendLines.trendLineType;\n trendLine.forward = trendLines.forwardValue;\n trendLine.backward = trendLines.backwardValue;\n trendLine.intercept = trendLines.interceptValue;\n trendLine.isDisplayEquation = trendLines.isDisplayEquation;\n trendLine.isDisplayRSquared = trendLines.isDisplayRSquared;\n return trendLine;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n this.writeLine(child, (this.startLine !== this.endLine && child !== this.startLine) ? 0 : offset, inlines);\n }\n else {\n this.writeInlines(paragraph, child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n this.contentInline = [];\n var isContentStarted = false;\n var contentControl = false;\n var isEnd = line === this.endLine;\n var lineWidget = line;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var element = lineWidget.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n if (element instanceof ContentControl) {\n if (!started) {\n isContentStarted = element.type === 0 ? true : false;\n }\n contentControl = true;\n }\n if (element instanceof TextElementBox && element.hasOwnProperty('contentControlProperties') && started && !contentControl) {\n isContentStarted = true;\n }\n if (element instanceof ContentControl) {\n if (isContentStarted) {\n if (element.type === 1) {\n isContentStarted = false;\n }\n }\n if (contentControl) {\n if (element.type === 1) {\n contentControl = false;\n }\n }\n }\n ended = isEnd && length >= this.endOffset;\n if (!started || isContentStarted) {\n continue;\n }\n if (element instanceof ContentControl || this.startContent || this.blockContent) {\n if (ended) {\n this.startContent = false;\n break;\n }\n this.writeInlinesContentControl(element, line, inlines, j);\n continue;\n }\n inline = this.writeInline(element);\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty('text')) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline.text = inline.text.substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.writeInlinesFootNote = function (paragraph, element, line, inlines) {\n var inline = {};\n inline.footnoteType = element.footnoteType;\n inline.characterFormat = {};\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n inline.blocks = [];\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n this.writeBlock(element.bodyWidget.childWidgets[i], 0, inline.blocks);\n }\n inline.symbolCode = element.symbolCode;\n inline.symbolFontName = element.symbolFontName;\n inline.customMarker = element.customMarker;\n return inline;\n };\n SfdtExport.prototype.writeInlinesContentControl = function (element, lineWidget, inlines, i) {\n if (element instanceof ContentControl) {\n if (element.contentControlWidgetType === 'Block') {\n this.isBlockClosed = false;\n if (this.blockContent && element.type === 0) {\n this.nestedBlockContent = true;\n return true;\n }\n else if (this.nestedBlockContent && element.type === 1) {\n this.nestedBlockContent = false;\n return true;\n }\n this.blockContent = (element.type === 0) ? true : false;\n if (lineWidget.children[i - 1] instanceof ContentControl) {\n if (lineWidget.children[i - 1].contentControlWidgetType === 'Block') {\n this.blockContent = true;\n }\n }\n if (!this.blockContent) {\n this.isBlockClosed = true;\n }\n return true;\n }\n }\n if (element instanceof ContentControl) {\n if (this.startContent && element.type === 0) {\n this.nestedContent = true;\n return true;\n }\n else if (this.startContent && this.nestedContent) {\n var inline = {};\n inline.inlines = this.contentInline;\n if (this.contentInline.length > 0) {\n var nestedContent = this.nestedContentProperty(lineWidget.children[i + 1], inline);\n inlines.push(nestedContent);\n this.contentInline = [];\n }\n if (this.multipleLineContent) {\n inline = inlines[inlines.length - 1];\n this.nestedContentProperty(lineWidget.children[i + 1], inline);\n this.multipleLineContent = false;\n }\n this.nestedContent = false;\n return true;\n }\n this.contentType = element.contentControlWidgetType;\n this.startContent = (element.type === 0) ? true : false;\n return true;\n }\n if (this.startContent && ((this.contentType === 'Inline'))) {\n if (this.multipleLineContent) {\n this.inlineContentControl(element, lineWidget.children[i + 1], inlines);\n this.contentInline = [];\n }\n else {\n var contentinline = this.inlineContentControl(element, lineWidget.children[i + 1]);\n if (!isNullOrUndefined(contentinline)) {\n if (this.nestedContent && this.multipleLineContent) {\n var inline = {};\n inline.inlines = this.contentInline;\n inlines.push(inline);\n this.contentInline = [];\n }\n else {\n inlines.push(contentinline);\n this.contentInline = [];\n return false;\n }\n }\n }\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n var isParaSelected = false;\n if (this.documentHelper.selection && !this.documentHelper.selection.isEmpty && !this.isExport) {\n var endPos = this.documentHelper.selection.end;\n if (!this.documentHelper.selection.isForward) {\n endPos = this.documentHelper.selection.start;\n }\n var lastLine = endPos.paragraph.childWidgets[endPos.paragraph.childWidgets.length - 1];\n isParaSelected = this.documentHelper.selection.isParagraphLastLine(lastLine) && endPos.currentWidget === lastLine\n && endPos.offset === this.documentHelper.selection.getLineLength(lastLine) + 1;\n }\n else {\n isParaSelected = true;\n }\n paragraph.paragraphFormat = this.writeParagraphFormat(isParaSelected ? paragraphWidget.paragraphFormat : new WParagraphFormat(paragraphWidget));\n paragraph.characterFormat = this.writeCharacterFormat(isParaSelected ? paragraphWidget.characterFormat : new WCharacterFormat(paragraphWidget));\n paragraph.inlines = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format);\n characterFormat.boldBidi = isInline ? format.bold : format.getValue('bold');\n characterFormat.italicBidi = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSizeBidi = isInline ? format.fontSize : format.getValue('fontSize');\n characterFormat.fontFamilyBidi = isInline ? format.fontFamily : format.getValue('fontFamily');\n if (format.revisions.length > 0) {\n characterFormat.revisionIds = [];\n for (var x = 0; x < format.revisions.length; x++) {\n characterFormat.revisionIds.push(format.revisions[x].revisionID);\n }\n }\n if (this.writeInlineStyles && !isInline) {\n characterFormat.inlineFormat = this.writeCharacterFormat(format, true);\n }\n return characterFormat;\n };\n SfdtExport.prototype.writeParagraphFormat = function (format, isInline) {\n var paragraphFormat = {};\n paragraphFormat.borders = this.writeParagraphBorders(format.borders);\n paragraphFormat.leftIndent = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat.rightIndent = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat.firstLineIndent = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat.textAlignment = isInline ? format.textAlignment : format.getValue('textAlignment');\n paragraphFormat.beforeSpacing = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat.afterSpacing = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat.spaceBeforeAuto = isInline ? format.spaceBeforeAuto : format.getValue('spaceBeforeAuto');\n paragraphFormat.spaceAfterAuto = isInline ? format.spaceAfterAuto : format.getValue('spaceAfterAuto');\n paragraphFormat.lineSpacing = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat.lineSpacingType = isInline ? format.lineSpacingType : format.getValue('lineSpacingType');\n paragraphFormat.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat.outlineLevel = isInline ? format.outlineLevel : format.getValue('outlineLevel');\n paragraphFormat.listFormat = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat.tabs = this.writeTabs(format.tabs);\n paragraphFormat.bidi = isInline ? format.bidi : format.getValue('bidi');\n paragraphFormat.keepLinesTogether = isInline ? format.keepLinesTogether : format.getValue('keepLinesTogether');\n paragraphFormat.keepWithNext = isInline ? format.keepWithNext : format.getValue('keepWithNext');\n paragraphFormat.contextualSpacing = isInline ? format.contextualSpacing : format.getValue('contextualSpacing');\n paragraphFormat.widowControl = isInline ? format.widowControl : format.getValue('widowControl');\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat.inlineFormat = this.writeParagraphFormat(format, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab.position = tabStop.position;\n tab.deletePosition = tabStop.deletePosition;\n tab.tabJustification = tabStop.tabJustification;\n tab.tabLeader = tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue)) {\n listFormat.listId = listIdValue;\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n var listLevelNumber = format.getValue('listLevelNumber');\n if (!isNullOrUndefined(listLevelNumber)) {\n listFormat.listLevelNumber = listLevelNumber;\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table.rows)) {\n return undefined;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n next = tableWidget.nextRenderedWidget;\n return (next instanceof BlockWidget && next.containerWidget.index === tableWidget.containerWidget.index) ? next : undefined;\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n var next = rowWidget;\n do {\n rowWidget = next;\n next = this.writeRowInternal(next, rows);\n if (rowWidget === next) {\n return true;\n }\n } while (next instanceof TableRowWidget);\n return false;\n };\n SfdtExport.prototype.writeRowInternal = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return rowWidget;\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row.cells)) {\n return rowWidget;\n }\n }\n }\n }\n var next = rowWidget;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n if (!isNullOrUndefined(rowWidget.ownerTable.bodyWidget) && next && ((rowWidget.ownerTable.index !== next.ownerTable.index &&\n rowWidget.ownerTable.bodyWidget.sectionIndex === next.ownerTable.bodyWidget.sectionIndex)\n || rowWidget.ownerTable.bodyWidget.sectionIndex !== next.ownerTable.bodyWidget.sectionIndex)) {\n next = undefined;\n }\n } while (next instanceof TableRowWidget && next.index === rowWidget.index);\n return next;\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n var firstBlock = cellWidget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, cell.blocks);\n } while (firstBlock);\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n table.rows = [];\n table.grid = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table.grid[i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table.tableFormat = this.writeTableFormat(tableWidget.tableFormat);\n table.description = tableWidget.description;\n table.title = tableWidget.title;\n table.columnCount = tableWidget.tableHolder.columns.length;\n this.writeTablePositioning(table, tableWidget);\n return table;\n };\n SfdtExport.prototype.writeTablePositioning = function (table, tableWidget) {\n if (tableWidget.wrapTextAround) {\n table.wrapTextAround = tableWidget.wrapTextAround;\n table.positioning = {};\n table.positioning.allowOverlap = tableWidget.positioning.allowOverlap;\n table.positioning.distanceBottom = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceBottom);\n table.positioning.distanceLeft = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceLeft);\n table.positioning.distanceRight = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceRight);\n table.positioning.distanceTop = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceTop);\n if (!isNullOrUndefined(tableWidget.positioning.verticalAlignment)) {\n table.positioning.verticalAlignment = tableWidget.positioning.verticalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.verticalOrigin)) {\n table.positioning.verticalOrigin = tableWidget.positioning.verticalOrigin;\n }\n table.positioning.verticalPosition = tableWidget.positioning.verticalPosition;\n if (!isNullOrUndefined(tableWidget.positioning.horizontalAlignment)) {\n table.positioning.horizontalAlignment = tableWidget.positioning.horizontalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.horizontalOrigin)) {\n table.positioning.horizontalOrigin = tableWidget.positioning.horizontalOrigin;\n }\n table.positioning.horizontalPosition = tableWidget.positioning.horizontalPosition;\n }\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row.cells = [];\n row.rowFormat = this.writeRowFormat(rowWidget.rowFormat);\n if (rowWidget.hasOwnProperty('contentControlProperties')) {\n row.contentControlProperties = this.contentControlProperty(rowWidget.contentControlProperties);\n }\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell.blocks = [];\n cell.cellFormat = this.writeCellFormat(cellWidget.cellFormat);\n cell.columnIndex = cellWidget.columnIndex;\n if (cellWidget.hasOwnProperty('contentControlProperties')) {\n cell.contentControlProperties = this.contentControlProperty(cellWidget.contentControlProperties);\n }\n return cell;\n };\n SfdtExport.prototype.writeShading = function (wShading) {\n var shading = {};\n shading.backgroundColor = wShading.hasValue('backgroundColor') ? wShading.backgroundColor : undefined;\n shading.foregroundColor = wShading.hasValue('foregroundColor') ? wShading.foregroundColor : undefined;\n shading.textureStyle = wShading.hasValue('textureStyle') ? wShading.textureStyle : undefined;\n return shading;\n };\n SfdtExport.prototype.writeBorder = function (wBorder) {\n var border = {};\n border.color = wBorder.hasValue('color') ? wBorder.color : undefined;\n border.hasNoneStyle = wBorder.hasValue('hasNoneStyle') ? wBorder.hasNoneStyle : undefined;\n border.lineStyle = wBorder.hasValue('lineStyle') ? wBorder.lineStyle : undefined;\n border.lineWidth = wBorder.hasValue('lineWidth') ? wBorder.lineWidth : undefined;\n border.shadow = wBorder.hasValue('shadow') ? wBorder.shadow : undefined;\n border.space = wBorder.hasValue('space') ? wBorder.space : undefined;\n return border;\n };\n SfdtExport.prototype.writeParagraphBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.getBorder('top'));\n borders.left = this.writeBorder(wBorders.getBorder('left'));\n borders.right = this.writeBorder(wBorders.getBorder('right'));\n borders.bottom = this.writeBorder(wBorders.getBorder('bottom'));\n borders.horizontal = this.writeBorder(wBorders.getBorder('horizontal'));\n borders.vertical = this.writeBorder(wBorders.getBorder('vertical'));\n return borders;\n };\n SfdtExport.prototype.writeBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.top);\n borders.left = this.writeBorder(wBorders.left);\n borders.right = this.writeBorder(wBorders.right);\n borders.bottom = this.writeBorder(wBorders.bottom);\n borders.diagonalDown = this.writeBorder(wBorders.diagonalDown);\n borders.diagonalUp = this.writeBorder(wBorders.diagonalUp);\n borders.horizontal = this.writeBorder(wBorders.horizontal);\n borders.vertical = this.writeBorder(wBorders.vertical);\n return borders;\n };\n SfdtExport.prototype.writeCellFormat = function (wCellFormat) {\n var cellFormat = {};\n cellFormat.borders = this.writeBorders(wCellFormat.borders);\n cellFormat.shading = this.writeShading(wCellFormat.shading);\n cellFormat.topMargin = wCellFormat.hasValue('topMargin') ? wCellFormat.topMargin : undefined;\n cellFormat.rightMargin = wCellFormat.hasValue('rightMargin') ? wCellFormat.rightMargin : undefined;\n cellFormat.leftMargin = wCellFormat.hasValue('leftMargin') ? wCellFormat.leftMargin : undefined;\n cellFormat.bottomMargin = wCellFormat.hasValue('bottomMargin') ? wCellFormat.bottomMargin : undefined;\n cellFormat.preferredWidth = wCellFormat.hasValue('preferredWidth') ? wCellFormat.preferredWidth : undefined;\n cellFormat.preferredWidthType = wCellFormat.hasValue('preferredWidthType') ? wCellFormat.preferredWidthType : undefined;\n cellFormat.cellWidth = wCellFormat.hasValue('cellWidth') ? wCellFormat.cellWidth : undefined;\n cellFormat.columnSpan = wCellFormat.columnSpan;\n cellFormat.rowSpan = wCellFormat.rowSpan;\n cellFormat.verticalAlignment = wCellFormat.hasValue('verticalAlignment') ? wCellFormat.verticalAlignment : undefined;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat) {\n var rowFormat = {};\n var revisionIds = [];\n rowFormat.height = wRowFormat.hasValue('height') ? wRowFormat.height : undefined;\n rowFormat.allowBreakAcrossPages = wRowFormat.hasValue('allowBreakAcrossPages') ? wRowFormat.allowBreakAcrossPages : undefined;\n rowFormat.heightType = wRowFormat.hasValue('heightType') ? wRowFormat.heightType : undefined;\n rowFormat.isHeader = wRowFormat.hasValue('isHeader') ? wRowFormat.isHeader : undefined;\n rowFormat.borders = this.writeBorders(wRowFormat.borders);\n rowFormat.gridBefore = wRowFormat.gridBefore;\n rowFormat.gridBeforeWidth = wRowFormat.hasValue('gridBeforeWidth') ? wRowFormat.gridBeforeWidth : undefined;\n rowFormat.gridBeforeWidthType = wRowFormat.hasValue('gridBeforeWidthType') ? wRowFormat.gridBeforeWidthType : undefined;\n rowFormat.gridAfter = wRowFormat.gridAfter;\n rowFormat.gridAfterWidth = wRowFormat.hasValue('gridAfterWidth') ? wRowFormat.gridAfterWidth : undefined;\n rowFormat.gridAfterWidthType = wRowFormat.hasValue('gridAfterWidthType') ? wRowFormat.gridAfterWidthType : undefined;\n rowFormat.leftMargin = wRowFormat.hasValue('leftMargin') ? wRowFormat.leftMargin : undefined;\n rowFormat.topMargin = wRowFormat.hasValue('topMargin') ? wRowFormat.topMargin : undefined;\n rowFormat.rightMargin = wRowFormat.hasValue('rightMargin') ? wRowFormat.rightMargin : undefined;\n rowFormat.bottomMargin = wRowFormat.hasValue('bottomMargin') ? wRowFormat.bottomMargin : undefined;\n rowFormat.leftIndent = wRowFormat.hasValue('leftIndent') ? wRowFormat.leftIndent : undefined;\n for (var j = 0; j < wRowFormat.revisions.length; j++) {\n rowFormat.revisionIds = this.writeRowRevisions(wRowFormat.revisions[j], revisionIds);\n }\n return rowFormat;\n };\n SfdtExport.prototype.writeRowRevisions = function (wrevisions, revisionIds) {\n if (this.selectedRevisionId.indexOf(wrevisions.revisionID) === -1) {\n this.selectedRevisionId.push(wrevisions.revisionID);\n }\n revisionIds.push(wrevisions.revisionID);\n return revisionIds;\n };\n SfdtExport.prototype.writeTableFormat = function (wTableFormat) {\n var tableFormat = {};\n tableFormat.borders = this.writeBorders(wTableFormat.borders);\n tableFormat.shading = this.writeShading(wTableFormat.shading);\n tableFormat.cellSpacing = wTableFormat.hasValue('cellSpacing') ? wTableFormat.cellSpacing : undefined;\n tableFormat.leftIndent = wTableFormat.hasValue('leftIndent') ? wTableFormat.leftIndent : undefined;\n tableFormat.tableAlignment = wTableFormat.hasValue('tableAlignment') ? wTableFormat.tableAlignment : undefined;\n tableFormat.topMargin = wTableFormat.hasValue('topMargin') ? wTableFormat.topMargin : undefined;\n tableFormat.rightMargin = wTableFormat.hasValue('rightMargin') ? wTableFormat.rightMargin : undefined;\n tableFormat.leftMargin = wTableFormat.hasValue('leftMargin') ? wTableFormat.leftMargin : undefined;\n tableFormat.bottomMargin = wTableFormat.hasValue('bottomMargin') ? wTableFormat.bottomMargin : undefined;\n tableFormat.preferredWidth = wTableFormat.hasValue('preferredWidth') ? wTableFormat.preferredWidth : undefined;\n tableFormat.preferredWidthType = wTableFormat.hasValue('preferredWidthType') ? wTableFormat.preferredWidthType : undefined;\n tableFormat.bidi = wTableFormat.hasValue('bidi') ? wTableFormat.bidi : undefined;\n tableFormat.allowAutoFit = wTableFormat.hasValue('allowAutoFit') ? wTableFormat.allowAutoFit : undefined;\n tableFormat.styleName = !isNullOrUndefined(wTableFormat.styleName) ? wTableFormat.styleName : undefined;\n return tableFormat;\n };\n SfdtExport.prototype.footnotes = function (documentHelper) {\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.seprators(documentHelper);\n }\n };\n SfdtExport.prototype.seprators = function (documentHelper) {\n if (documentHelper.footnotes.separator.length > 0) {\n this.document.footnotes = {};\n this.document.footnotes.separator = [];\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.writeBlock(documentHelper.footnotes.separator[i], 0, this.document.footnotes.separator);\n }\n }\n if (documentHelper.footnotes.continuationSeparator.length > 0) {\n this.document.footnotes.continuationSeparator = [];\n for (var i = 0; i < documentHelper.footnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationSeparator[i], 0, this.document.footnotes.continuationSeparator);\n }\n }\n if (documentHelper.footnotes.continuationNotice.length > 0) {\n this.document.footnotes.continuationNotice = [];\n for (var i = 0; i < documentHelper.footnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationNotice[i], 0, this.document.footnotes.continuationNotice);\n }\n }\n };\n SfdtExport.prototype.endnotes = function (documentHelper) {\n for (var i = 0; i < this.documentHelper.endnotes.separator.length; i++) {\n this.endnoteSeparator(documentHelper);\n }\n };\n SfdtExport.prototype.endnoteSeparator = function (documentHelper) {\n if (documentHelper.endnotes.separator.length > 0) {\n this.document.endnotes = {};\n this.document.endnotes.separator = [];\n for (var i = 0; i < documentHelper.endnotes.separator.length; i++) {\n this.writeBlock(documentHelper.endnotes.separator[i], 0, this.document.endnotes.separator);\n }\n }\n if (documentHelper.endnotes.continuationSeparator.length > 0) {\n this.document.endnotes.continuationSeparator = [];\n for (var i = 0; i < documentHelper.endnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationSeparator[i], 0, this.document.endnotes.continuationSeparator);\n }\n }\n if (documentHelper.endnotes.continuationNotice.length > 0) {\n this.document.endnotes.continuationNotice = [];\n for (var i = 0; i < documentHelper.endnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationNotice[i], 0, this.document.endnotes.continuationNotice);\n }\n }\n };\n SfdtExport.prototype.writeStyles = function (documentHelper) {\n var styles = [];\n this.document.styles = [];\n for (var i = 0; i < documentHelper.styles.length; i++) {\n this.document.styles.push(this.writeStyle(documentHelper.styles.getItem(i)));\n }\n };\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle.name = style.name;\n if (style.type === 'Paragraph') {\n wStyle.type = 'Paragraph';\n wStyle.paragraphFormat = this.writeParagraphFormat(style.paragraphFormat);\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (style.type === 'Character') {\n wStyle.type = 'Character';\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle.basedOn = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle.link = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle.next = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeRevisions = function (documentHelper) {\n this.document.revisions = [];\n for (var i = 0; i < documentHelper.owner.revisions.changes.length; i++) {\n if (this.isExport ||\n (!this.isExport && this.selectedRevisionId.indexOf(documentHelper.owner.revisions.changes[i].revisionID) !== -1)) {\n this.document.revisions.push(this.writeRevision(documentHelper.owner.revisions.changes[i]));\n }\n }\n };\n SfdtExport.prototype.writeRevision = function (revisions) {\n var revision = {};\n revision.author = revisions.author;\n revision.date = revisions.date;\n revision.revisionType = revisions.revisionType;\n revision.revisionId = revisions.revisionID;\n return revision;\n };\n SfdtExport.prototype.writeComments = function (documentHelper) {\n this.document.comments = [];\n for (var i = 0; i < documentHelper.comments.length; i++) {\n if (this.isExport ||\n (!this.isExport && this.selectedCommentsId.indexOf(this.documentHelper.comments[i].commentId) !== -1)) {\n this.document.comments.push(this.writeComment(this.documentHelper.comments[i]));\n }\n }\n };\n SfdtExport.prototype.writeCustomXml = function (documentHelper) {\n this.document.customXml = [];\n for (var i = 0; i < documentHelper.customXmlData.length; i++) {\n var customXml = {};\n var key = documentHelper.customXmlData.keys[i];\n customXml.itemID = key;\n var xmlValue = this.documentHelper.customXmlData.get(key);\n customXml.xml = xmlValue;\n this.document.customXml.push(customXml);\n }\n };\n SfdtExport.prototype.writeComment = function (comments) {\n var comment = {};\n comment.commentId = comments.commentId;\n comment.author = comments.author;\n comment.date = comments.date;\n comment.blocks = [];\n comment.blocks.push(this.commentInlines(comments.text));\n comment.done = comments.isResolved;\n comment.replyComments = [];\n for (var i = 0; i < comments.replyComments.length; i++) {\n comment.replyComments.push(this.writeComment(comments.replyComments[i]));\n }\n return comment;\n };\n SfdtExport.prototype.commentInlines = function (ctext) {\n var blocks = {};\n blocks.inlines = [{ text: ctext }];\n return blocks;\n };\n SfdtExport.prototype.writeLists = function (documentHelper) {\n var abstractLists = [];\n this.document.lists = [];\n for (var i = 0; i < documentHelper.lists.length; i++) {\n var list = documentHelper.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document.lists.push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document.abstractLists = [];\n for (var i = 0; i < documentHelper.abstractLists.length; i++) {\n var abstractList = documentHelper.abstractLists[i];\n if (abstractLists.indexOf(abstractList.abstractListId) > -1) {\n this.document.abstractLists.push(this.writeAbstractList(abstractList));\n }\n }\n };\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList.abstractListId = wAbstractList.abstractListId;\n abstractList.levels = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList.levels[i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n list.abstractListId = wList.abstractListId;\n list.levelOverrides = [];\n for (var i = 0; i < wList.levelOverrides.length; i++) {\n list.levelOverrides.push(this.writeLevelOverrides(wList.levelOverrides[i]));\n }\n list.listId = wList.listId;\n return list;\n };\n SfdtExport.prototype.writeLevelOverrides = function (wlevel) {\n var levelOverrides = {};\n levelOverrides.levelNumber = wlevel.levelNumber;\n if (wlevel.overrideListLevel) {\n levelOverrides.overrideListLevel = this.writeListLevel(wlevel.overrideListLevel);\n }\n levelOverrides.startAt = wlevel.startAt;\n return levelOverrides;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel.characterFormat = this.writeCharacterFormat(wListLevel.characterFormat);\n listLevel.paragraphFormat = this.writeParagraphFormat(wListLevel.paragraphFormat);\n listLevel.followCharacter = wListLevel.followCharacter;\n listLevel.listLevelPattern = wListLevel.listLevelPattern;\n listLevel.numberFormat = wListLevel.numberFormat;\n listLevel.restartLevel = wListLevel.restartLevel;\n listLevel.startAt = wListLevel.startAt;\n return listLevel;\n };\n SfdtExport.prototype.getParentBlock = function (widget) {\n if (widget.isInsideTable) {\n widget = this.owner.documentHelper.layout.getParentTable(widget);\n }\n return widget;\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.endLine = undefined;\n this.startLine = undefined;\n this.endOffset = undefined;\n this.documentHelper = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WSectionFormat } from '../format/section-format';\n/**\n * The notes dialog is used to insert footnote.\n */\nvar NotesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function NotesDialog(documentHelper) {\n var _this = this;\n this.list = undefined;\n /**\n * @private\n */\n this.noteNumberFormat = undefined;\n this.sectionFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var format;\n var section;\n if (_this.sectionFormat) {\n section = _this.sectionFormat;\n }\n else {\n section = _this.documentHelper.owner.selection.sectionFormat;\n }\n if (_this.documentHelper.selection.isinFootnote) {\n var footnotesFormat = section.footNoteNumberFormat;\n var startAt = section.initialFootNoteNumber;\n format = _this.reversetype(footnotesFormat);\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n else {\n var endnotesFormat = section.endnoteNumberFormat;\n format = _this.reversetype(endnotesFormat);\n var startAt = section.initialEndNoteNumber;\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFootnoteClick = function () {\n var format = new WSectionFormat(undefined);\n if (!isNullOrUndefined(_this.notesList)) {\n var formats = (_this.notesList.value).toString();\n var renderFormat = _this.types(formats);\n var startValue = _this.startValueTextBox.value;\n if (!isNullOrUndefined(_this.notesList)) {\n if (_this.documentHelper.selection.isinFootnote) {\n format.footNoteNumberFormat = renderFormat;\n format.footNoteNumberFormat = renderFormat;\n format.initialFootNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n else {\n format.endnoteNumberFormat = renderFormat;\n format.endnoteNumberFormat = renderFormat;\n format.initialEndNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.notesList.value = undefined;\n };\n this.documentHelper = documentHelper;\n }\n NotesDialog.prototype.getModuleName = function () {\n return 'FootNotesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n NotesDialog.prototype.notesDialog = function (localValue, isRtl) {\n var idName = this.documentHelper.owner.containerId + '_insert_Footnote';\n this.target = createElement('div', { id: idName, className: 'e-de-insert-footnote' });\n var firstDiv = createElement('div');\n var startatValue = createElement('div');\n this.footCount = createElement('input', {\n attrs: { type: 'text' }, id: this.documentHelper.owner.containerId + 'row'\n });\n startatValue.appendChild(this.footCount);\n var numberFormatDiv = createElement('div', { className: 'e-de-container-row' });\n var formatType = createElement('select', {\n id: this.target.id + '_papersize', styles: 'padding-bottom: 20px;',\n innerHTML: ''\n });\n numberFormatDiv.appendChild(formatType);\n this.notesList = new DropDownList({\n enableRtl: isRtl, placeholder: localValue.getConstant('Start at'),\n floatLabelType: 'Always'\n });\n this.notesList.appendTo(formatType);\n firstDiv.appendChild(numberFormatDiv);\n firstDiv.appendChild(startatValue);\n this.target.appendChild(firstDiv);\n this.startValueTextBox = new NumericTextBox({\n format: '#',\n min: 1,\n max: 99999,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number format'),\n floatLabelType: 'Always'\n });\n this.startValueTextBox.appendTo(this.footCount);\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.notesDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n //let footType: any = this.documentHelper.selection.startInternal.currentWidget.paragraph.containerWidget;\n if (this.documentHelper.selection.isinFootnote) {\n this.documentHelper.dialog.header = localValue.getConstant('Footnote');\n }\n else {\n this.documentHelper.dialog.header = localValue.getConstant('Endnote');\n }\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFootnoteClick,\n buttonModel: { content: localValue.getConstant('Apply'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.startValueTextBox.value = 1;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n if (this.documentHelper.selection.isinEndnote) {\n var alignValue = this.endnoteListValue(this.list);\n this.notesList.index = alignValue;\n }\n };\n NotesDialog.prototype.types = function (type) {\n switch (type) {\n case '1, 2, 3, ...':\n return 'Arabic';\n case 'A, B, C, ...':\n return 'UpperCaseLetter';\n case 'a, b, c, ...':\n return 'LowerCaseLetter';\n case 'I, II, III, ...':\n return 'LowerCaseRoman';\n case 'i, ii, iii, ...':\n return 'UpperCaseRoman';\n default:\n return 'Arabic';\n }\n };\n NotesDialog.prototype.reversetype = function (type) {\n switch (type) {\n case 'Arabic':\n return '1, 2, 3, ...';\n case 'UpperCaseLetter':\n return 'A, B, C, ...';\n case 'LowerCaseLetter':\n return 'a, b, c, ...';\n case 'UpperCaseRoman':\n return 'I, II, III, ...';\n case 'LowerCaseRoman':\n return 'i, ii, iii, ...';\n default:\n return '1, 2, 3, ...';\n }\n };\n // eslint-disable-next-line\n NotesDialog.prototype.endnoteListValue = function (listFocus) {\n var value;\n if (listFocus === 'A, B, C, ...') {\n value = 0;\n }\n else if (listFocus === '1, 2, 3, ...') {\n value = 1;\n }\n else if (listFocus === 'a, b, c, ...') {\n value = 2;\n }\n else {\n value = 3;\n }\n // else {\n // value = 4;\n // }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.destroy = function () {\n if (this.footCount) {\n if (this.footCount.parentElement) {\n this.footCount.parentElement.removeChild(this.footCount);\n }\n this.footCount = undefined;\n }\n if (this.startValueTextBox) {\n this.startValueTextBox.destroy();\n this.startValueTextBox = undefined;\n }\n if (this.notesList) {\n this.notesList.destroy();\n this.notesList = undefined;\n }\n this.footCount = undefined;\n this.documentHelper = undefined;\n };\n return NotesDialog;\n}());\nexport { NotesDialog };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport { Component, Property, NotifyPropertyChanges, Event, ChildProperty, classList, Complex, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { LayoutViewer, PageLayoutViewer, WebLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\nimport { SpellChecker } from './implementation/spell-check/spell-checker';\nimport { SpellCheckDialog } from './implementation/dialogs/spellCheck-dialog';\nimport { DocumentHelper } from './index';\nimport { CheckBoxFormFieldDialog, DropDownFormField, TextFormField, CheckBoxFormField } from './implementation/index';\nimport { TextFormFieldDialog } from './implementation/dialogs/form-field-text-dialog';\nimport { DropDownFormFieldDialog } from './implementation/dialogs/form-field-drop-down-dialog';\nimport { RevisionCollection } from './implementation/track-changes/track-changes';\nimport { NotesDialog } from './implementation/dialogs/notes-dialog';\nimport { FootNoteWidget } from './implementation/viewer/page';\nimport { internalZoomFactorChange, contentChangeEvent, documentChangeEvent, selectionChangeEvent, zoomFactorChangeEvent, beforeFieldFillEvent, afterFieldFillEvent, serviceFailureEvent, viewChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent } from './base/constants';\nimport { Optimized, Regular, HelperMethods } from './index';\n/**\n * The `DocumentEditorSettings` module is used to provide the customize property of Document Editor.\n */\nvar DocumentEditorSettings = /** @class */ (function (_super) {\n __extends(DocumentEditorSettings, _super);\n function DocumentEditorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#FFE97F')\n ], DocumentEditorSettings.prototype, \"searchHighlightColor\", void 0);\n __decorate([\n Property(['Algerian', 'Arial', 'Calibri', 'Cambria', 'Cambria Math', 'Candara', 'Courier New', 'Georgia', 'Impact', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Symbol', 'Times New Roman', 'Verdana', 'Wingdings'])\n ], DocumentEditorSettings.prototype, \"fontFamilies\", void 0);\n __decorate([\n Property({ shadingColor: '#cfcfcf', applyShading: true, selectionColor: '#cccccc', formFillingMode: 'Popup' })\n ], DocumentEditorSettings.prototype, \"formFieldSettings\", void 0);\n __decorate([\n Property({ roomName: '', editableRegionColor: '#22b24b', lockedRegionColor: '#f44336' })\n ], DocumentEditorSettings.prototype, \"collaborativeEditingSettings\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditorSettings.prototype, \"printDevicePixelRatio\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"enableOptimizedTextMeasuring\", void 0);\n __decorate([\n Property(32767)\n ], DocumentEditorSettings.prototype, \"maximumRows\", void 0);\n return DocumentEditorSettings;\n}(ChildProperty));\nexport { DocumentEditorSettings };\n/**\n * Represents the settings and properties of the document that is opened in Document editor component.\n */\nvar DocumentSettings = /** @class */ (function (_super) {\n __extends(DocumentSettings, _super);\n function DocumentSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Word2013')\n ], DocumentSettings.prototype, \"compatibilityMode\", void 0);\n return DocumentSettings;\n}(ChildProperty));\nexport { DocumentSettings };\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initialize the constructor of DocumentEditor\n *\n * @param {DocumentEditorModel} options - Specifies the document editor model.\n * @param {string | HTMLElement} element - Specifies the element.\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.parser = undefined;\n _this.disableHistoryIn = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n _this.createdTriggered = false;\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'OK',\n 'Apply': 'Apply',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Points': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Justify': 'Justify',\n 'Indent from left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default cell margins': 'Default cell margins',\n 'Default cell spacing': 'Default cell spacing',\n 'Allow spacing between cells': 'Allow spacing between cells',\n 'Cell margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n '1, 2, 3, ...': '1, 2, 3, ...',\n 'a, b, c, ...': 'a, b, c, ...',\n 'A, B, C, ...': 'A, B, C, ...',\n 'I, II, III, ...': 'I, II, III, ...',\n 'i, ii, iii, ...': 'i, ii, iii, ...',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'First Page Header': 'First Page Header',\n 'First Page Footer': 'First Page Footer',\n 'Even Page Header': 'Even Page Header',\n 'Even Page Footer': 'Even Page Footer',\n 'Odd Page Header': 'Odd Page Header',\n 'Odd Page Footer': 'Odd Page Footer',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n 'Nothing': 'Nothing',\n 'Tab leader': 'Tab leader',\n 'Show levels': 'Show levels',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from': 'Build table of contents from',\n 'Styles': 'Styles',\n 'Available styles': 'Available styles',\n 'TOC level': 'TOC level',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Number of columns': 'Number of columns',\n 'Number of rows': 'Number of rows',\n 'Text to display': 'Text to display',\n 'ScreenTip text': 'ScreenTip text',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'Indentation': 'Indentation',\n 'Before text': 'Before text',\n 'Special': 'Special',\n 'First line': 'First line',\n 'Hanging': 'Hanging',\n 'After text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'Define new Multilevel list': 'Define new Multilevel list',\n 'List level': 'List level',\n 'Choose level to modify': 'Choose level to modify',\n 'Level': 'Level',\n 'Number format': 'Number format',\n 'Number style for this level': 'Number style for this level',\n 'Enter formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart list after': 'Restart list after',\n 'Position': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab character': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font style': 'Font style',\n 'Underline style': 'Underline style',\n 'Font color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Linked Style': 'Linked(Paragraph and Character)',\n 'Character': 'Character',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all': 'We replaced all',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done': 'All Done',\n 'Result': 'Result',\n 'of': 'of',\n 'instances': 'instances',\n 'with': 'with',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name': 'Bookmark name',\n 'Close': 'Close',\n 'Restart At': 'Restart At',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'Number format tooltip information': 'Single-level number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]
      '\n + 'For example, \"Chapter %1.\" will display numbering like
      Chapter 1. Item
      Chapter 2. Item
      …'\n + '
      Chapter N. Item
      '\n + '
      Multilevel number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
      For example, \"%1.%2.\" will display numbering like
      1.1. Item
      1.2. Item

      1.N. Item',\n 'Format': 'Format',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'InsertFootnote': 'InsertFootnote',\n 'InsertEndnote': 'InsertEndnote',\n 'Footnote': 'Footnote',\n 'Endnote': 'Endnote',\n 'Notes Options': 'Notes Options',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents',\n 'AutoFit': 'AutoFit',\n 'AutoFit to Contents': 'AutoFit to Contents',\n 'AutoFit to Window': 'AutoFit to Window',\n 'Fixed Column Width': 'Fixed Column Width',\n 'Reset': 'Reset',\n 'Match case': 'Match case',\n 'Whole words': 'Whole words',\n 'Add': 'Add',\n 'Go To': 'Go To',\n 'Search for': 'Search for',\n 'Replace with': 'Replace with',\n 'TOC 1': 'TOC 1',\n 'TOC 2': 'TOC 2',\n 'TOC 3': 'TOC 3',\n 'TOC 4': 'TOC 4',\n 'TOC 5': 'TOC 5',\n 'TOC 6': 'TOC 6',\n 'TOC 7': 'TOC 7',\n 'TOC 8': 'TOC 8',\n 'TOC 9': 'TOC 9',\n 'Right-to-left': 'Right-to-left',\n 'Left-to-right': 'Left-to-right',\n 'Direction': 'Direction',\n 'Table direction': 'Table direction',\n 'Indent from right': 'Indent from right',\n /* eslint-disable */\n \"Contextual Spacing\": \"Don't add space between paragraphs of the same style\",\n \"Password Mismatch\": \"The password don't match\",\n 'Restrict Editing': 'Restrict Editing',\n 'Formatting restrictions': 'Formatting restrictions',\n 'Allow formatting': 'Allow formatting',\n 'Editing restrictions': 'Editing restrictions',\n 'Read only': 'Read only',\n 'Exceptions Optional': 'Exceptions (optional)',\n 'Select Part Of Document And User': 'Select parts of the document and choose users who are allowed to freely edit them.',\n 'Everyone': 'Everyone',\n 'More users': 'More users',\n 'Add Users': 'Add Users',\n 'Enforcing Protection': 'Yes, Start Enforcing Protection',\n 'Start Enforcing Protection': 'Start Enforcing Protection',\n 'Enter User': 'Enter User',\n 'Users': 'Users',\n 'Enter new password': 'Enter new password',\n 'Reenter new password to confirm': 'Reenter new password to confirm',\n 'Your permissions': 'Your permissions',\n 'Protected Document': 'This document is protected from unintentional editing.',\n 'FormFieldsOnly': 'You may only fill in forms in this region.',\n 'CommentsOnly': 'You may only insert comments into this region.',\n 'ReadOnlyProtection': 'You may edit in this region.',\n 'Stop Protection': 'Stop Protection',\n 'Password': 'Password',\n 'Spelling Editor': 'Spelling Editor',\n 'Spelling': 'Spelling',\n 'Spell Check': 'Spell Check',\n 'Underline errors': 'Underline errors',\n 'Ignore': 'Ignore',\n 'Ignore All': 'Ignore All',\n 'Add to Dictionary': 'Add to Dictionary',\n 'Change': 'Change',\n 'Change All': 'Change All',\n 'Suggestions': 'Suggestions',\n 'The password is incorrect': 'The password is incorrect',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Highlight the regions I can edit': 'Highlight the regions I can edit',\n 'Show All Regions I Can Edit': 'Show All Regions I Can Edit',\n 'Find Next Region I Can Edit': 'Find Next Region I Can Edit',\n 'Keep source formatting': 'Keep source formatting',\n 'Match destination formatting': 'Match destination formatting',\n 'InsertAsRows': 'Insert as New Rows',\n 'InsertAsColumns': 'Insert as New Columns',\n 'OverwriteCells': 'Overwrite Cells',\n 'NestTable': 'Nest Table',\n 'Text only': 'Text only',\n 'Comments': 'Comments',\n 'Type your comment': 'Type your comment',\n 'Post': 'Post',\n 'Reply': 'Reply',\n 'New Comment': 'New Comment',\n 'Edit': 'Edit',\n 'Resolve': 'Resolve',\n 'Reopen': 'Reopen',\n 'No comments in this document': 'No comments in this document',\n 'more': 'more',\n 'Type your comment here': 'Type your comment here',\n 'Next Comment': 'Next Comment',\n 'Previous Comment': 'Previous Comment',\n 'Un-posted comments': 'Un-posted comments',\n 'Discard Comment': 'Added comments not posted. If you continue, that comment will be discarded.',\n 'No Headings': 'No Heading Found!',\n 'Add Headings': 'This document has no headings. Please add headings and try again.',\n 'More Options': 'More Options',\n 'Click to see this comment': 'Click to see this comment',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'Drop Down Form Field': 'Drop Down Form Field',\n 'Dropdown items': 'Drop-down items',\n 'Items in dropdown list': 'Items in drop-down list',\n 'ADD': 'ADD',\n 'REMOVE': 'REMOVE',\n 'Field settings': 'Field settings',\n 'Tooltip': 'Tooltip',\n 'Dropdown enabled': 'Drop-down enabled',\n 'Check Box Form Field': 'Check Box Form Field',\n 'Check box size': 'Check box size',\n 'Auto': 'Auto',\n 'Default value': 'Default value',\n 'Not checked': 'Not checked',\n 'Checked': 'Checked',\n 'Check box enabled': 'Check box enabled',\n 'Text Form Field': 'Text Form Field',\n 'Type': 'Type',\n 'Default text': 'Default text',\n 'Maximum length': 'Maximum length',\n 'Text format': 'Text format',\n 'Fillin enabled': 'Fill-in enabled',\n 'Default number': 'Default number',\n 'Default date': 'Default date',\n 'Date format': 'Date format',\n 'Merge Track': 'This action wont be marked as change. Do you want to continue?',\n 'UnTrack': 'Cannot be tracked !',\n 'Accept': 'Accept',\n 'Reject': 'Reject',\n 'Previous Changes': 'Previous Changes',\n 'Next Changes': 'Next Changes',\n 'Inserted': 'Inserted',\n 'Deleted': 'Deleted',\n 'Move From': 'Move From',\n 'Move To': 'Move To',\n 'Changes': 'Changes',\n 'Accept all': 'Accept all',\n 'Reject all': 'Reject all',\n 'No changes': 'No changes',\n 'Accept Changes': 'Accept Changes',\n 'Reject Changes': 'Reject Changes',\n 'User': 'User',\n 'View': 'View',\n 'Insertion': 'Insertion',\n 'Deletion': 'Deletion',\n 'All caps': 'All caps',\n 'This region is locked by': 'This region is locked by',\n 'Lock': 'Lock',\n 'Unlock': 'Unlock',\n 'Already locked': 'Selected or part of region is already locked by another user',\n 'Click to View/Edit Footnote': 'Click to View/Edit Footnote',\n 'Click to View/Edit Endnote': 'Click to View/Edit Endnote',\n 'Multiple Comment': 'Please post your comment',\n 'No suggestions': 'No suggestions',\n 'More Suggestion': 'More Suggestion',\n 'Ignore Once': 'Ignore Once',\n 'Keep With Next': 'Keep with next',\n 'Keep Lines Together': 'Keep lines together',\n 'WidowControl': 'Widow/Orphan control',\n 'Indents and Spacing': 'Indents and Spacing',\n 'Line and Page Breaks': 'Line and Page Breaks',\n 'Pagination': 'Pagination',\n 'Single': 'Single',\n 'DashSmallGap': 'DashSmallGap',\n 'DashDot': 'DashDot',\n 'Double': 'Double',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'Inset': 'Inset',\n 'DashLargeGap': 'DashLargeGap',\n 'Dot': 'Dot',\n 'DashDotDot': 'DashDotDot',\n 'Triple': 'Triple',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'DashDotStroked': 'DashDotStroked',\n 'Engrave3D': 'Engrave3D',\n 'Thick': 'Thick',\n 'Outset': 'Outset',\n 'Emboss3D': 'Emboss3D',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'Number of rows must be between 1 and 32767.': 'Number of rows must be between 1 and 32767.',\n 'Number of columns must be between 1 and 63.': 'Number of columns must be between 1 and 63.',\n 'Unlimited': 'Unlimited',\n 'Regular text': 'Regular text',\n 'Date': 'Date',\n 'Uppercase': 'Uppercase',\n 'Lowercase': 'Lowercase',\n 'FirstCapital': 'FirstCapital',\n 'TitleCase': 'Titlecase',\n 'Filling in forms': 'Filling in forms',\n 'px': 'px',\n 'Tracked changes': 'Tracked changes',\n 'TrackChangesOnly': 'You may edit in this region, but all change will be tracked.',\n 'RemovedIgnoreExceptions': 'If you make this change in document protection, Word will ignore all the exceptions in this document.',\n 'RemovedIgnore': 'Do you want to remove the ignored exceptions?',\n 'Information': 'Information',\n 'Yes': 'Yes',\n 'No': 'No'\n };\n _this.initHelper();\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n * @returns {boolean} - Returns true if header and footer is enabled.\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n set: function (value) {\n this.enableHeaderFooterIn = value;\n if (!value && this.selection && this.selection.isWebLayout) {\n this.selection.isWebLayout = false;\n }\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n *\n * @returns {number} - Returns the page count.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer) || this.viewer instanceof WebLayoutViewer) {\n return 1;\n }\n return this.documentHelper.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n *\n * @default undefined\n * @aspType Selection\n * @returns {Selection} - Returns the selection object.\n */\n get: function () {\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n *\n * @aspType Editor\n * @returns {Editor} - Returns the editor object.\n */\n get: function () {\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n *\n * @aspType EditorHistory\n * @returns {EditorHistory} - Returns the editor history object.\n */\n get: function () {\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"search\", {\n /**\n * Gets the search object of the document editor.\n *\n * @aspType Search\n * @returns { Search } - Returns the search object.\n */\n get: function () {\n return this.searchModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n *\n * @aspType ContextMenu\n * @returns {ContextMenu} - Returns the context menu object.\n */\n get: function () {\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellCheckDialog\", {\n /**\n * Gets the spell check dialog object of the document editor.\n *\n * @returns {SpellCheckDialog} - Returns the spell check dialog object.\n */\n get: function () {\n return this.spellCheckDialogModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellChecker\", {\n /**\n * Gets the spell check object of the document editor.\n *\n * @aspType SpellChecker\n * @returns {SpellChecker} - Returns the spell checker object.\n */\n get: function () {\n return this.spellCheckerModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n * @returns {string }- Returns the container id.\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n * @returns {boolean} - Returns true if document is loaded.\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"revisions\", {\n /**\n * Gets the revision collection which contains information about changes made from original document\n *\n * @returns {RevisionCollection} - Returns the revision collection object.\n */\n get: function () {\n if (isNullOrUndefined(this.revisionsInternal)) {\n this.revisionsInternal = new RevisionCollection(this);\n }\n return this.revisionsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n *\n * @default - false\n * @private\n * @returns {boolean} - Returns true if history module is enabled.\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document start.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentStart();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document end.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentEnd();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isReadOnlyMode.\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule)\n || isNullOrUndefined(this.selectionModule) || !isNullOrUndefined(this.editor) && this.editor.restrictEditing;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isSpellCheck\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isSpellCheck.\n */\n get: function () {\n return this.enableSpellCheck && this.spellChecker.enableSpellCheck;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n *\n * @private\n * @returns {boolean} - Returns enableImageResizerMode.\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n }\n else {\n DocumentEditor_1.Inject(Regular);\n }\n //pre render section\n this.findResultsList = [];\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n if (this.refreshing) {\n this.initHelper();\n }\n };\n DocumentEditor.prototype.initHelper = function () {\n this.documentHelper = new DocumentHelper(this);\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n this.viewer = new WebLayoutViewer(this);\n }\n this.parser = new SfdtReader(this.documentHelper);\n };\n DocumentEditor.prototype.render = function () {\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n }\n this.textMeasureHelper = (this.optimizedModule) ? this.optimizedModule : this.regularModule;\n if (isNullOrUndefined(this.textMeasureHelper)) {\n this.textMeasureHelper = new Optimized(this.documentHelper);\n }\n this.documentHelper.initializeComponents();\n this.openBlank();\n this.renderComplete();\n this.createdTriggered = true;\n };\n /**\n * Get component name\n *\n * @private\n * @returns {string} - Returns module name.\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {DocumentEditorModel} model - Specifies the new model.\n * @param {DocumentEditorModel} oldProp - Specifies the old model.\n * @returns {void}\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableTrackChanges':\n if (this.documentHelper.isTrackedOnlyMode && !model.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n break;\n case 'zoomFactor':\n if (this.viewer && oldProp.zoomFactor !== model.zoomFactor) {\n this.documentHelper.zoomFactor = model.zoomFactor;\n }\n break;\n case 'layoutType':\n if (this.selection && this.selection.isWebLayout) {\n break;\n }\n this.viewer.destroy();\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n if (this.enableHeaderAndFooter === true) {\n this.selection.closeHeaderFooter();\n }\n this.viewer = new WebLayoutViewer(this);\n }\n /* eslint-disable */\n var paragraph = this.selection.start.paragraph;\n if (paragraph.containerWidget instanceof FootNoteWidget) {\n this.selection.clearSelectionHighlightInSelectedWidgets();\n this.selection.selectContent(this.documentStart, true);\n }\n this.editor.layoutWholeDocument(true);\n setTimeout(function () {\n _this.fireViewChange();\n }, 200);\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.showComments) {\n this.commentReviewPane.showHidePane(true, 'Comments');\n }\n this.commentReviewPane.enableDisableItems();\n this.trackChangesPane.enableDisableButton(!this.isReadOnly && !this.documentHelper.isDocumentProtected);\n break;\n case 'currentUser':\n case 'userColor':\n if (this.selection && this.documentHelper.isDocumentProtected) {\n this.selection.highlightEditRegion();\n }\n this.viewer.updateScrollBars();\n break;\n case 'pageGap':\n case 'pageOutline':\n this.viewer.updateScrollBars();\n break;\n case 'zIndex':\n if (this.documentHelper.dialog) {\n this.documentHelper.dialog.zIndex = model.zIndex + 10;\n }\n if (this.documentHelper.dialog2) {\n this.documentHelper.dialog2.zIndex = model.zIndex;\n }\n break;\n case 'showComments':\n if (this.viewer && model.showComments !== oldProp.showComments) {\n this.documentHelper.showComments(model.showComments);\n }\n this.viewer.updateScrollBars();\n break;\n case 'enableRtl':\n this.localizeDialogs(model.enableRtl);\n break;\n case 'enableComment':\n if (this.viewer && this.showComments) {\n this.showComments = this.showComments ? this.enableComment : false;\n this.documentHelper.showComments(model.enableComment);\n }\n this.viewer.updateScrollBars();\n break;\n case 'showRevisions':\n if (this.isReadOnly || this.documentHelper.isDocumentProtected) {\n this.documentHelper.showRevisions(false);\n }\n else if (this.viewer) {\n this.documentHelper.showRevisions(model.showRevisions);\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentSettings':\n if (!isNullOrUndefined(model.documentSettings.compatibilityMode)) {\n var oldValue = oldProp.documentSettings.compatibilityMode;\n var newValue = model.documentSettings.compatibilityMode;\n if ((oldValue == \"Word2013\" && newValue != \"Word2013\") || (oldValue != \"Word2013\" && newValue == \"Word2013\")) {\n if (this.documentHelper.compatibilityMode !== newValue) {\n this.documentHelper.compatibilityMode = newValue;\n this.editor.layoutWholeDocument(true);\n }\n }\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentEditorSettings':\n if (!isNullOrUndefined(model.documentEditorSettings.enableOptimizedTextMeasuring)) {\n //Clears previously cached height information.\n this.documentHelper.heightInfoCollection = {};\n if (model.documentEditorSettings.enableOptimizedTextMeasuring) {\n this.textMeasureHelper = this.optimizedModule;\n }\n else {\n this.textMeasureHelper = this.regularModule;\n }\n }\n this.viewer.updateScrollBars();\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n this.resize();\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n this.resize();\n break;\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function (enableRtl) {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n if (!isNullOrUndefined(enableRtl)) {\n this.documentHelper.dialog.enableRtl = enableRtl;\n this.documentHelper.dialog2.enableRtl = enableRtl;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n, enableRtl);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.notesDialog(l10n, enableRtl);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n, enableRtl);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n, enableRtl);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n, enableRtl);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.contextMenuInstance.destroy();\n this.contextMenuModule.initContextMenu(l10n, enableRtl);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n, enableRtl);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n, enableRtl);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n, enableRtl);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n, enableRtl);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n, enableRtl);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n, enableRtl);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n, enableRtl);\n }\n if (this.commentReviewPane && this.commentReviewPane.parentPaneElement) {\n if (this.enableRtl) {\n classList(this.commentReviewPane.parentPaneElement, ['e-rtl'], []);\n }\n else {\n classList(this.commentReviewPane.parentPaneElement, [], ['e-rtl']);\n }\n }\n }\n };\n /**\n * Set the default character format for document editor\n *\n * @param {CharacterFormatProperties} characterFormat - Specifies the character format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = characterFormat;\n };\n /**\n * Set the default paragraph format for document editor\n *\n * @param {ParagraphFormatProperties} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n };\n /**\n * Set the default section format for document editor\n *\n * @param {SectionFormatProperties} sectionFormat - Specifies the section format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = sectionFormat;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n * @returns {string} - Returns the persisted data.\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.documentHelper.clearDocumentItems();\n }\n };\n /**\n * @private\n * @returns {HTMLElement} - Returns the document editor element.\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireContentChange = function () {\n if (this.enableLockAndEdit && this.collaborativeEditingModule) {\n this.collaborativeEditingModule.saveContent();\n }\n var eventArgs = { source: this };\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n if (this.enableLockAndEdit && this.enableEditor) {\n this.editor.enforceProtection('', false, true);\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (!this.documentHelper.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n var eventArgs = { source: this };\n // if (this.createdTriggered) {\n this.trigger(selectionChangeEvent, eventArgs);\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n var eventArgs = { source: this };\n this.trigger(zoomFactorChangeEvent, eventArgs);\n this.notify(internalZoomFactorChange, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireBeformFieldFill = function () {\n var eventArgs = {};\n this.trigger(beforeFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireAfterFormFieldFill = function () {\n var eventArgs = {};\n this.trigger(afterFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @param {ServiceFailureArgs} eventArgs - Specifies the event args.\n * @returns {void}\n */\n DocumentEditor.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.documentHelper.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1,\n source: this\n };\n this.trigger(viewChangeEvent, eventArgs);\n this.notify(internalviewChangeEvent, eventArgs);\n }\n }\n };\n /**\n * @private\n * @param {string} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuSelect = function (item) {\n var eventArgs = { id: item };\n this.trigger(customContextMenuSelectEvent, eventArgs);\n };\n /**\n * @private\n * @param {string[]} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuBeforeOpen = function (item) {\n var eventArgs = { ids: item };\n this.trigger(customContextMenuBeforeOpenEvent, eventArgs);\n };\n /**\n * Shows the Paragraph dialog\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n };\n /**\n * Shows the margin dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n };\n /**\n * Shows the Footnote dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showFootNotesDialog = function () {\n if (this.footNotesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.footNotesDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n *\n * @private\n * @param {WCharacterFormat} characterFormat - Specifies character format.\n * @returns {void}\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n };\n /**\n * Shows the cell option dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n };\n /**\n * Shows insert table dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n };\n /**\n * Shows the table of content dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n };\n /**\n * Shows the style dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n };\n /**\n * Shows the hyperlink dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n };\n /**\n * Shows the bookmark dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n };\n /**\n * Shows the styles dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n };\n /**\n * Shows the List dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n };\n /**\n * Shows the borders and shading dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n };\n /* eslint-disable */\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableLockAndEdit) {\n modules.push({\n member: 'CollaborativeEditing', args: [this]\n });\n }\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.documentHelper]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.documentHelper]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.documentHelper]\n });\n }\n }\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n modules.push({ member: 'Optimized', args: [this.documentHelper] });\n }\n else {\n DocumentEditor_1.Inject(Regular);\n modules.push({ member: 'Regular', args: [this.documentHelper] });\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.documentHelper]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.documentHelper]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.documentHelper]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFootnoteAndEndnoteDialog) {\n modules.push({\n member: 'FootNotesDialog', args: [this.documentHelper]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'StyleDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.documentHelper]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableSpellCheck) {\n modules.push({\n member: 'SpellChecker', args: [this.documentHelper]\n });\n modules.push({\n member: 'SpellCheckDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFormField) {\n modules.push({\n member: 'TextFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'DropDownFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'CheckBoxFormFieldDialog', args: [this]\n });\n }\n }\n return modules;\n };\n /* eslint-enable */\n // Public Implementation Starts\n /**\n * Opens the given Sfdt text.\n *\n * @param {string} sfdtText - Specifies the sfdt text.\n * @returns {void}\n */\n DocumentEditor.prototype.open = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer)) {\n this.showComments = false;\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.lists = [];\n this.documentHelper.abstractLists = [];\n this.documentHelper.styles = new WStyles();\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n if (this.isSpellCheck && !this.spellChecker.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = true;\n this.documentHelper.triggerSpellCheck = true;\n }\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText));\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n }\n }\n if (this.isSpellCheck && !this.spellChecker.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = false;\n this.documentHelper.triggerSpellCheck = false;\n }\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n *\n * @param {number} pageNumber - Specifies the page number.\n * @returns {void}\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.documentHelper.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enableFootnoteAndEndnoteDialog\n = this.enablePageSetupDialog = this.enableStyleDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = this.enableSpellCheck = this.enableComment\n = this.enableFormField = true;\n /* eslint-disable-next-line max-len */\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, NotesDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog, SpellChecker, SpellCheckDialog, CheckBoxFormFieldDialog, TextFormFieldDialog, DropDownFormFieldDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n *\n * @param {number} width - Specifies the width\n * @param {number} height - Specifies the hight\n * @returns {void}\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.documentHelper.updateViewerSize();\n }\n if (this.trackChangesPane.toolbar) {\n this.trackChangesPane.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * Get all form field names.\n *\n * @returns {string[]} - Returns form field names.\n */\n DocumentEditor.prototype.getFormFieldNames = function () {\n var formFieldNames = [];\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (formFields[i].formFieldData.name !== '') {\n formFieldNames.push(formFields[i].formFieldData.name);\n }\n }\n return formFieldNames;\n };\n /**\n * Get form field by name\n *\n * @param {string} name - Form field name.\n * @returns {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} - Returns form field info.\n */\n DocumentEditor.prototype.getFormFieldInfo = function (name) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[i].formFieldData.name === name) && (formFields[i].formFieldData.name !== '')) {\n return formFields[i].formFieldData.getFormFieldInfo();\n }\n }\n return undefined;\n };\n /**\n * Set form field.\n *\n * @param {string} name - Specifies the form field name\n * @param {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} formFieldInfo - Form Field info.\n * @returns {void}\n */\n DocumentEditor.prototype.setFormFieldInfo = function (name, formFieldInfo) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[i].formFieldData.name === name) && (formFields[i].formFieldData.name !== '')) {\n var currentField = formFields[i];\n if (this.selection) {\n this.selection.selectFieldInternal(currentField);\n if (this.editor) {\n this.editor.setFormField(currentField, formFieldInfo);\n }\n }\n return;\n }\n }\n };\n /**\n * Reset form field value to default.\n *\n * @param {string} name - Specifies the form field name\n * @returns {void}\n */\n DocumentEditor.prototype.resetFormFields = function (name) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (isNullOrUndefined(name) || name === formFields[i].formFieldData.name) {\n if (formFields[i].formFieldData instanceof TextFormField) {\n this.editor.updateFormField(formFields[i], formFields[i].formFieldData.defaultValue, true);\n }\n else if (formFields[i].formFieldData instanceof CheckBoxFormField) {\n /* eslint-disable-next-line max-len */\n this.editor.toggleCheckBoxFormField(formFields[i], true, formFields[i].formFieldData.defaultValue);\n }\n else if (formFields[i].formFieldData instanceof DropDownFormField) {\n this.editor.updateFormField(formFields[i], 0, true);\n }\n }\n }\n };\n /**\n * Import form field values.\n *\n * @param {FormFieldData[]} formData - Specifies the form field values.\n * @returns {void}\n */\n DocumentEditor.prototype.importFormData = function (formData) {\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formData.length; i++) {\n var formFieldData = formData[i];\n var fieldName = formFieldData.fieldName;\n for (var j = 0; j < formField.length; j++) {\n if (formField[j].formFieldData.name === fieldName) {\n if (formField[j].formFieldData instanceof CheckBoxFormField) {\n this.editor.toggleCheckBoxFormField(formField[j], true, formFieldData.value);\n }\n else if (formField[j].formFieldData instanceof TextFormField) {\n this.editor.updateFormField(formField[j], formFieldData.value);\n }\n else if (formField[j].formFieldData instanceof DropDownFormField) {\n this.editor.updateFormField(formField[j], formFieldData.value);\n }\n }\n }\n }\n };\n /**\n * Export form field values.\n *\n * @returns {FormFieldData[]} - Returns the form field data.\n */\n DocumentEditor.prototype.exportFormData = function () {\n var data = [];\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formField.length; i++) {\n if (formField[i].formFieldData.name !== '') {\n var formData = { fieldName: '', value: '' };\n formData.fieldName = formField[i].formFieldData.name;\n if (formField[i].formFieldData instanceof CheckBoxFormField) {\n formData.value = formField[i].formFieldData.checked;\n }\n else if (formField[i].formFieldData instanceof TextFormField) {\n var resultText = '';\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n resultText = this.editorModule.getFieldResultText(formField[i]);\n }\n else {\n resultText = formField[i].resultText;\n }\n var rex = new RegExp(this.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n formData.value = resultText;\n }\n else if (formField[i].formFieldData instanceof DropDownFormField) {\n formData.value = formField[i].formFieldData.selectedIndex;\n }\n data.push(formData);\n }\n }\n return data;\n };\n /**\n * Updated fields in document.\n * Currently cross reference field only supported.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.updateFields = function () {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var field = this.documentHelper.fields[i];\n var code = this.selection.getFieldCode(field);\n if (code.toLowerCase().trim().indexOf('ref ') === 0) {\n this.selection.updateRefField(field);\n }\n }\n };\n /**\n * Shifts the focus to the document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.documentHelper.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n *\n * @param {PageFitType} pageFitType - Default value of ‘pageFitType’ parameter is 'None'\n * @returns {void}\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Export the specified page as Image.\n *\n * @param {number} pageNumber - Specifies the page number starts from index `1`.\n * @param {number} format - Specifies the image format.\n * @returns {HTMLImageElement} - Returns the html image element.\n */\n DocumentEditor.prototype.exportAsImage = function (pageNumber, format) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n var mimeType = format === 'Png' ? 'image/png' : 'image/jpeg';\n return this.printModule.exportAsImage(this.documentHelper, pageNumber, mimeType);\n }\n return undefined;\n };\n /**\n * Prints the document.\n *\n * @param {Window} printWindow - Default value of 'printWindow' parameter is undefined.\n * @returns {void}\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n if (this.layoutType === 'Continuous') {\n this.documentHelper.isWebPrinting = true;\n this.viewer = new PageLayoutViewer(this);\n this.editor.layoutWholeDocument();\n this.printModule.print(this.documentHelper, printWindow);\n this.viewer = new WebLayoutViewer(this);\n this.editor.layoutWholeDocument();\n this.documentHelper.isWebPrinting = false;\n }\n else {\n this.printModule.print(this.documentHelper, printWindow);\n }\n }\n else {\n throw new Error('Invalid operation. Print is not enabled.');\n }\n };\n /**\n * Serialize the data to JSON string.\n *\n * @returns {string} - Returns the data as JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n throw new Error('Invalid operation. Sfdt export is not enabled.');\n }\n return json;\n };\n /**\n * Saves the document.\n *\n * @param {string} fileName - Specifies the file name.\n * @param {FormatType} formatType - Specifies the format type.\n * @returns {void}\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.documentHelper)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' && this.wordExportModule) {\n if (this.wordExportModule) {\n this.wordExportModule.save(this.documentHelper, fileName);\n }\n }\n else if (formatType === 'Txt' && this.textExportModule) {\n this.textExportModule.save(this.documentHelper, fileName);\n }\n else if (formatType === 'Sfdt' && this.enableSfdtExport && this.sfdtExportModule) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n /**\n * Saves the document as blob.\n *\n * @param {FormatType} formatType - Specifies the format type.\n * @returns {Promise} - Returns the document as blob.\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve) {\n if (formatType === 'Docx' && _this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.documentHelper));\n }\n else if (formatType === 'Txt' && _this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.documentHelper));\n }\n else if (formatType === 'Sfdt' && _this.enableSfdtExport && _this.sfdtExportModule) {\n resolve(_this.sfdtExportModule.saveAsBlob(_this.documentHelper));\n }\n });\n };\n /**\n * Opens a blank document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.openBlank = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n if (this.sectionFormat) {\n this.parser.parseSectionFormat(this.sectionFormat, section.sectionFormat);\n }\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n var sections = [];\n sections.push(section);\n /* eslint-disable-next-line max-len */\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.headersFooters.push(hfs);\n this.documentHelper.onDocumentChanged(sections);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.documentHelper.styles.findByName('Normal');\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n };\n /**\n * Gets the style names based on given style type.\n *\n * @param {StyleType} styleType - Specifies the style type.\n * @returns {string[]} - Returns the style names.\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n *\n * @param {StyleType} styleType - Specifies the style type.\n * @returns {Object[]} - Returns the Specifies styles.\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyles(styleType);\n }\n return [];\n };\n /* eslint-enable */\n /**\n * Gets the bookmarks.\n *\n * @returns {string[]} - Returns the bookmark collection.\n */\n DocumentEditor.prototype.getBookmarks = function () {\n var bookmarks = [];\n if (this.viewer) {\n bookmarks = this.documentHelper.getBookmarks(true);\n }\n return bookmarks;\n };\n /**\n * Shows the dialog.\n *\n * @param {DialogType} dialogType - Specifies the dialog type.\n * @returns {void}\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n case 'SpellCheck':\n this.showSpellCheckDialog();\n break;\n }\n };\n /**\n * Shows the options pane.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n };\n /**\n * Shows the restrict editing pane.\n *\n * @param {boolean} show Specifies to show or hide restrict editing pane.\n * @returns {void}\n */\n DocumentEditor.prototype.showRestrictEditingPane = function (show) {\n show = isNullOrUndefined(show) ? true : show;\n if (this.documentHelper && this.documentHelper.restrictEditingPane) {\n this.documentHelper.restrictEditingPane.showHideRestrictPane(show);\n }\n };\n /**\n * Shows the spell check dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showSpellCheckDialog = function () {\n if (this.spellCheckDialogModule && this.spellChecker) {\n var element = this.spellChecker.retriveText();\n if (!isNullOrUndefined(element)) {\n this.spellCheckDialogModule.show(element.text, element.element);\n }\n }\n };\n /**\n * Destroys all managed resources used by this object.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.destroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element = undefined;\n }\n this.findResultsList = [];\n this.findResultsList = undefined;\n this.documentHelper = undefined;\n };\n DocumentEditor.prototype.clearSpellCheck = function () {\n if (!isNullOrUndefined(this.spellChecker)) {\n if (!isNullOrUndefined(this.spellChecker.errorWordCollection)) {\n this.spellChecker.errorWordCollection.clear();\n }\n if (!isNullOrUndefined(this.spellChecker.uniqueWordsCollection)) {\n this.spellChecker.uniqueWordsCollection.clear();\n }\n }\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (this.commentReviewPane) {\n this.commentReviewPane.destroy();\n this.commentReviewPane = undefined;\n }\n if (this.trackChangesPane) {\n this.trackChangesPane.destroy();\n this.trackChangesPane = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.destroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.destroy();\n this.footNotesDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n if (this.spellCheckerModule) {\n this.spellCheckerModule.destroy();\n this.spellCheckerModule = undefined;\n }\n };\n var DocumentEditor_1;\n __decorate([\n Property('KeepSourceFormatting')\n ], DocumentEditor.prototype, \"defaultPasteOption\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditor.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditor.prototype, \"userColor\", void 0);\n __decorate([\n Property(20)\n ], DocumentEditor.prototype, \"pageGap\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"documentName\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditor.prototype, \"width\", void 0);\n __decorate([\n Property('200px')\n ], DocumentEditor.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditor.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFootnoteAndEndnoteDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableComment\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"enableFormField\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"acceptTab\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"useCtrlClickToFollowHyperlink\", void 0);\n __decorate([\n Property('#000000')\n ], DocumentEditor.prototype, \"pageOutline\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableCursorOnReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditor.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditor.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditor.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property([])\n ], DocumentEditor.prototype, \"headers\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showComments\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showRevisions\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"keyDown\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"searchResultsChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentBegin\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentEnd\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFileOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"afterFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeXmlHttpRequestSend\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n}(Component));\nexport { DocumentEditor };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor.\n */\nvar ServerActionSettings = /** @class */ (function (_super) {\n __extends(ServerActionSettings, _super);\n function ServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SystemClipboard')\n ], ServerActionSettings.prototype, \"systemClipboard\", void 0);\n __decorate([\n Property('SpellCheck')\n ], ServerActionSettings.prototype, \"spellCheck\", void 0);\n __decorate([\n Property('RestrictEditing')\n ], ServerActionSettings.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property('CanLock')\n ], ServerActionSettings.prototype, \"canLock\", void 0);\n __decorate([\n Property('GetPendingActions')\n ], ServerActionSettings.prototype, \"getPendingActions\", void 0);\n return ServerActionSettings;\n}(ChildProperty));\nexport { ServerActionSettings };\n/**\n * Form field settings.\n */\nvar FormFieldSettings = /** @class */ (function (_super) {\n __extends(FormFieldSettings, _super);\n function FormFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#cfcfcf')\n ], FormFieldSettings.prototype, \"shadingColor\", void 0);\n __decorate([\n Property(true)\n ], FormFieldSettings.prototype, \"applyShading\", void 0);\n __decorate([\n Property('#cccccc')\n ], FormFieldSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Popup')\n ], FormFieldSettings.prototype, \"formFillingMode\", void 0);\n __decorate([\n Property([])\n ], FormFieldSettings.prototype, \"formattingExceptions\", void 0);\n return FormFieldSettings;\n}(ChildProperty));\nexport { FormFieldSettings };\n/**\n * Collaborative editing settings.\n */\nvar CollaborativeEditingSettings = /** @class */ (function (_super) {\n __extends(CollaborativeEditingSettings, _super);\n function CollaborativeEditingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CollaborativeEditingSettings.prototype, \"roomName\", void 0);\n __decorate([\n Property('#22b24b')\n ], CollaborativeEditingSettings.prototype, \"editableRegionColor\", void 0);\n __decorate([\n Property('#f44336')\n ], CollaborativeEditingSettings.prototype, \"lockedRegionColor\", void 0);\n __decorate([\n Property(3000)\n ], CollaborativeEditingSettings.prototype, \"saveTimeout\", void 0);\n return CollaborativeEditingSettings;\n}(ChildProperty));\nexport { CollaborativeEditingSettings };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor Container.\n */\nvar ContainerServerActionSettings = /** @class */ (function (_super) {\n __extends(ContainerServerActionSettings, _super);\n function ContainerServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Import')\n ], ContainerServerActionSettings.prototype, \"import\", void 0);\n return ContainerServerActionSettings;\n}(ServerActionSettings));\nexport { ContainerServerActionSettings };\n","import { createElement, isNullOrUndefined, EventHandler, classList, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar as EJ2Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { showSpinner, hideSpinner, DialogUtility } from '@syncfusion/ej2-popups';\nimport { XmlHttpRequestHandler, beforePaneSwitchEvent, toolbarClickEvent, beforeFileOpenEvent } from '../../document-editor/base/index';\nimport { beforeXmlHttpRequestSend } from './../../index';\nvar TOOLBAR_ID = '_toolbar';\nvar NEW_ID = '_new';\nvar OPEN_ID = '_open';\nvar UNDO_ID = '_undo';\nvar REDO_ID = '_redo';\nvar INSERT_IMAGE_ID = '_image';\nvar INSERT_IMAGE_LOCAL_ID = '_image_local';\nvar INSERT_IMAGE_ONLINE_ID = '_image_url';\nvar INSERT_TABLE_ID = '_table';\nvar INSERT_LINK_ID = '_link';\nvar BOOKMARK_ID = '_bookmark';\nvar COMMENT_ID = '_comment';\nvar TRACK_ID = '_track';\nvar TABLE_OF_CONTENT_ID = '_toc';\nvar HEADER_ID = '_header';\nvar FOOTER_ID = '_footer';\nvar PAGE_SET_UP_ID = '_page_setup';\nvar PAGE_NUMBER_ID = '_page_number';\nvar BREAK_ID = '_break';\nvar FIND_ID = '_find';\nvar CLIPBOARD_ID = '_use_local_clipboard';\nvar RESTRICT_EDITING_ID = '_restrict_edit';\nvar PAGE_BREAK = '_page_break';\nvar SECTION_BREAK = '_section_break';\nvar READ_ONLY = '_read_only';\nvar PROTECTIONS = '_protections';\nvar FORM_FIELDS_ID = '_form_fields';\nvar UPDATE_FIELDS_ID = '_update_fields';\nvar TEXT_FORM = '_text_form';\nvar CHECKBOX = '_checkbox';\nvar DROPDOWN = '_dropdown';\nvar FOOTNOTE_ID = '_footnote';\nvar ENDNOTE_ID = '_endnote';\n/**\n * Toolbar Module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * @private\n * @param {DocumentEditorContainer} container - DocumentEditorContainer object.\n */\n function Toolbar(container) {\n /**\n * @private\n */\n this.isCommentEditing = false;\n this.container = container;\n this.importHandler = new XmlHttpRequestHandler();\n }\n Object.defineProperty(Toolbar.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number} itemIndex - Index of the toolbar items that need to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the toolbar item should be enabled or disabled. By default, `isEnable` is set to true.\n * @returns {void}\n */\n Toolbar.prototype.enableItems = function (itemIndex, isEnable) {\n this.toolbar.enableItems(itemIndex, isEnable);\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.initToolBar = function (items) {\n this.toolbarItems = items;\n this.renderToolBar();\n this.wireEvent();\n };\n Toolbar.prototype.renderToolBar = function () {\n if (isNullOrUndefined(this.container)) {\n return;\n }\n var toolbarContainer = this.container.toolbarContainer;\n var toolbarWrapper = createElement('div', { className: 'e-de-tlbr-wrapper' });\n var toolbarTarget = createElement('div', { className: 'e-de-toolbar' });\n this.initToolbarItems();\n toolbarWrapper.appendChild(toolbarTarget);\n toolbarContainer.appendChild(toolbarWrapper);\n // Show hide pane button initialization\n var propertiesPaneDiv = createElement('div', { className: 'e-de-ctnr-properties-pane-btn' });\n this.buttonElement = createElement('button', { attrs: { type: 'button' } });\n propertiesPaneDiv.appendChild(this.buttonElement);\n var cssClassName = 'e-tbar-btn e-tbtn-txt e-control e-btn e-de-showhide-btn';\n var iconCss = 'e-icons e-de-ctnr-showhide';\n if (this.container.enableRtl) {\n cssClassName += '-rtl';\n iconCss = 'e-icons e-de-ctnr-showhide e-de-flip';\n }\n this.propertiesPaneButton = new Button({\n cssClass: cssClassName,\n iconCss: iconCss\n });\n var locale = this.container.localObj;\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n this.propertiesPaneButton.appendTo(this.buttonElement);\n EventHandler.add(this.buttonElement, 'click', this.showHidePropertiesPane, this);\n toolbarContainer.appendChild(propertiesPaneDiv);\n this.toolbar.appendTo(toolbarTarget);\n this.initToolbarDropdown(toolbarTarget);\n };\n Toolbar.prototype.initToolbarDropdown = function (toolbarTarget) {\n var _this = this;\n if (this.container) {\n var locale = this.container.localObj;\n var id_1 = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Image') >= 0) {\n this.imgDropDwn = new DropDownButton({\n items: [\n {\n text: locale.getConstant('Upload from computer'), iconCss: 'e-icons e-de-ctnr-upload',\n id: id_1 + INSERT_IMAGE_LOCAL_ID\n }\n ],\n //,{ text: locale.getConstant('By URL'), iconCss: 'e-icons e-de-ctnr-link', id: id + INSERT_IMAGE_ONLINE_ID }],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.imgDropDwn.appendTo('#' + id_1 + INSERT_IMAGE_ID);\n }\n if (this.toolbarItems.indexOf('Break') >= 0) {\n this.breakDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Page Break'), iconCss: 'e-icons e-de-ctnr-page-break', id: id_1 + PAGE_BREAK },\n { text: locale.getConstant('Section Break'), iconCss: 'e-icons e-de-ctnr-section-break', id: id_1 + SECTION_BREAK }\n ],\n cssClass: 'e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.breakDropDwn.appendTo('#' + id_1 + BREAK_ID);\n }\n this.filePicker = createElement('input', {\n attrs: { type: 'file', accept: '.doc,.docx,.rtf,.txt,.htm,.html,.sfdt' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.filePicker);\n }\n this.imagePicker = createElement('input', {\n attrs: { type: 'file', accept: '.jpg,.jpeg,.png,.bmp,.svg' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.imagePicker);\n }\n if (this.toolbarItems.indexOf('LocalClipboard') >= 0) {\n this.toggleButton(id_1 + CLIPBOARD_ID, this.container.enableLocalPaste);\n }\n if (this.toolbarItems.indexOf('TrackChanges') >= 0) {\n this.toggleButton(id_1 + TRACK_ID, this.container.enableTrackChanges);\n }\n if (this.toolbarItems.indexOf('RestrictEditing') >= 0) {\n this.toggleButton(id_1 + RESTRICT_EDITING_ID, this.container.restrictEditing);\n var restrictIconCss = '';\n if (this.container.restrictEditing) {\n restrictIconCss = ' e-de-selected-item';\n }\n this.restrictDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Read only'), id: id_1 + READ_ONLY, iconCss: 'e-icons' + restrictIconCss },\n { text: locale.getConstant('Protections'), id: id_1 + PROTECTIONS, iconCss: 'e-icons' }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this),\n beforeItemRender: function (args) {\n _this.onBeforeRenderRestrictDropdown(args, id_1);\n }\n });\n this.restrictDropDwn.appendTo('#' + id_1 + RESTRICT_EDITING_ID);\n }\n if (this.toolbarItems.indexOf('FormFields') >= 0) {\n this.formFieldDropDown = new DropDownButton({\n items: [\n { text: locale.getConstant('Text Form'), iconCss: 'e-icons e-de-textform', id: id_1 + TEXT_FORM },\n { text: locale.getConstant('Check Box'), iconCss: 'e-icons e-de-checkbox-form', id: id_1 + CHECKBOX },\n { text: locale.getConstant('DropDown'), iconCss: 'e-icons e-de-dropdownform', id: id_1 + DROPDOWN }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.formFieldDropDown.appendTo('#' + id_1 + FORM_FIELDS_ID);\n }\n }\n };\n Toolbar.prototype.onBeforeRenderRestrictDropdown = function (args, id) {\n var selectedIcon = args.element.getElementsByClassName('e-menu-icon')[0];\n if (!isNullOrUndefined(selectedIcon)) {\n if (args.item.id === id + READ_ONLY) {\n this.toggleRestrictIcon(selectedIcon, this.container.restrictEditing);\n }\n if (args.item.id === id + PROTECTIONS) {\n var restrictPane = document.getElementsByClassName('e-de-restrict-pane')[0];\n if (!isNullOrUndefined(restrictPane)) {\n var toggleProtection = !(restrictPane.style.display === 'none');\n this.toggleRestrictIcon(selectedIcon, toggleProtection);\n }\n }\n }\n };\n Toolbar.prototype.toggleRestrictIcon = function (icon, toggle) {\n if (toggle) {\n icon.classList.add('e-de-selected-item');\n }\n else {\n icon.classList.remove('e-de-selected-item');\n }\n };\n Toolbar.prototype.showHidePropertiesPane = function () {\n var paneDiv = document.getElementsByClassName('e-de-ctnr-properties-pane-btn')[0];\n var locale = this.container.localObj;\n if (this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = true;\n paneDiv.classList.remove('e-de-pane-disable-clr');\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n classList(paneDiv, ['e-de-pane-enable-clr'], []);\n this.container.trigger(beforePaneSwitchEvent, { type: 'PropertiesPane' });\n }\n else if (this.container.previousContext.indexOf('Header') >= 0\n || this.container.previousContext.indexOf('Footer') >= 0) {\n this.container.showHeaderProperties = !this.container.showHeaderProperties;\n }\n else {\n this.container.showPropertiesPane = false;\n paneDiv.classList.remove('e-de-pane-enable-clr');\n this.buttonElement.title = locale.getConstant('Show properties pane');\n classList(paneDiv, ['e-de-pane-disable-clr'], []);\n }\n this.enableDisablePropertyPaneButton(this.container.showPropertiesPane);\n this.container.showPropertiesPaneOnSelection();\n this.documentEditor.focusIn();\n };\n Toolbar.prototype.onWrapText = function (text) {\n var content = '';\n var index = text.lastIndexOf(' ');\n if (index !== -1) {\n content = text.slice(0, index);\n text.slice(index);\n content += '
      ' + text.slice(index) + '
      ';\n }\n else {\n content = text;\n }\n return content;\n };\n Toolbar.prototype.wireEvent = function () {\n this.propertiesPaneButton.on('click', this.togglePropertiesPane.bind(this));\n EventHandler.add(this.filePicker, 'change', this.onFileChange, this);\n EventHandler.add(this.imagePicker, 'change', this.onImageChange, this);\n };\n Toolbar.prototype.initToolbarItems = function () {\n this.toolbar = new EJ2Toolbar({\n enableRtl: this.container.enableRtl,\n clicked: this.clickHandler.bind(this),\n items: this.getToolbarItems()\n });\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.reInitToolbarItems = function (items) {\n var _this = this;\n for (var i = 0; i < items.length; i++) {\n switch (items[i]) {\n case 'RestrictEditing':\n if (!isNullOrUndefined(this.restrictDropDwn)) {\n this.restrictDropDwn.destroy();\n }\n break;\n case 'Break':\n if (!isNullOrUndefined(this.breakDropDwn)) {\n this.breakDropDwn.destroy();\n }\n break;\n case 'Image':\n if (!isNullOrUndefined(this.imgDropDwn)) {\n this.imgDropDwn.destroy();\n }\n break;\n case 'FormFields':\n if (!isNullOrUndefined(this.formFieldDropDown)) {\n this.formFieldDropDown.destroy();\n }\n break;\n }\n }\n this.toolbarItems = items;\n var toolbarTarget = this.container.toolbarContainer;\n this.toolbar.items = this.getToolbarItems();\n /* eslint-disable @typescript-eslint/indent */\n this.toolbarTimer = setTimeout(function () {\n if (_this.toolbarTimer) {\n clearTimeout(_this.toolbarTimer);\n }\n _this.initToolbarDropdown(toolbarTarget);\n if (items.indexOf('Open') >= 0) {\n EventHandler.add(_this.filePicker, 'change', _this.onFileChange, _this);\n }\n if (items.indexOf('Image') >= 0) {\n EventHandler.add(_this.imagePicker, 'change', _this.onImageChange, _this);\n }\n }, 200);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.getToolbarItems = function () {\n var locale = this.container.localObj;\n var id = this.container.element.id + TOOLBAR_ID;\n var toolbarItems = [];\n var className;\n var tItem = this.toolbarItems;\n for (var i = 0; i < this.toolbarItems.length; i++) {\n if (i === 0) {\n className = 'e-de-toolbar-btn-start';\n }\n else if ((tItem[i + 1] === 'Separator') && (tItem[i - 1] === 'Separator')) {\n className = 'e-de-toolbar-btn';\n }\n else if (tItem[i + 1] === 'Separator') {\n className = 'e-de-toolbar-btn-last';\n }\n else if (tItem[i - 1] === 'Separator') {\n className = 'e-de-toolbar-btn-first';\n }\n else if (i === (this.toolbarItems.length - 1)) {\n className = 'e-de-toolbar-btn-end';\n }\n else {\n className = 'e-de-toolbar-btn-middle';\n }\n switch (tItem[i]) {\n case 'Separator':\n toolbarItems.push({\n type: 'Separator', cssClass: 'e-de-separator'\n });\n break;\n case 'New':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-new', tooltipText: locale.getConstant('Create a new document'),\n id: id + NEW_ID, text: locale.getConstant('New'), cssClass: className\n });\n break;\n case 'Open':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-open', tooltipText: locale.getConstant('Open a document'), id: id + OPEN_ID,\n text: locale.getConstant('Open'), cssClass: className\n });\n break;\n case 'Undo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-undo', tooltipText: locale.getConstant('Undo Tooltip'),\n id: id + UNDO_ID, text: locale.getConstant('Undo'), cssClass: className\n });\n break;\n case 'Redo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-redo', tooltipText: locale.getConstant('Redo Tooltip'),\n id: id + REDO_ID, text: locale.getConstant('Redo'), cssClass: className\n });\n break;\n case 'Comments':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-cmt-add',\n tooltipText: locale.getConstant('Show comments'),\n id: id + COMMENT_ID, text: locale.getConstant('Comments'), cssClass: className\n });\n break;\n case 'TrackChanges':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-track',\n tooltipText: locale.getConstant('Track Changes'),\n id: id + TRACK_ID, text: this.onWrapText(locale.getConstant('TrackChanges')), cssClass: className\n });\n break;\n case 'Image':\n toolbarItems.push({\n template: '',\n id: id + INSERT_IMAGE_ID\n });\n break;\n case 'Table':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-table', tooltipText: locale.getConstant('Insert a table into the document'),\n id: id + INSERT_TABLE_ID, text: locale.getConstant('Table'), cssClass: className\n });\n break;\n case 'Hyperlink':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-link',\n tooltipText: locale.getConstant('Create Hyperlink'),\n id: id + INSERT_LINK_ID, text: locale.getConstant('Link'), cssClass: className\n });\n break;\n case 'Bookmark':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-bookmark',\n tooltipText: locale.getConstant('Insert a bookmark in a specific place in this document'),\n id: id + BOOKMARK_ID, text: locale.getConstant('Bookmark'), cssClass: className\n });\n break;\n case 'TableOfContents':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-tableofcontent',\n tooltipText: locale.getConstant('Provide an overview of your document by adding a table of contents'),\n id: id + TABLE_OF_CONTENT_ID, text: this.onWrapText(locale.getConstant('Table of Contents')),\n cssClass: className\n });\n break;\n case 'Header':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-header', tooltipText: locale.getConstant('Add or edit the header'),\n id: id + HEADER_ID, text: locale.getConstant('Header'), cssClass: className\n });\n break;\n case 'Footer':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-footer', tooltipText: locale.getConstant('Add or edit the footer'),\n id: id + FOOTER_ID, text: locale.getConstant('Footer'), cssClass: className\n });\n break;\n case 'PageSetup':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-pagesetup', tooltipText: locale.getConstant('Open the page setup dialog'),\n id: id + PAGE_SET_UP_ID, text: this.onWrapText(locale.getConstant('Page Setup')),\n cssClass: className\n });\n break;\n case 'PageNumber':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-pagenumber', tooltipText: locale.getConstant('Add page numbers'),\n id: id + PAGE_NUMBER_ID, text: this.onWrapText(locale.getConstant('Page Number')),\n cssClass: className\n });\n break;\n case 'Break':\n toolbarItems.push({\n template: '',\n id: id + BREAK_ID\n });\n break;\n case 'Find':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-find', tooltipText: locale.getConstant('Find Text'),\n id: id + FIND_ID, text: locale.getConstant('Find'), cssClass: className\n });\n break;\n case 'LocalClipboard':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-paste',\n tooltipText: locale.getConstant('Toggle between the internal clipboard and system clipboard'),\n id: id + CLIPBOARD_ID, text: this.onWrapText(locale.getConstant('Local Clipboard')),\n cssClass: className\n });\n break;\n case 'RestrictEditing':\n toolbarItems.push({\n template: ''\n });\n break;\n case 'FormFields':\n toolbarItems.push({\n template: '',\n id: id + FORM_FIELDS_ID\n });\n break;\n case 'UpdateFields':\n toolbarItems.push({\n prefixIcon: 'e-de-update-field', tooltipText: locale.getConstant('Update cross reference fields'),\n id: id + UPDATE_FIELDS_ID, text: this.onWrapText(locale.getConstant('Update Fields')),\n cssClass: className + ' e-de-formfields'\n });\n break;\n case 'InsertFootnote':\n toolbarItems.push({\n prefixIcon: 'e-de-footnote', tooltipText: locale.getConstant('Footnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Footnote')), id: id + FOOTNOTE_ID,\n cssClass: className\n });\n break;\n case 'InsertEndnote':\n toolbarItems.push({\n prefixIcon: 'e-de-endnote', tooltipText: locale.getConstant('Endnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Endnote')), id: id + ENDNOTE_ID,\n cssClass: className\n });\n break;\n default:\n //Here we need to process the items\n toolbarItems.push(tItem[i]);\n break;\n }\n }\n return toolbarItems;\n };\n Toolbar.prototype.clickHandler = function (args) {\n var id = this.container.element.id + TOOLBAR_ID;\n switch (args.item.id) {\n case id + NEW_ID:\n this.container.documentEditor.openBlank();\n break;\n case id + OPEN_ID:\n this.filePicker.value = '';\n this.filePicker.click();\n break;\n case id + UNDO_ID:\n this.container.documentEditor.editorHistory.undo();\n break;\n case id + REDO_ID:\n this.container.documentEditor.editorHistory.redo();\n break;\n case id + INSERT_TABLE_ID:\n this.container.documentEditor.showDialog('Table');\n break;\n case id + INSERT_LINK_ID:\n this.container.documentEditor.showDialog('Hyperlink');\n break;\n case id + BOOKMARK_ID:\n this.container.documentEditor.showDialog('Bookmark');\n break;\n case id + COMMENT_ID:\n this.documentEditor.editor.isUserInsert = true;\n this.documentEditor.editor.insertComment('');\n this.documentEditor.editor.isUserInsert = false;\n break;\n case id + TRACK_ID:\n this.toggleTrackChangesInternal(args.item.id);\n break;\n case id + HEADER_ID:\n this.container.documentEditor.selection.goToHeader();\n this.container.statusBar.toggleWebLayout();\n break;\n case id + TABLE_OF_CONTENT_ID:\n this.onToc();\n break;\n case id + FOOTER_ID:\n this.container.documentEditor.selection.goToFooter();\n this.container.statusBar.toggleWebLayout();\n break;\n case id + PAGE_SET_UP_ID:\n this.container.documentEditor.showDialog('PageSetup');\n break;\n case id + PAGE_NUMBER_ID:\n this.container.documentEditor.editor.insertPageNumber();\n break;\n case id + FIND_ID:\n this.container.documentEditor.showOptionsPane();\n break;\n case id + CLIPBOARD_ID:\n this.toggleLocalPaste(args.item.id);\n break;\n case id + UPDATE_FIELDS_ID:\n this.documentEditor.updateFields();\n break;\n case id + FOOTNOTE_ID:\n this.documentEditor.editor.insertFootnote();\n break;\n case id + ENDNOTE_ID:\n this.documentEditor.editor.insertEndnote();\n break;\n default:\n this.container.trigger(toolbarClickEvent, args);\n break;\n }\n if (args.item.id !== id + FIND_ID && args.item.id !== id + INSERT_IMAGE_ID) {\n this.container.documentEditor.focusIn();\n }\n };\n Toolbar.prototype.toggleLocalPaste = function (id) {\n this.container.enableLocalPaste = !this.container.enableLocalPaste;\n this.toggleButton(id, this.container.enableLocalPaste);\n };\n Toolbar.prototype.toggleEditing = function () {\n this.container.restrictEditing = !this.container.restrictEditing;\n this.container.showPropertiesPane = !this.container.restrictEditing;\n };\n /**\n * @private\n * @param {boolean} enable - Enable/Disable restrictEditing changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleRestrictEditing = function (enable) {\n var restrictEditingId = this.container.element.id + TOOLBAR_ID + RESTRICT_EDITING_ID;\n var element = document.getElementById(restrictEditingId);\n if (element) {\n this.toggleButton(restrictEditingId, enable);\n }\n };\n Toolbar.prototype.toggleButton = function (id, toggle) {\n var element = document.getElementById(id);\n if (toggle) {\n classList(element, ['e-btn-toggle'], []);\n }\n else {\n classList(element, [], ['e-btn-toggle']);\n }\n };\n Toolbar.prototype.toggleTrackChangesInternal = function (id, enable) {\n if (!isNullOrUndefined(enable)) {\n this.container.enableTrackChanges = !enable;\n }\n this.container.enableTrackChanges = !this.container.enableTrackChanges;\n this.toggleButton(id, this.container.enableTrackChanges);\n };\n Toolbar.prototype.togglePropertiesPane = function () {\n this.container.showPropertiesPane = !this.container.showPropertiesPane;\n };\n Toolbar.prototype.onDropDownButtonSelect = function (args) {\n var _this = this;\n var parentId = this.container.element.id + TOOLBAR_ID;\n var id = args.item.id;\n if (id === parentId + PAGE_BREAK) {\n this.container.documentEditor.editorModule.insertPageBreak();\n }\n else if (id === parentId + SECTION_BREAK) {\n this.container.documentEditor.editorModule.insertSectionBreak();\n }\n else if (id === parentId + INSERT_IMAGE_LOCAL_ID) {\n this.imagePicker.value = '';\n this.imagePicker.click();\n }\n else if (id === parentId + INSERT_IMAGE_ONLINE_ID) {\n // Need to implement image dialog;\n }\n else if (id === parentId + READ_ONLY) {\n this.toggleEditing();\n }\n else if (id === parentId + PROTECTIONS) {\n this.documentEditor.documentHelper.restrictEditingPane.showHideRestrictPane(true);\n }\n else if (id === parentId + CHECKBOX) {\n this.documentEditor.editor.insertFormField('CheckBox');\n }\n else if (id === parentId + DROPDOWN) {\n this.documentEditor.editor.insertFormField('DropDown');\n }\n else if (id === parentId + TEXT_FORM) {\n this.documentEditor.editor.insertFormField('Text');\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Toolbar.prototype.onFileChange = function () {\n var _this = this;\n var file = this.filePicker.files[0];\n var filesize = file.size;\n var check;\n var eventArgs = { fileSize: filesize, isCanceled: check };\n this.documentEditor.trigger(beforeFileOpenEvent, eventArgs);\n if (eventArgs.isCanceled) {\n return;\n }\n if (file) {\n if (file.name.substr(file.name.lastIndexOf('.')) === '.sfdt') {\n var fileReader_1 = new FileReader();\n fileReader_1.onload = function () {\n _this.container.documentEditor.open(fileReader_1.result);\n };\n fileReader_1.readAsText(file);\n }\n else {\n this.convertToSfdt(file);\n }\n this.container.documentEditor.documentName = file.name.substr(0, file.name.lastIndexOf('.'));\n }\n };\n Toolbar.prototype.convertToSfdt = function (file) {\n showSpinner(this.container.containerTarget);\n this.importHandler.url = this.container.serviceUrl + this.container.serverActionSettings.import;\n this.importHandler.onSuccess = this.successHandler.bind(this);\n this.importHandler.onFailure = this.failureHandler.bind(this);\n this.importHandler.onError = this.failureHandler.bind(this);\n this.importHandler.customHeaders = this.container.headers;\n var httprequestEventArgs = { serverActionType: 'Import', headers: this.container.headers, timeout: 0, cancel: false, withCredentials: false };\n this.container.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n var formData = new FormData();\n formData.append('files', file);\n if (httprequestEventArgs.cancel) {\n hideSpinner(this.container.containerTarget);\n }\n else {\n this.importHandler.send(formData, httprequestEventArgs);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.failureHandler = function (args) {\n if (args.name === 'onError') {\n DialogUtility.alert({\n content: this.container.localObj.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true,\n position: { X: 'Center', Y: 'Center' }\n });\n }\n else {\n alert('Failed to load the file');\n this.documentEditor.fireServiceFailure(args);\n }\n hideSpinner(this.container.containerTarget);\n };\n Toolbar.prototype.successHandler = function (result) {\n this.container.documentEditor.open(result.data);\n hideSpinner(this.container.containerTarget);\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.onImageChange = function () {\n var _this = this;\n var file = this.imagePicker.files[0];\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.insertImage(fileReader.result);\n };\n fileReader.readAsDataURL(file);\n };\n Toolbar.prototype.insertImage = function (data) {\n var image = document.createElement('img');\n var container = this.container;\n image.addEventListener('load', function () {\n container.documentEditor.editor.insertImageInternal(data, true, this.width, this.height);\n });\n image.src = data;\n };\n Toolbar.prototype.enableDisableFormField = function (enable) {\n var ele = document.getElementById('container_toolbar_form_fields');\n if (!isNullOrUndefined(ele)) {\n this.toolbar.enableItems(ele.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable insert comment toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableInsertComment = function (enable) {\n this.isCommentEditing = !enable;\n var id = this.container.element.id + TOOLBAR_ID;\n var commentId = id + COMMENT_ID;\n var element = document.getElementById(commentId);\n if (!this.container.enableComment && element) {\n this.toolbar.removeItems(element.parentElement);\n }\n else if (element) {\n if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n this.documentEditor.documentHelper.isDocumentProtected)) {\n enable = this.documentEditor.documentHelper.isCommentOnlyMode || !this.documentEditor.isReadOnlyMode;\n }\n this.toolbar.enableItems(element.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable track changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleTrackChanges = function (enable) {\n var trackId = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n var element = document.getElementById(trackId);\n if (element) {\n this.toggleTrackChangesInternal(trackId, enable);\n }\n };\n // /**\n // * @private\n // */\n // public enableDisableTrackChanges(enable: boolean): void {\n // let id: string = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n // if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n // this.documentEditor.documentHelper.isDocumentProtected)) {\n // enable = false;\n // }\n // this.toggleTrackChanges(id, enable);\n // }\n /**\n * @private\n * @param {boolean} enable - Enable/Diable toolbar items.\n * @param {boolean} isProtectedContent - Define whether document is protected.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableToolBarItem = function (enable, isProtectedContent) {\n var id = this.container.element.id + TOOLBAR_ID;\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var itemId = item.id;\n if (itemId !== id + NEW_ID && itemId !== id + OPEN_ID && itemId !== id + FIND_ID &&\n itemId !== id + CLIPBOARD_ID && itemId !== id + RESTRICT_EDITING_ID\n && item.type !== 'Separator') {\n if (enable && this.isCommentEditing && itemId === id + COMMENT_ID) {\n continue;\n }\n if (itemId !== id + UNDO_ID && itemId !== id + REDO_ID && itemId !== id + INSERT_TABLE_ID &&\n itemId !== id + INSERT_LINK_ID && itemId !== id + BOOKMARK_ID && itemId !== id + COMMENT_ID &&\n itemId !== id + HEADER_ID && itemId !== id + TABLE_OF_CONTENT_ID && itemId !== id + FOOTER_ID &&\n itemId !== id + PAGE_SET_UP_ID && itemId !== id + PAGE_NUMBER_ID && itemId !== id + INSERT_IMAGE_ID\n && itemId !== id + FORM_FIELDS_ID && itemId !== id + BREAK_ID && itemId !== id + TRACK_ID\n && itemId !== id + FOOTNOTE_ID && itemId !== id + ENDNOTE_ID && itemId !== id + UPDATE_FIELDS_ID) {\n continue;\n }\n if (isProtectedContent && this.documentEditor.documentHelper.isFormFillProtectedMode && itemId === id + UPDATE_FIELDS_ID) {\n continue;\n }\n var element = document.getElementById(item.id);\n if (!isNullOrUndefined(element) && !isNullOrUndefined(element.parentElement)) {\n this.toolbar.enableItems(element.parentElement, enable);\n }\n }\n }\n if (!isNullOrUndefined(this.documentEditor)) {\n this.enableDisableFormField(!this.documentEditor.enableHeaderAndFooter && enable && !this.documentEditor.isReadOnlyMode);\n }\n if (this.documentEditor.selection.isinFootnote || this.documentEditor.selection.isinEndnote || this.documentEditor.enableHeaderAndFooter) {\n if (this.containsItem(id + ENDNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + ENDNOTE_ID).parentElement, false);\n }\n if (this.containsItem(id + FOOTNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + FOOTNOTE_ID).parentElement, false);\n }\n }\n if (!isProtectedContent || this.container.showPropertiesPane) {\n if (isProtectedContent) {\n enable = this.container.showPropertiesPane;\n }\n classList(this.propertiesPaneButton.element.parentElement, !enable ? ['e-de-overlay'] : [], !enable ? [] : ['e-de-overlay']);\n }\n var protectionType = this.documentEditor.documentHelper.protectionType;\n if (enable || (this.documentEditor.documentHelper.isDocumentProtected &&\n (protectionType === 'FormFieldsOnly' || protectionType === 'CommentsOnly'))) {\n this.enableDisableUndoRedo();\n }\n if (this.documentEditor.documentHelper.isTrackedOnlyMode) {\n this.toolbar.enableItems(document.getElementById(id + TRACK_ID).parentElement, false);\n }\n };\n Toolbar.prototype.containsItem = function (id) {\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.id === id) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Toolbar.prototype.enableDisableUndoRedo = function () {\n var id = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Undo') >= 0) {\n var undoElement = document.getElementById(id + UNDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(undoElement)) {\n this.toolbar.enableItems(undoElement.parentElement, this.container.documentEditor.editorHistory.canUndo());\n }\n }\n if (this.toolbarItems.indexOf('Redo') >= 0) {\n var redoElement = document.getElementById(id + REDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(redoElement)) {\n this.toolbar.enableItems(redoElement.parentElement, this.container.documentEditor.editorHistory.canRedo());\n }\n }\n };\n Toolbar.prototype.onToc = function () {\n if (this.container.previousContext === 'TableOfContents' && this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = false;\n this.documentEditor.focusIn();\n return;\n }\n if (this.container.headerFooterProperties.element.style.display === 'block') {\n this.documentEditor.selection.closeHeaderFooter();\n }\n this.enableDisablePropertyPaneButton(false);\n this.container.showProperties('toc');\n };\n /**\n * @private\n * @param {boolean} isShow - show/hide property pane.\n * @returns {void}\n */\n Toolbar.prototype.enableDisablePropertyPaneButton = function (isShow) {\n if (isShow) {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-enabled'], ['e-pane-disabled']);\n }\n else {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-disabled'], ['e-pane-enabled']);\n }\n };\n /**\n * @private\n * @returns { void }\n */\n Toolbar.prototype.destroy = function () {\n if (this.restrictDropDwn) {\n this.restrictDropDwn.destroy();\n this.restrictDropDwn = undefined;\n }\n if (this.imgDropDwn) {\n this.imgDropDwn.destroy();\n this.imgDropDwn = undefined;\n }\n if (this.breakDropDwn) {\n this.breakDropDwn.destroy();\n this.breakDropDwn = undefined;\n }\n if (this.formFieldDropDown) {\n this.formFieldDropDown.destroy();\n this.formFieldDropDown = undefined;\n }\n if (this.toolbar) {\n this.toolbar.destroy();\n this.toolbar = undefined;\n }\n if (this.propertiesPaneButton) {\n this.propertiesPaneButton.destroy();\n }\n this.propertiesPaneButton = undefined;\n this.container = undefined;\n this.toolbarItems = [];\n this.toolbarItems = undefined;\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","/**\n * Represents document editor header and footer.\n */\nimport { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * @private\n */\nvar HeaderFooterProperties = /** @class */ (function () {\n function HeaderFooterProperties(container, isRtl) {\n this.isHeaderTopApply = false;\n this.isFooterTopApply = false;\n this.container = container;\n this.isRtl = isRtl;\n this.initHeaderFooterPane();\n this.wireEvents();\n }\n Object.defineProperty(HeaderFooterProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeaderFooterProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable header footer pane.\n * @returns {void}\n */\n HeaderFooterProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n HeaderFooterProperties.prototype.initHeaderFooterPane = function () {\n this.initializeHeaderFooter();\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n HeaderFooterProperties.prototype.showHeaderFooterPane = function (isShow) {\n if (isShow) {\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n HeaderFooterProperties.prototype.initializeHeaderFooter = function () {\n var _this = this;\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var elementId = 'header_footer_properties';\n this.element = createElement('div', { id: this.documentEditor.element.id + elementId, className: 'e-de-prop-pane' });\n var headerDiv = this.createDivTemplate('_header_footer', this.element, 'padding-bottom:0');\n classList(headerDiv, ['e-de-cntr-pane-padding'], []);\n var headerLabel = createElement('label', { className: 'e-de-prop-header-label' });\n headerLabel.innerHTML = localObj.getConstant('Header And Footer');\n var closeButtonFloat;\n //let optionsLabelDivPadding: string;\n //let positionLabelDivPadding: string;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //optionsLabelDivPadding = 'padding-left: 14px';\n //positionLabelDivPadding = 'padding-left: 14px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //optionsLabelDivPadding = 'padding-right: 14px';\n //positionLabelDivPadding = 'padding-right: 14px;';\n }\n var closeIcon = createElement('span', {\n id: '_header_footer_close',\n className: 'e-de-ctnr-close e-de-close-icon e-icons',\n styles: 'display:inline-block;cursor:pointer;' + closeButtonFloat\n });\n closeIcon.addEventListener('click', function () {\n _this.onClose();\n });\n headerDiv.appendChild(headerLabel);\n headerDiv.appendChild(closeIcon);\n var optionsLabelDiv = this.createDivTemplate(elementId + '_options', this.element);\n classList(optionsLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var optionsLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n optionsLabel.innerHTML = localObj.getConstant('Options');\n optionsLabelDiv.appendChild(optionsLabel);\n var optionsDiv = this.createDivTemplate(elementId + '_optionsDiv', optionsLabelDiv);\n var firstPageDiv = this.createDivTemplate(elementId + '_firstPageDiv', optionsDiv);\n classList(firstPageDiv, ['e-de-hdr-ftr-frst-div'], []);\n var firstPage = createElement('input', { id: 'firstPage', className: 'e-de-prop-sub-label' });\n firstPageDiv.appendChild(firstPage);\n this.firstPage = new CheckBox({ label: localObj.getConstant('Different First Page'), change: this.changeFirstPageOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.firstPage.appendTo(firstPage);\n firstPageDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for first page'));\n var oddOrEvenDiv = this.createDivTemplate(elementId + '_oddOrEvenDiv', optionsDiv);\n var oddOrEven = createElement('input', { id: 'oddOrEven', className: 'e-de-sub-prop-label' });\n oddOrEvenDiv.appendChild(oddOrEven);\n this.oddOrEven = new CheckBox({ label: localObj.getConstant('Different Odd And Even Pages'), change: this.changeoddOrEvenOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.oddOrEven.appendTo(oddOrEven);\n oddOrEvenDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for odd and even pages'));\n // let autoFieldLabelDiv: HTMLElement = this.createDivTemplate(element + '_autoFieldLabelDiv', div, 'padding-top:10px;padding-left: 10px;');\n // let autoFieldLabel: HTMLElement = createElement('label', { className: 'e-de-header-prop-label', styles: 'height:20px;' });\n // autoFieldLabel.innerHTML = 'Insert Autofield';\n // autoFieldLabelDiv.appendChild(autoFieldLabel);\n // let autofieldDiv: HTMLElement = this.createDivTemplate(element + '_autofieldDiv', autoFieldLabelDiv, 'display:inline-flex;');\n // let pageNumberDiv: HTMLElement = this.createDivTemplate(element + '_pageNumberDiv', autofieldDiv, 'margin-right:8px;');\n // let pageNumber: HTMLInputElement = createElement('input', { id: 'pageNumber' }) as HTMLInputElement;\n // pageNumberDiv.appendChild(pageNumber);\n // this.pageNumber = new CheckBox({ label: 'Page Number', change: this.changePageNumber });\n // this.pageNumber.appendTo(pageNumber);\n // let pageCountDiv: HTMLElement = this.createDivTemplate(element + '_pageCountDiv', autofieldDiv);\n // let pageCount: HTMLInputElement = createElement('input', { id: 'pageCount' }) as HTMLInputElement;\n // pageCountDiv.appendChild(pageCount);\n // this.pageCount = new CheckBox({ label: 'Page Count', change: this.changePageCount });\n // this.pageCount.appendTo(pageCount);\n // let autoFieldLine: HTMLElement = createElement('div', { className: 'e-de-prop-separator-line', styles: 'margin-top:7px;' });\n // autoFieldLabelDiv.appendChild(autoFieldLine);\n var positionLabelDiv = this.createDivTemplate(elementId + '_positionLabelDiv', this.element);\n classList(positionLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var positionLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n positionLabel.innerHTML = localObj.getConstant('Position');\n positionLabelDiv.appendChild(positionLabel);\n var positionDiv = this.createDivTemplate(elementId + '_positionDiv', positionLabelDiv);\n //let width: string;\n //let headerFooterDivMargin: string;\n //if (!this.isRtl) {\n //width = 'width: 128px;';\n //headerFooterDivMargin = 'margin-right:8px;';\n //} else {\n //width = 'width: 150px;';\n //headerFooterDivMargin = 'margin-left:8px;';\n //}\n var headerTopDiv = this.createDivTemplate(elementId + '_headerTopDiv', positionDiv);\n classList(headerTopDiv, ['e-de-hdr-ftr-top-div'], []);\n var headerTopLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n headerTopLabel.innerHTML = localObj.getConstant('Header from Top');\n headerTopDiv.appendChild(headerTopLabel);\n var headerFromTop = createElement('input', { id: this.documentEditor.element.id + '_headerFromTop', className: 'e-de-prop-sub-label' });\n headerTopDiv.appendChild(headerFromTop);\n this.headerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.headerFromTop.appendTo(headerFromTop);\n this.headerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from top of the page to top of the header'));\n var footerBottomDiv = this.createDivTemplate(elementId + '_footerBottomDiv', positionDiv);\n var footerBottomLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n footerBottomLabel.innerHTML = localObj.getConstant('Footer from Bottom');\n footerBottomDiv.appendChild(footerBottomLabel);\n var footerFromTop = createElement('input', { id: this.documentEditor.element.id + '_footerFromTop', className: 'e-de-prop-sub-label' });\n footerBottomDiv.appendChild(footerFromTop);\n this.footerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.footerFromTop.appendTo(footerFromTop);\n this.footerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from bottom of the page to bottom of the footer'));\n };\n HeaderFooterProperties.prototype.createDivTemplate = function (id, parentDiv, style) {\n var divElement;\n if (style) {\n divElement = createElement('div', { id: id, styles: style });\n }\n else {\n divElement = createElement('div', { id: id });\n }\n parentDiv.appendChild(divElement);\n return divElement;\n };\n HeaderFooterProperties.prototype.wireEvents = function () {\n var _this = this;\n this.headerFromTop.element.addEventListener('click', function () {\n _this.isHeaderTopApply = true;\n });\n this.footerFromTop.element.addEventListener('click', function () {\n _this.isFooterTopApply = true;\n });\n this.headerFromTop.element.addEventListener('keydown', this.onHeaderValue.bind(this));\n this.footerFromTop.element.addEventListener('keydown', this.onFooterValue.bind(this));\n this.headerFromTop.element.addEventListener('blur', function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n });\n this.footerFromTop.element.addEventListener('blur', function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n });\n };\n HeaderFooterProperties.prototype.onClose = function () {\n this.container.showHeaderProperties = true;\n this.container.documentEditor.selection.closeHeaderFooter();\n };\n HeaderFooterProperties.prototype.changeFirstPageOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selection.sectionFormat.differentFirstPage = this.firstPage.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeoddOrEvenOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selection.sectionFormat.differentOddAndEvenPages = this.oddOrEven.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeHeaderValue = function () {\n if (!this.isHeaderTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var headerTop = this.headerFromTop.value;\n if (headerTop > this.headerFromTop.max) {\n headerTop = this.headerFromTop.max;\n }\n this.documentEditor.selection.sectionFormat.headerDistance = headerTop;\n }\n };\n HeaderFooterProperties.prototype.onHeaderValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.onFooterValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.changeFooterValue = function () {\n if (!this.isFooterTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var footerTop = this.footerFromTop.value;\n if (footerTop > this.footerFromTop.max) {\n footerTop = this.footerFromTop.max;\n }\n this.documentEditor.selection.sectionFormat.footerDistance = footerTop;\n }\n };\n HeaderFooterProperties.prototype.onSelectionChange = function () {\n this.headerFromTop.value = this.documentEditor.selection.sectionFormat.headerDistance;\n this.footerFromTop.value = this.documentEditor.selection.sectionFormat.footerDistance;\n if (this.documentEditor.selection.sectionFormat.differentFirstPage) {\n this.firstPage.checked = true;\n }\n else {\n this.firstPage.checked = false;\n }\n if (this.documentEditor.selection.sectionFormat.differentOddAndEvenPages) {\n this.oddOrEven.checked = true;\n }\n else {\n this.oddOrEven.checked = false;\n }\n };\n HeaderFooterProperties.prototype.destroy = function () {\n if (this.firstPage) {\n this.firstPage.destroy();\n }\n this.firstPage = undefined;\n if (this.oddOrEven) {\n this.oddOrEven.destroy();\n }\n this.oddOrEven = undefined;\n if (this.headerFromTop) {\n this.headerFromTop.destroy();\n this.headerFromTop = undefined;\n }\n if (this.footerFromTop) {\n this.footerFromTop.destroy();\n this.footerFromTop = undefined;\n }\n this.container = undefined;\n };\n return HeaderFooterProperties;\n}());\nexport { HeaderFooterProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * Image Property pane\n *\n * @private\n */\nvar ImageProperties = /** @class */ (function () {\n function ImageProperties(container, isRtl) {\n this.isWidthApply = false;\n this.isHeightApply = false;\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isMaintainAspectRatio = false;\n this.isRtl = isRtl;\n this.initializeImageProperties();\n }\n Object.defineProperty(ImageProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable image properties pane.\n * @returns {void}\n */\n ImageProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n ImageProperties.prototype.initializeImageProperties = function () {\n this.element = createElement('div', { id: this.elementId + '_imageProperties', className: 'e-de-prop-pane' });\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n this.initImageProp();\n this.wireEvents();\n };\n ImageProperties.prototype.initImageProp = function () {\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var imageDiv = createElement('div', { id: this.elementId + '_imageDiv', className: 'e-de-cntr-pane-padding', styles: 'border:0px' });\n this.element.appendChild(imageDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = localObj.getConstant('Image');\n imageDiv.appendChild(label);\n var outerDiv = createElement('div');\n imageDiv.appendChild(outerDiv);\n this.widthElement = this.createImagePropertiesDiv('_widthDiv', outerDiv, '_widthInput', localObj.getConstant('W'), localObj.getConstant('Width'));\n this.widthNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.widthNumericBox.appendTo(this.widthElement);\n this.heightElement = this.createImagePropertiesDiv('_heightDiv', outerDiv, '_heightInput', localObj.getConstant('H'), localObj.getConstant('Height'));\n this.heightNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.heightNumericBox.appendTo(this.heightElement);\n var aspectRatioDiv = createElement('div', { id: this.elementId + '_aspectRatioDiv' });\n aspectRatioDiv.setAttribute('title', localObj.getConstant('Aspect ratio'));\n outerDiv.appendChild(aspectRatioDiv);\n var aspectRatio = createElement('input', { id: this.elementId + '_aspectRatio', className: 'e-de-ctnr-prop-label' });\n aspectRatioDiv.appendChild(aspectRatio);\n this.aspectRatioBtn = new CheckBox({ label: localObj.getConstant('Aspect ratio'), enableRtl: this.isRtl }, aspectRatio);\n };\n /* eslint-disable-next-line max-len */\n ImageProperties.prototype.createImagePropertiesDiv = function (id, outerDiv, inputId, spanContent, tooltip) {\n var divElement = createElement('div', { id: this.elementId + id, styles: 'position: relative;width: 100%;', className: 'e-de-ctnr-segment' });\n divElement.setAttribute('title', tooltip);\n outerDiv.appendChild(divElement);\n var inputElement = createElement('input', { id: this.elementId + inputId, className: 'e-textbox', styles: 'width:100%;' });\n divElement.appendChild(inputElement);\n var spanElement = createElement('span', { className: 'e-de-img-prty-span' });\n spanElement.textContent = spanContent;\n divElement.appendChild(spanElement);\n return inputElement;\n };\n ImageProperties.prototype.wireEvents = function () {\n var _this = this;\n this.aspectRatioBtn.element.addEventListener('change', this.onAspectRatioBtnClick.bind(this));\n this.widthNumericBox.element.addEventListener('click', function () {\n _this.isWidthApply = true;\n });\n this.heightNumericBox.element.addEventListener('click', function () {\n _this.isHeightApply = true;\n });\n this.widthNumericBox.element.addEventListener('keydown', this.onImageWidth.bind(this));\n this.heightNumericBox.element.addEventListener('keydown', this.onImageHeight.bind(this));\n this.widthNumericBox.element.addEventListener('blur', function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n });\n this.heightNumericBox.element.addEventListener('blur', function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n });\n };\n ImageProperties.prototype.onImageWidth = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.onImageHeight = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.applyImageWidth = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n if (height > this.heightNumericBox.max) {\n height = this.heightNumericBox.max;\n }\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n var ratio = width / this.documentEditor.selection.imageFormat.width;\n var height = this.heightNumericBox.value * ratio;\n this.heightNumericBox.value = height;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.applyImageHeight = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var height = this.heightNumericBox.value;\n var ratio = height / this.documentEditor.selection.imageFormat.height;\n var width = this.widthNumericBox.value * ratio;\n this.widthNumericBox.value = width;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.onAspectRatioBtnClick = function () {\n if (this.isMaintainAspectRatio) {\n this.isMaintainAspectRatio = false;\n }\n else {\n this.isMaintainAspectRatio = true;\n }\n };\n ImageProperties.prototype.showImageProperties = function (isShow) {\n if (this.element.style.display === 'block') {\n this.updateImageProperties();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n ImageProperties.prototype.updateImageProperties = function () {\n this.widthNumericBox.value = this.documentEditor.selection.imageFormat.width;\n this.heightNumericBox.value = this.documentEditor.selection.imageFormat.height;\n };\n ImageProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.widthNumericBox) {\n this.widthNumericBox.destroy();\n }\n this.widthNumericBox = undefined;\n if (this.heightNumericBox) {\n this.heightNumericBox.destroy();\n }\n this.heightNumericBox = undefined;\n if (this.aspectRatioBtn) {\n this.aspectRatioBtn.destroy();\n }\n this.aspectRatioBtn = undefined;\n };\n return ImageProperties;\n}());\nexport { ImageProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * TOC Properties pane\n *\n * @private\n */\nvar TocProperties = /** @class */ (function () {\n function TocProperties(container, isRtl) {\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isRtl = isRtl;\n this.initializeTocPane();\n }\n Object.defineProperty(TocProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TocProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable table of content pane.\n * @returns {void}\n */\n TocProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TocProperties.prototype.initializeTocPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.element = createElement('div', { id: this.elementId + '_tocProperties', className: 'e-de-prop-pane' });\n var container = createElement('div', { className: 'e-de-cntr-pane-padding e-de-prop-separator-line' });\n this.tocHeaderDiv(container);\n this.initTemplates(container);\n container = createElement('div', { className: 'e-de-cntr-pane-padding' });\n this.tocOptionsDiv(container);\n this.contentStylesDropdown(container);\n this.checkboxContent(container);\n this.buttonDiv(container);\n this.wireEvents();\n this.updateTocProperties();\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n TocProperties.prototype.updateTocProperties = function () {\n this.rightalignPageNumber.checked = true;\n this.showPageNumber.checked = true;\n this.hyperlink.checked = true;\n };\n TocProperties.prototype.wireEvents = function () {\n var _this = this;\n this.cancelBtn.element.addEventListener('click', function () {\n _this.onClose();\n });\n this.updateBtn.element.addEventListener('click', this.onInsertToc.bind(this));\n this.closeButton.addEventListener('click', function () {\n _this.onClose();\n });\n };\n TocProperties.prototype.onClose = function () {\n if (this.container.showPropertiesPane\n && this.container.previousContext !== 'TableOfContents') {\n this.container.showPropertiesPaneOnSelection();\n }\n else {\n this.showTocPane(false);\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.container.showPropertiesPane = false;\n }\n };\n TocProperties.prototype.tocHeaderDiv = function (container) {\n var closeButtonFloat;\n //let headerDivMargin: string;\n var closeButtonMargin;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //headerDivMargin = 'margin-left:5.5px;';\n closeButtonMargin = 'margin-right:7px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //headerDivMargin = 'margin-right:5.5px;';\n closeButtonMargin = 'margin-left:7px;';\n }\n var headerDiv = createElement('div', {\n id: this.elementId + 'toc_id',\n styles: 'display: block;'\n });\n container.appendChild(headerDiv);\n this.element.appendChild(container);\n var title = createElement('label', {\n className: 'e-de-ctnr-prop-label'\n });\n title.textContent = this.localObj.getConstant('Table of Contents');\n headerDiv.appendChild(title);\n this.closeButton = createElement('span', {\n className: 'e-de-ctnr-close e-icons',\n styles: 'cursor: pointer;display:inline-block;color: #4A4A4A;' + closeButtonFloat + closeButtonMargin\n });\n headerDiv.appendChild(this.closeButton);\n };\n TocProperties.prototype.initTemplates = function (container) {\n this.template1(container);\n // let div: HTMLElement = createElement('div', { styles: 'display:block;border-top: 1px solid #E0E0E0;' }); this.element.appendChild(div);\n };\n TocProperties.prototype.template1 = function (container) {\n this.template1Div = createElement('div', {\n className: 'e-de-toc-template1'\n });\n if (this.isRtl) {\n this.template1Div.classList.add('e-de-rtl');\n }\n container.appendChild(this.template1Div);\n var templateContent1 = createElement('div', {\n className: 'e-de-toc-template1-content1'\n });\n templateContent1.textContent = this.localObj.getConstant('HEADING - - - - 1');\n this.template1Div.appendChild(templateContent1);\n var templateContent2 = createElement('div', {\n className: 'e-de-toc-template1-content2'\n });\n templateContent2.textContent = this.localObj.getConstant('HEADING - - - - 2');\n this.template1Div.appendChild(templateContent2);\n var templateContent3 = createElement('div', {\n className: 'e-de-toc-template1-content3'\n });\n templateContent3.textContent = this.localObj.getConstant('HEADING - - - - 3');\n this.template1Div.appendChild(templateContent3);\n };\n TocProperties.prototype.tocOptionsDiv = function (container) {\n var optionsDiv = createElement('div');\n container.appendChild(optionsDiv);\n this.element.appendChild(container);\n if (this.isRtl) {\n optionsDiv.classList.add('e-de-rtl');\n }\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = this.localObj.getConstant('Options');\n optionsDiv.appendChild(label);\n };\n /* eslint-disable-next-line max-len */\n TocProperties.prototype.createDropDownButton = function (id, parentDiv, iconCss, content, selectedIndex) {\n var buttonElement = createElement('input', { id: id });\n parentDiv.appendChild(buttonElement);\n var dropDownBtn = new DropDownList({ index: selectedIndex, dataSource: content, popupHeight: '150px', cssClass: 'e-de-prop-font-button' }, buttonElement);\n return dropDownBtn;\n };\n /* eslint-disable */\n TocProperties.prototype.contentStylesDropdown = function (container) {\n var _this = this;\n var contentStyleElementMargin;\n if (!this.isRtl) {\n contentStyleElementMargin = 'margin-left:5.5px;';\n }\n else {\n contentStyleElementMargin = 'margin-right:5.5px;';\n }\n var contentStyleElement = createElement('div', { id: 'contentstyle_div' });\n contentStyleElement.setAttribute('title', this.localObj.getConstant('Number of heading or outline levels to be shown in table of contents'));\n container.appendChild(contentStyleElement);\n // let items: ItemModel[] = [{ text: '___________', id: 'solid' }];\n // this.borderStyle = this.createDropDownButton(\n // this.elementId + '_borderStyleDiv',\n // 'width:120px;height:28px;margin-top:8px', contentStyleElement, 'e-de-icon-stroke-size', 'Solid', items\n // );\n var labelMargin;\n if (!this.isRtl) {\n labelMargin = 'margin-right:8px;';\n }\n else {\n labelMargin = 'margin-left:8px';\n }\n var label = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n label.textContent = this.localObj.getConstant('Levels');\n contentStyleElement.appendChild(label);\n container.appendChild(contentStyleElement);\n var dataSource = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.borderLevelStyle = this.createDropDownButton(this.elementId + '_borderLevelDiv', contentStyleElement, '', dataSource, 2);\n this.borderLevelStyle.change = function (args) {\n _this.borderLevelStyle.value = args.item.value;\n };\n container.appendChild(contentStyleElement);\n };\n TocProperties.prototype.checkboxContent = function (container) {\n var checkboxElementMargin;\n if (!this.isRtl) {\n checkboxElementMargin = 'margin-left:5.5px;';\n }\n else {\n checkboxElementMargin = 'margin-right:5.5px;';\n }\n var checkboxElement = createElement('div', { id: 'toc_checkboxDiv', styles: 'margin-bottom:36px;' });\n container.appendChild(checkboxElement);\n var showPageNumberDiv = createElement('div', { className: 'e-de-toc-checkbox1' });\n showPageNumberDiv.setAttribute('title', this.localObj.getConstant('Show page numbers in table of contents'));\n checkboxElement.appendChild(showPageNumberDiv);\n var showpagenumberCheckboxElement = createElement('input', { id: 'showpagenumber', styles: 'width:12px;height:12px;margin-bottom:8px', className: 'e-de-prop-sub-label' });\n showPageNumberDiv.appendChild(showpagenumberCheckboxElement);\n this.showPageNumber = new CheckBox({\n label: this.localObj.getConstant('Show page numbers'),\n enableRtl: this.isRtl\n });\n this.showPageNumber.appendTo(showpagenumberCheckboxElement);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-checkbox2' });\n rightAlignDiv.setAttribute('title', this.localObj.getConstant('Right align page numbers in table of contents'));\n checkboxElement.appendChild(rightAlignDiv);\n var rightalignpagenumberCheckboxElement = createElement('input', { id: 'rightalignpagenumber', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n rightAlignDiv.appendChild(rightalignpagenumberCheckboxElement);\n this.rightalignPageNumber = new CheckBox({\n label: this.localObj.getConstant('Right align page numbers'),\n enableRtl: this.isRtl\n });\n this.rightalignPageNumber.appendTo(rightalignpagenumberCheckboxElement);\n var hyperlinkDiv = createElement('div', { className: 'e-de-toc-checkbox3' });\n hyperlinkDiv.setAttribute('title', this.localObj.getConstant('Use hyperlinks instead of page numbers'));\n checkboxElement.appendChild(hyperlinkDiv);\n var hyperlinkCheckboxElement = createElement('input', { id: 'hyperlinkdiv', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n hyperlinkDiv.appendChild(hyperlinkCheckboxElement);\n this.hyperlink = new CheckBox({\n label: this.localObj.getConstant('Use hyperlinks'),\n enableRtl: this.isRtl\n });\n this.hyperlink.appendTo(hyperlinkCheckboxElement);\n };\n TocProperties.prototype.buttonDiv = function (container) {\n var footerElementFloat;\n if (!this.isRtl) {\n footerElementFloat = 'float:right';\n }\n else {\n footerElementFloat = 'float:left';\n }\n var footerElement = createElement('div', { id: 'footerDiv', styles: footerElementFloat });\n container.appendChild(footerElement);\n var updatebuttoncontentStyleElement = createElement('button', {\n id: 'footerupdatebuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(updatebuttoncontentStyleElement);\n this.updateBtn = new Button({\n content: this.localObj.getConstant('Update'), cssClass: 'btn-update', isPrimary: true\n });\n this.updateBtn.appendTo(updatebuttoncontentStyleElement);\n var cancelbuttoncontentStyleElement = createElement('button', {\n id: 'footercancelbuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(cancelbuttoncontentStyleElement);\n this.cancelBtn = new Button({\n content: this.localObj.getConstant('Cancel'), cssClass: this.isRtl ? 'e-de-btn-cancel-rtl' : 'e-de-btn-cancel'\n });\n this.cancelBtn.appendTo(cancelbuttoncontentStyleElement);\n };\n TocProperties.prototype.showTocPane = function (isShow, previousContextType) {\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.updateBtn.content = this.documentEditor.selection.contextType === 'TableOfContents' ? this.localObj.getConstant('Update') : this.localObj.getConstant('Insert');\n this.prevContext = this.documentEditor.selection.contextType;\n this.documentEditor.resize();\n if (isShow) {\n this.updateBtn.element.focus();\n }\n };\n TocProperties.prototype.onInsertToc = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: parseInt(this.borderLevelStyle.value, 0),\n includeHyperlink: this.hyperlink.checked,\n includePageNumber: this.showPageNumber.checked,\n rightAlign: this.rightalignPageNumber.checked\n };\n if (tocSettings.rightAlign) {\n tocSettings.tabLeader = 'Dot';\n }\n this.documentEditor.editor.insertTableOfContents(tocSettings);\n };\n TocProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.showPageNumber) {\n this.showPageNumber.destroy();\n this.showPageNumber = undefined;\n }\n if (this.rightalignPageNumber) {\n this.rightalignPageNumber.destroy();\n this.rightalignPageNumber = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderLevelStyle) {\n this.borderLevelStyle.destroy();\n this.borderLevelStyle = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n }\n this.hyperlink = undefined;\n if (this.updateBtn) {\n this.updateBtn.destroy();\n }\n this.updateBtn = undefined;\n if (this.cancelBtn) {\n this.cancelBtn.destroy();\n }\n this.cancelBtn = undefined;\n };\n return TocProperties;\n}());\nexport { TocProperties };\n","/* eslint-disable */\nimport { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { Query } from '@syncfusion/ej2-data';\n/**\n * Text Properties\n *\n * @private\n */\nvar Text = /** @class */ (function () {\n /**\n * Initialize text properties.\n *\n * @param {DocumentEditorContainer} container - DocumentEditorContainer instance.\n * @param {boolean} isRtl - Specifies the RTL layout.\n */\n function Text(container, isRtl) {\n var _this = this;\n this.isRetrieving = false;\n this.appliedHighlightColor = 'rgb(255, 255, 0)';\n this.createChangecase = function (container) {\n var items = [{\n text: _this.localObj.getConstant('UPPERCASE'), id: 'uppercase'\n }];\n _this.changeCaseDropdown = new DropDownButton({\n items: items,\n iconCss: 'e-icons e-de-ctnr-change-case',\n enableRtl: _this.isRtl\n });\n var changeCaseContainer = createElement('div', {\n id: container.id + '_changeCase', className: 'e-de-ctnr-group-btn'\n });\n var buttonElement = createElement('button', {\n id: changeCaseContainer.id + '_dropdownBtn',\n attrs: { type: 'button' }\n });\n changeCaseContainer.appendChild(buttonElement);\n container.appendChild(changeCaseContainer);\n _this.changeCaseDropdown.appendTo(buttonElement);\n };\n this.changeCase = function (args) {\n if (_this.isRetrieving) {\n return;\n }\n var text = args.item.id;\n switch (text) {\n case 'uppercase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editor) {\n _this.documentEditor.editor.changeCase('Uppercase');\n }\n break;\n default:\n break;\n }\n };\n this.container = container;\n this.isRtl = isRtl;\n }\n Object.defineProperty(Text.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Text.prototype.initializeTextPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var textDiv = this.createDiv(element + '_text', wholeDiv);\n classList(textDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var fontDiv = this.createDiv(element + '_sizeStyle', textDiv, 'display:inline-flex;');\n classList(fontDiv, ['e-de-ctnr-segment'], []);\n if (isRtl) {\n classList(fontDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var fontFamilyDiv = this.createDiv(element + '_fontFamilyDiv', fontDiv);\n var fontFamily = createElement('input', {\n id: element + '_fontFamily', className: 'e-prop-font-style'\n });\n fontFamilyDiv.appendChild(fontFamily);\n classList(fontFamilyDiv, ['e-de-panel-left-width'], []);\n this.createDropDownListForFamily(fontFamily);\n var fontSizeDiv = this.createDiv(element + '_fontSizeDiv', fontDiv);\n var divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var fontSize = createElement('input', {\n id: element + '_fontSize', innerHTML: 'type:number', className: 'e-prop-font-style'\n });\n fontSizeDiv.appendChild(fontSize);\n classList(fontSizeDiv, ['e-de-panel-right-width'], []);\n this.createDropDownListForSize(fontSize);\n var propertiesDiv = createElement('div', {\n id: element + '_properties', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n textDiv.appendChild(propertiesDiv);\n var leftDiv = createElement('div', {\n id: element + '_leftDiv', className: divClassName, styles: 'display:inline-flex;'\n });\n propertiesDiv.appendChild(leftDiv);\n this.bold = this.createButtonTemplate(element + '_bold', 'e-de-ctnr-bold e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Bold Tooltip');\n this.italic = this.createButtonTemplate(element + '_italic', 'e-de-ctnr-italic e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Italic Tooltip');\n this.underline = this.createButtonTemplate(element + '_underline', 'e-de-ctnr-underline e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Underline Tooltip');\n this.strikethrough = this.createButtonTemplate(element + '_strikethrough', 'e-de-ctnr-strikethrough e-icons', leftDiv, 'e-de-prop-font-last-button', '40.5', 'Strikethrough');\n divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var rightDiv = createElement('div', { id: element + '_rightDiv', className: divClassName, styles: 'display:inline-flex;' });\n propertiesDiv.appendChild(rightDiv);\n this.superscript = this.createButtonTemplate(element + '_superscript', 'e-de-ctnr-superscript e-icons', rightDiv, 'e-de-prop-font-button', '38.5', 'Superscript Tooltip');\n this.subscript = this.createButtonTemplate(element + '_subscript', 'e-de-ctnr-subscript e-icons', rightDiv, 'e-de-prop-font-last-button', '38.5', 'Subscript Tooltip');\n var colorDiv = createElement('div', {\n id: element + '_colorDiv', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var leftDiv2 = createElement('div', { id: element + '_color', className: 'e-de-font-clr-picker e-de-ctnr-group-btn', styles: 'display:inline-flex;' });\n if (isRtl) {\n classList(leftDiv2, ['e-rtl'], []);\n }\n colorDiv.appendChild(leftDiv2);\n textDiv.appendChild(colorDiv);\n this.fontColor = this.createFontColorPicker(element + '_textColor', 40.5, leftDiv2, this.localObj.getConstant('Font color'));\n classList(leftDiv2.firstElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-fontcolor', 'e-icons'], ['e-caret']);\n this.initializeHighlightColorElement();\n this.highlightColor = this.createHighlightColorSplitButton(element + '_highlightColor', 34.5, leftDiv2, this.localObj.getConstant('Text highlight color'));\n classList(this.highlightColor.element.nextElementSibling.firstElementChild, ['e-de-ctnr-highlight', 'e-icons'], ['e-caret']);\n this.highlightColorInputElement = this.highlightColor.element.firstChild;\n this.clearFormat = this.createButtonTemplate(element + '_clearFormat', 'e-de-ctnr-clearall e-icons', leftDiv2, 'e-de-prop-font-last-button', '40.5', 'Clear all formatting');\n var rightDiv2 = createElement('div', {\n id: element + '_rightDiv2', className: divClassName.replace('e-btn-group', ''), styles: 'display:inline-flex;'\n });\n if (isRtl) {\n classList(rightDiv2, ['e-rtl'], []);\n }\n rightDiv2.setAttribute('title', this.container.localObj.getConstant('Change case Tooltip'));\n textDiv.appendChild(rightDiv2);\n this.createChangecase(rightDiv2);\n };\n Text.prototype.createHighlightColorSplitButton = function (id, width, divElement, toolTipText) {\n var _this = this;\n var buttonElement = createElement('button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.padding = '1px';\n // buttonElement.style.height = 30 + 'px';\n divElement.appendChild(buttonElement);\n var hgltSplitObj = new SplitButton({\n cssClass: 'e-de-btn-hghlclr',\n iconCss: 'e-de-ctnr-hglt-color',\n /* eslint-disable-next-line max-len */\n target: this.highlightColorElement, close: this.closePopup.bind(this), beforeOpen: this.openPopup.bind(this), enableRtl: this.isRtl\n });\n hgltSplitObj.appendTo(buttonElement);\n hgltSplitObj.click = function () {\n _this.applyHighlightColor(_this.highlightColorInputElement.style.backgroundColor);\n };\n hgltSplitObj.element.firstChild.style.backgroundColor = 'rgb(255, 255, 0)';\n hgltSplitObj.element.parentElement.setAttribute('title', toolTipText);\n return hgltSplitObj;\n };\n Text.prototype.openPopup = function () {\n this.highlightColorElement.style.display = 'block';\n };\n Text.prototype.closePopup = function () {\n this.highlightColorElement.style.display = 'none';\n };\n Text.prototype.initializeHighlightColorElement = function () {\n this.highlightColorElement = createElement('div', {\n styles: 'display:none;width:157px',\n className: 'e-de-cntr-highlight-pane'\n });\n var yellowDiv = this.createHightlighColorPickerDiv('#ffff00', 'yellowDiv');\n var brightGreenDiv = this.createHightlighColorPickerDiv('#00ff00', 'brightGreenDiv');\n var turquoiseDiv = this.createHightlighColorPickerDiv('#00ffff', 'turquoiseDiv');\n var hotPinkDiv = this.createHightlighColorPickerDiv('#ff00ff', 'hotPinkDiv');\n var blueDiv = this.createHightlighColorPickerDiv('#0000ff', 'blueDiv');\n var redDiv = this.createHightlighColorPickerDiv('#ff0000', 'redDiv');\n var darkBlueDiv = this.createHightlighColorPickerDiv('#000080', 'darkBlueDiv');\n var tealDiv = this.createHightlighColorPickerDiv('#008080', 'tealDiv');\n var greenDiv = this.createHightlighColorPickerDiv('#008000', 'greenDiv');\n var violetDiv = this.createHightlighColorPickerDiv('#800080', 'violetDiv');\n var darkRedDiv = this.createHightlighColorPickerDiv('#800000', 'darkRedDiv');\n var darkYellowDiv = this.createHightlighColorPickerDiv('#808000', 'darkYellowDiv');\n var gray50Div = this.createHightlighColorPickerDiv('#808080', 'gray50Div');\n var gray25Div = this.createHightlighColorPickerDiv('#c0c0c0', 'gray25Div');\n var blackDiv = this.createHightlighColorPickerDiv('#000000', 'blackDiv');\n var nocolor = createElement('div', { className: 'e-hglt-no-color' });\n this.highlightColorElement.appendChild(nocolor);\n var nocolorDiv = createElement('div', { styles: 'width:24px;height:24px;background-color:#ffffff;margin:3px;', id: 'noColorDiv' });\n nocolor.appendChild(nocolorDiv);\n var nocolorDivValue = createElement('div', { innerHTML: this.localObj.getConstant('No color'), className: 'e-de-ctnr-hglt-no-color' });\n nocolorDiv.appendChild(nocolorDivValue);\n yellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n brightGreenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n turquoiseDiv.addEventListener('click', this.onHighLightColor.bind(this));\n hotPinkDiv.addEventListener('click', this.onHighLightColor.bind(this));\n blueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n redDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkBlueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n tealDiv.addEventListener('click', this.onHighLightColor.bind(this));\n greenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n violetDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkRedDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkYellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n gray50Div.addEventListener('click', this.onHighLightColor.bind(this));\n gray25Div.addEventListener('click', this.onHighLightColor.bind(this));\n blackDiv.addEventListener('click', this.onHighLightColor.bind(this));\n nocolor.addEventListener('click', this.onHighLightColor.bind(this));\n };\n Text.prototype.createHightlighColorPickerDiv = function (backgroundColor, id) {\n var colorDiv = createElement('div', { className: 'e-de-ctnr-hglt-btn', id: id });\n colorDiv.style.backgroundColor = backgroundColor;\n this.highlightColorElement.appendChild(colorDiv);\n return colorDiv;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Text.prototype.onHighLightColor = function (event) {\n if (this.documentEditor.selection) {\n this.applyHighlightColor(event.currentTarget.style.backgroundColor);\n this.highlightColor.toggle();\n }\n };\n Text.prototype.applyHighlightColorAsBackground = function (color) {\n this.removeSelectedColorDiv();\n if (color === 'NoColor') {\n this.highlightColorElement.querySelector('#noColorDiv').classList.add('e-color-selected');\n }\n else if (color === 'Yellow') {\n this.highlightColorElement.querySelector('#yellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'BrightGreen') {\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Turquoise') {\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.add('e-color-selected');\n }\n else if (color === 'Pink') {\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.add('e-color-selected');\n }\n else if (color === 'Red') {\n this.highlightColorElement.querySelector('#redDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkBlue') {\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.add('e-color-selected');\n }\n else if (color === 'Teal') {\n this.highlightColorElement.querySelector('#tealDiv').classList.add('e-color-selected');\n }\n else if (color === 'Green') {\n this.highlightColorElement.querySelector('#greenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Violet') {\n this.highlightColorElement.querySelector('#violetDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkRed') {\n this.highlightColorElement.querySelector('#darkRedDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkYellow') {\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'Gray50') {\n this.highlightColorElement.querySelector('#gray50Div').classList.add('e-color-selected');\n }\n else if (color === 'Gray25') {\n this.highlightColorElement.querySelector('#gray25Div').classList.add('e-color-selected');\n }\n else if (color === 'Black') {\n this.highlightColorElement.querySelector('#blackDiv').classList.add('e-color-selected');\n }\n else if (color === 'Blue') {\n this.highlightColorElement.querySelector('#blueDiv').classList.add('e-color-selected');\n }\n };\n Text.prototype.removeSelectedColorDiv = function () {\n this.highlightColorElement.querySelector('#noColorDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#yellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#redDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#tealDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#greenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#violetDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkRedDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray50Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray25Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#blackDiv').classList.remove('e-color-selected');\n };\n Text.prototype.applyHighlightColor = function (color) {\n this.appliedHighlightColor = color;\n var hgltColor = this.getHighLightColor(color);\n if (hgltColor === 'NoColor') {\n this.documentEditor.selection.characterFormat.highlightColor = null;\n }\n this.documentEditor.selection.characterFormat.highlightColor = hgltColor;\n };\n Text.prototype.getHighLightColor = function (color) {\n switch (color) {\n case 'rgb(255, 255, 0)':\n return 'Yellow';\n case 'rgb(0, 255, 0)':\n return 'BrightGreen';\n case 'rgb(0, 255, 255)':\n return 'Turquoise';\n case 'rgb(255, 0, 255)':\n return 'Pink';\n case 'rgb(0, 0, 255)':\n return 'Blue';\n case 'rgb(255, 0, 0)':\n return 'Red';\n case 'rgb(0, 0, 128)':\n return 'DarkBlue';\n case 'rgb(0, 128, 128)':\n return 'Teal';\n case 'rgb(0, 128, 0)':\n return 'Green';\n case 'rgb(128, 0, 128)':\n return 'Violet';\n case 'rgb(128, 0, 0)':\n return 'DarkRed';\n case 'rgb(128, 128, 0)':\n return 'DarkYellow';\n case 'rgb(128, 128, 128)':\n return 'Gray50';\n case 'rgb(192, 192, 192)':\n return 'Gray25';\n case 'rgb(0, 0, 0)':\n return 'Black';\n default:\n return 'NoColor';\n }\n };\n Text.prototype.createDiv = function (id, parentDiv, style) {\n var div;\n if (style) {\n div = createElement('div', { id: id, styles: style });\n }\n else {\n div = createElement('div', { id: id });\n }\n parentDiv.appendChild(div);\n return div;\n };\n /* eslint-disable-next-line max-len */\n Text.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var button = createElement('Button', { id: id, attrs: { type: 'button' } });\n // button.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(button);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl\n });\n btn.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant(toolTipText));\n switch (toolTipText) {\n case 'Bold Tooltip':\n this.boldBtn = btn;\n break;\n case 'Italic Tooltip':\n this.italicBtn = btn;\n break;\n case 'Underline Tooltip':\n this.underlineBtn = btn;\n break;\n case 'Strikethrough':\n this.strikethroughBtn = btn;\n break;\n case 'Superscript Tooltip':\n this.superscriptBtn = btn;\n break;\n case 'Subscript Tooltip':\n this.subscriptBtn = btn;\n break;\n default:\n this.clearFormatBtn = btn;\n }\n return button;\n };\n Text.prototype.createFontColorPicker = function (id, width, divElement, toolTipText) {\n var inputElement = createElement('input', { id: id, attrs: { 'type': 'color' } });\n inputElement.style.width = width + 'px';\n divElement.appendChild(inputElement);\n this.fontColorInputElement = new ColorPicker({ value: '#000000', showButtons: true, enableRtl: this.isRtl, locale: this.container.locale }, inputElement);\n this.fontColorInputElement.element.parentElement.setAttribute('title', toolTipText);\n return inputElement;\n };\n Text.prototype.createDropDownListForSize = function (fontSelectElement) {\n var _this = this;\n var fontSize = ['8', '9', '10', '11', '12', '14', '16', '18', '20', '22', '24', '26', '28', '36', '48', '72', '96'];\n this.fontSize = new ComboBox({\n dataSource: fontSize, popupHeight: '180px',\n popupWidth: '80px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl\n });\n this.fontSize.focus = function () {\n _this.isRetrieving = false;\n _this.fontSize.element.select();\n };\n this.fontSize.value = this.documentEditor.selection.characterFormat.fontSize.toString();\n this.fontSize.appendTo(fontSelectElement);\n this.fontSize.element.parentElement.setAttribute('title', this.localObj.getConstant('Font Size'));\n };\n Text.prototype.createDropDownListForFamily = function (fontSelectElement) {\n var _this = this;\n /* eslint-disable */\n var fontStyle;\n var isStringTemplate = false;\n var itemTemplate = '';\n if (!this.container.enableCsp) {\n itemTemplate = '${FontName}';\n isStringTemplate = true;\n }\n this.fontFamily = new ComboBox({\n dataSource: fontStyle,\n query: new Query().select(['FontName']),\n fields: { text: 'FontName', value: 'FontValue' },\n popupHeight: '150px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl,\n itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontSelectElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.container.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'FontValue': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () {\n _this.isRetrieving = false;\n _this.fontFamily.element.select();\n };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n };\n /* eslint-enable */\n Text.prototype.wireEvent = function () {\n var _this = this;\n this.fontFamily.addEventListener('change', function () {\n _this.changeFontFamily();\n });\n this.fontSize.addEventListener('change', function () {\n _this.changeFontSize();\n });\n this.bold.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.boldAction();\n });\n this.italic.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.italicAction();\n });\n this.underline.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.underlineAction();\n });\n this.strikethrough.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.strikethroughAction();\n });\n this.superscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.superscriptAction();\n });\n this.subscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.subscriptAction();\n });\n this.fontColorInputElement.addEventListener('change', function (args) {\n _this.isRetrieving = false;\n _this.changeFontColor(args);\n });\n this.clearFormat.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.clearFormatAction();\n });\n this.changeCaseDropdown.addEventListener('select', function (args) {\n _this.isRetrieving = false;\n _this.changeCase(args);\n });\n };\n Text.prototype.unwireEvents = function () {\n this.fontFamily.change = undefined;\n this.fontSize.change = undefined;\n this.bold.click = undefined;\n this.italic.click = undefined;\n this.underline.click = undefined;\n this.strikethrough.click = undefined;\n this.superscript.click = undefined;\n this.subscript.click = undefined;\n this.fontColorInputElement.change = undefined;\n this.highlightColorElement.click = undefined;\n this.highlightColor.click = undefined;\n this.clearFormat.click = undefined;\n this.changeCaseDropdown.select = undefined;\n };\n Text.prototype.boldAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleBold();\n }\n };\n Text.prototype.italicAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleItalic();\n }\n };\n Text.prototype.underlineAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleUnderline('Single');\n }\n };\n Text.prototype.strikethroughAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleStrikethrough();\n }\n };\n Text.prototype.clearFormatAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.clearFormatting();\n }\n };\n Text.prototype.subscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleSubscript();\n }\n };\n Text.prototype.superscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleSuperscript();\n }\n };\n Text.prototype.changeFontColor = function (arg) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection) {\n this.documentEditor.selection.characterFormat.fontColor = arg.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Text.prototype.changeFontFamily = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection && this.fontFamily.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selection.characterFormat.fontFamily = _this.fontFamily.value;\n }, 10);\n }\n };\n Text.prototype.changeFontSize = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection && this.fontSize.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selection.characterFormat.fontSize = _this.fontSize.value;\n }, 10);\n }\n };\n Text.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.selection) {\n //#region character format\n if (this.documentEditor.selection.characterFormat.fontFamily) {\n this.fontFamily.value = this.documentEditor.selection.characterFormat.fontFamily;\n this.fontFamily.dataBind();\n }\n else {\n this.fontFamily.value = '';\n }\n if (this.documentEditor.selection.characterFormat.fontSize) {\n this.fontSize.value = this.documentEditor.selection.characterFormat.fontSize.toString();\n this.fontSize.dataBind();\n }\n else {\n this.fontSize.value = '';\n }\n if (this.documentEditor.selection.characterFormat.bold) {\n if (!this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.italic) {\n if (!this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.underline\n && this.documentEditor.selection.characterFormat.underline !== 'None') {\n if (!this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.strikethrough\n && this.documentEditor.selection.characterFormat.strikethrough !== 'None') {\n if (!this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.baselineAlignment\n && this.documentEditor.selection.characterFormat.baselineAlignment === 'Subscript') {\n if (!this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.baselineAlignment\n && this.documentEditor.selection.characterFormat.baselineAlignment === 'Superscript') {\n if (!this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.fontColor) {\n var fontColor = this.documentEditor.selection.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n this.fontColorInputElement.value = fontColor;\n }\n if (this.documentEditor.selection.characterFormat.highlightColor) {\n this.highlightColorInputElement.style.backgroundColor = this.appliedHighlightColor;\n this.applyHighlightColorAsBackground(this.documentEditor.selection.characterFormat.highlightColor);\n }\n //#endregion\n }\n };\n Text.prototype.destroy = function () {\n if (this.highlightColor) {\n this.highlightColor.destroy();\n this.highlightColor = undefined;\n }\n if (this.fontColorInputElement) {\n this.fontColorInputElement.destroy();\n this.fontColorInputElement = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.changeCaseDropdown) {\n this.changeCaseDropdown.destroy();\n this.changeCaseDropdown = undefined;\n }\n if (this.boldBtn) {\n this.boldBtn.destroy();\n this.boldBtn = undefined;\n }\n if (this.italicBtn) {\n this.italicBtn.destroy();\n this.italicBtn = undefined;\n }\n if (this.underlineBtn) {\n this.underlineBtn.destroy();\n this.underlineBtn = undefined;\n }\n if (this.strikethroughBtn) {\n this.strikethroughBtn.destroy();\n this.strikethroughBtn = undefined;\n }\n if (this.subscriptBtn) {\n this.subscriptBtn.destroy();\n this.subscriptBtn = undefined;\n }\n if (this.superscriptBtn) {\n this.superscriptBtn.destroy();\n this.superscriptBtn = undefined;\n }\n if (this.clearFormatBtn) {\n this.clearFormatBtn.destroy();\n this.clearFormatBtn = undefined;\n }\n this.container = undefined;\n };\n return Text;\n}());\nexport { Text };\n","import { createElement, isNullOrUndefined, classList, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { Query } from '@syncfusion/ej2-data';\n/**\n * Paragraph Properties\n *\n * @private\n */\nvar Paragraph = /** @class */ (function () {\n function Paragraph(container) {\n this.isRetrieving = false;\n this.appliedBulletStyle = 'dot';\n this.appliedNumberingStyle = 'arabic';\n this.appliedLineSpacing = '';\n this.splitButtonClass = 'e-de-prop-splitbutton';\n this.container = container;\n }\n Object.defineProperty(Paragraph.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Paragraph.prototype.initializeParagraphPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.splitButtonClass = 'e-rtl ' + this.splitButtonClass;\n }\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var paragraphDiv = this.createDivElement(element + '_paragraph', wholeDiv, '');\n classList(paragraphDiv, ['e-de-cntr-pane-padding'], []);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.innerHTML = this.localObj.getConstant('Paragraph');\n paragraphDiv.appendChild(label);\n var styleDiv = this.createDivElement(element + '_styleDiv', paragraphDiv);\n styleDiv.classList.add('e-de-ctnr-segment', 'e-de-ctnr-style-div');\n var styleSelect = createElement('input', { id: element + '_style', styles: 'width:248px;letter-spacing: 0.05px;' });\n styleDiv.appendChild(styleSelect);\n this.createStyleDropDownList(styleSelect);\n var indentWholeDiv = this.createDivElement(element + '_indentWholeDiv', paragraphDiv);\n indentWholeDiv.style.display = 'flex';\n indentWholeDiv.classList.add('e-de-ctnr-segment');\n if (isRtl) {\n classList(indentWholeDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var indentDiv = this.createDivElement(element + '_indentDiv', indentWholeDiv, 'display:flex;');\n var indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n }\n indentDiv.className = indentClassName;\n this.leftAlignment = this.createButtonTemplate(element + '_leftIndent', 'e-de-ctnr-alignleft e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align left Tooltip');\n this.centerAlignment = this.createButtonTemplate(element + '_centerIndent', 'e-de-ctnr-aligncenter e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Center Tooltip');\n this.rightAlignment = this.createButtonTemplate(element + '_rightIndent', 'e-de-ctnr-alignright e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align right Tooltip');\n this.justify = this.createButtonTemplate(element + '_justify', 'e-de-ctnr-justify e-icons', indentDiv, 'e-de-prop-indent-last-button', '40.5', 'Justify Tooltip');\n var increaseIndentIconCss = 'e-de-ctnr-increaseindent e-icons';\n var decreaseIndentIconCss = 'e-de-ctnr-decreaseindent e-icons';\n var incDecIndentDiv = this.createDivElement(element + '_indentDiv', indentWholeDiv, 'display:flex;');\n indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n increaseIndentIconCss += ' e-de-flip';\n decreaseIndentIconCss += ' e-de-flip';\n }\n incDecIndentDiv.className = indentClassName;\n this.decreaseIndent = this.createButtonTemplate(element + '_decreaseIndent', decreaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-button', '37', 'Decrease indent');\n this.increaseIndent = this.createButtonTemplate(element + '_increaseIndent', increaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-last-button', '37', 'Increase indent');\n var listDiv = this.createDivElement(element + '_listDiv', paragraphDiv, 'display:flex;');\n var paraDiv = this.createDivElement(element + '_paraDiv', paragraphDiv, 'display:flex');\n classList(listDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n if (isRtl) {\n classList(listDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n }\n var lineHeight = createElement('button', { id: element + '_lineHeight', attrs: { type: 'button' } });\n listDiv.appendChild(lineHeight);\n this.lineSpacing = this.createLineSpacingDropdown(lineHeight);\n var listDropDown = this.createDivElement(element + '_listDropDiv', listDiv);\n listDropDown.className = 'de-split-button';\n var bulletButton = createElement('button', { id: element + '_bullet', attrs: { type: 'button' } });\n listDropDown.appendChild(bulletButton);\n var numberingList = createElement('button', { id: element + '_numberingList', attrs: { type: 'button' } });\n listDropDown.appendChild(numberingList);\n var bulletIconCss = 'e-de-ctnr-bullets e-icons';\n var numberIconCss = 'e-de-ctnr-numbering e-icons';\n if (isRtl) {\n bulletIconCss += ' e-de-flip';\n numberIconCss += ' e-de-flip';\n }\n this.createBulletListDropButton(bulletIconCss, bulletButton);\n this.createNumberListDropButton(numberIconCss, numberingList);\n this.borders = this.createButtonTemplate(element + '_borders', 'e-de-ctnr-borders e-icons', paraDiv, 'e-de-ctnr-group-btn', '37', 'Borders');\n };\n Paragraph.prototype.createSeparator = function (parentDiv) {\n var separator = createElement('div', { className: 'e-de-prop-vline' });\n parentDiv.appendChild(separator);\n };\n Paragraph.prototype.createDivElement = function (id, parentDiv, style) {\n var element;\n if (style) {\n element = createElement('div', { id: id, styles: style });\n }\n else {\n element = createElement('div', { id: id });\n }\n parentDiv.appendChild(element);\n return element;\n };\n /* eslint-disable-next-line max-len */\n Paragraph.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var buttonElement = createElement('Button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', this.localObj.getConstant(toolTipText));\n switch (toolTipText) {\n case 'Align left Tooltip':\n this.leftAlignmentBtn = btn;\n break;\n case 'Align right Tooltip':\n this.rightAlignmentBtn = btn;\n break;\n case 'Justify Tooltip':\n this.justifyBtn = btn;\n break;\n case 'Decrease indent':\n this.decreaseIndentBtn = btn;\n break;\n case 'Increase indent':\n this.increaseIndentBtn = btn;\n break;\n case 'Borders':\n this.bordersBtn = btn;\n break;\n default:\n this.centerAlignmentBtn = btn;\n }\n return buttonElement;\n };\n Paragraph.prototype.createLineSpacingDropdown = function (button) {\n var _this = this;\n var items = [{\n text: this.localObj.getConstant('Single')\n }, {\n text: '1.15'\n }, {\n text: '1.5'\n }, {\n text: this.localObj.getConstant('Double')\n }];\n var dropdown = new DropDownButton({\n items: items,\n iconCss: 'e-de-ctnr-linespacing e-icons',\n enableRtl: this.isRtl,\n select: this.lineSpacingAction.bind(this),\n cssClass: this.splitButtonClass,\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === _this.appliedLineSpacing) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-item e-icons e-de-linespacing');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n }\n });\n dropdown.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant('Line spacing'));\n return dropdown;\n };\n Paragraph.prototype.createNumberListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'target', styles: 'width: 211px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneNumberTag = this.createNumberNoneListTag(ulTag);\n this.noneNumberTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.numberList = this.createNumberListTag(ulTag, '1.', '2.', '3.');\n this.numberList.addEventListener('click', this.numberedNumberDotClick.bind(this));\n this.lowLetter = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.');\n this.lowLetter.addEventListener('click', this.numberedLowLetterClick.bind(this));\n this.upLetter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.');\n this.upLetter.addEventListener('click', this.numberedUpLetterClick.bind(this));\n this.lowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.');\n this.lowRoman.addEventListener('click', this.numberedLowRomanClick.bind(this));\n this.upRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.');\n this.upRoman.addEventListener('click', this.numberedUpRomanClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n var levelPattern = 'None';\n if (!isNullOrUndefined(_this.documentEditor.selection.paragraphFormat)) {\n if (isNullOrUndefined(_this.documentEditor.selection.paragraphFormat.listId) || _this.documentEditor.selection.paragraphFormat.listId == -1) {\n levelPattern = 'None';\n }\n else {\n var list = _this.documentEditor.documentHelper.getListById(_this.documentEditor.selection.paragraphFormat.listId);\n var abstractList = _this.documentEditor.documentHelper.getAbstractListById(list.abstractListId);\n var level = abstractList.levels[_this.documentEditor.selection.paragraphFormat.listLevelNumber];\n levelPattern = level.listLevelPattern;\n }\n }\n _this.updateSelectedNumberedListType(levelPattern);\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.numberedListBtn = new SplitButton(menuOptions);\n this.numberedListBtn.click = function () {\n _this.applyLastAppliedNumbering();\n };\n this.numberedListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Numbering'));\n };\n Paragraph.prototype.updateSelectedBulletListType = function (listText) {\n switch (listText) {\n case String.fromCharCode(61623):\n this.dotBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61551) + String.fromCharCode(32):\n this.circleBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61607):\n this.squareBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61558):\n this.flowerBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61656):\n this.arrowBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61692):\n this.tickBullet.classList.add('de-list-item-selected');\n break;\n default:\n this.noneBulletTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.updateSelectedNumberedListType = function (listText) {\n switch (listText) {\n case 'Arabic':\n this.numberList.classList.add('de-list-item-selected');\n break;\n case 'UpRoman':\n this.upRoman.classList.add('de-list-item-selected');\n break;\n case 'UpLetter':\n this.upLetter.classList.add('de-list-item-selected');\n break;\n case 'LowLetter':\n this.lowLetter.classList.add('de-list-item-selected');\n break;\n case 'LowRoman':\n this.lowRoman.classList.add('de-list-item-selected');\n break;\n default:\n this.noneNumberTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.removeSelectedList = function () {\n var className = 'de-list-item-selected';\n this.noneNumberTag.classList.remove(className);\n this.numberList.classList.remove(className);\n this.lowLetter.classList.remove(className);\n this.upLetter.classList.remove(className);\n this.lowRoman.classList.remove(className);\n this.upRoman.classList.remove(className);\n this.noneBulletTag.classList.remove(className);\n this.dotBullet.classList.remove(className);\n this.circleBullet.classList.remove(className);\n this.squareBullet.classList.remove(className);\n this.flowerBullet.classList.remove(className);\n this.arrowBullet.classList.remove(className);\n this.tickBullet.classList.remove(className);\n };\n /**\n * @private\n */\n Paragraph.prototype.applyLastAppliedNumbering = function () {\n switch (this.appliedNumberingStyle) {\n case 'arabic':\n this.numberedNumberDotClick();\n break;\n case 'lowletter':\n this.numberedLowLetterClick();\n break;\n case 'upletter':\n this.numberedUpLetterClick();\n break;\n case 'lowroman':\n this.numberedLowRomanClick();\n break;\n case 'uproman':\n this.numberedUpRomanClick();\n break;\n }\n };\n Paragraph.prototype.applyLastAppliedBullet = function () {\n switch (this.appliedBulletStyle) {\n case 'dot':\n this.bulletDotClick();\n break;\n case 'circle':\n this.bulletCircleClick();\n break;\n case 'square':\n this.bulletSquareClick();\n break;\n case 'arrow':\n this.bulletArrowClick();\n break;\n case 'tick':\n this.bulletTickClick();\n break;\n case 'flower':\n this.bulletFlowerClick();\n break;\n }\n };\n Paragraph.prototype.createBulletListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'bullet_list', styles: 'width: 196px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneBulletTag = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-none e-icons e-de-ctnr-list', true);\n this.noneBulletTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.dotBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-dot e-icons e-de-ctnr-list', false);\n this.dotBullet.addEventListener('click', this.bulletDotClick.bind(this));\n this.circleBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-circle e-icons e-de-ctnr-list', false);\n this.circleBullet.addEventListener('click', this.bulletCircleClick.bind(this));\n this.squareBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-square e-icons e-de-ctnr-list', false);\n this.squareBullet.addEventListener('click', this.bulletSquareClick.bind(this));\n this.flowerBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-flower e-icons e-de-ctnr-list', false);\n this.flowerBullet.addEventListener('click', this.bulletFlowerClick.bind(this));\n this.arrowBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-arrow e-icons e-de-ctnr-list', false);\n this.arrowBullet.addEventListener('click', this.bulletArrowClick.bind(this));\n this.tickBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-tick e-icons e-de-ctnr-list', false);\n this.tickBullet.addEventListener('click', this.bulletTickClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n _this.updateSelectedBulletListType(_this.documentEditor.selection.paragraphFormat.listText);\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.bulletListBtn = new SplitButton(menuOptions);\n this.bulletListBtn.click = function () {\n _this.applyLastAppliedBullet();\n };\n this.bulletListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Bullets'));\n };\n Paragraph.prototype.createNumberListTag = function (ulTag, text1, text2, text3) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + text1 + '
      ' + text2 + '';\n innerHTML += '
      ' + text3 + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + this.localObj.getConstant('None') + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu', styles: 'position:relative;left:11px;top:13px',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createBulletListTag = function (ulTag, iconCss, isNone) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-bullet-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var liInnerDiv = createElement('div', { className: 'e-de-bullet-list-header-presetmenu' });\n var spanDiv = createElement('div', { styles: isNone ? 'font-size:8px;text-align: center;top: 8px;line-height:normal' : '' });\n liInnerDiv.appendChild(spanDiv);\n var span = createElement('span', { className: !isNone ? iconCss : '' });\n spanDiv.appendChild(span);\n if (isNone) {\n liInnerDiv.style.display = 'inline-table';\n span.textContent = this.localObj.getConstant('None');\n }\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createStyleDropDownList = function (selectElement) {\n this.style = new DropDownList({\n dataSource: [{ StyleName: 'Normal', Class: 'e-icons e-edit-font' }],\n cssClass: 'e-de-prop-dropdown',\n popupHeight: '240px',\n enableRtl: this.isRtl,\n query: new Query().select(['StyleName', 'Style']),\n fields: { text: 'StyleName', value: 'StyleName' },\n change: this.selectStyleValue.bind(this)\n });\n if (!this.container.enableCsp) {\n this.style.open = this.updateOptions.bind(this);\n this.style.itemTemplate = '${StyleName}';\n this.style.footerTemplate = ''\n + this.localObj.getConstant('Manage Styles') + '...' + '';\n this.style.isStringTemplate = true;\n }\n this.style.appendTo(selectElement);\n selectElement.parentElement.setAttribute('title', this.localObj.getConstant('Styles'));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.updateOptions = function (args) {\n this.updateStyleNames();\n args.popup.element.getElementsByClassName('e-de-ctnr-dropdown-ftr')[0].addEventListener('click', this.createStyle.bind(this));\n };\n Paragraph.prototype.updateStyleNames = function () {\n this.styleName = !isNullOrUndefined(this.style.itemData) ? this.style.itemData.StyleName : undefined;\n this.style.dataSource = this.constructStyleDropItems(this.documentEditor.getStyles('Paragraph'));\n this.style.dataBind();\n this.onSelectionChange();\n };\n Paragraph.prototype.createStyle = function () {\n this.style.hidePopup();\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.showDialog('Styles');\n }\n };\n Paragraph.prototype.constructStyleDropItems = function (styles) {\n var collection = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var styleObj = styles_1[_i];\n var obj = {};\n var styleName = this.localObj.getConstant(styleObj.name);\n obj.StyleName = styleName === '' ? styleObj.name : styleName;\n obj.Style = this.parseStyle(styleObj.style);\n collection.push(obj);\n }\n return collection;\n };\n Paragraph.prototype.parseStyle = function (style) {\n var domStyle = '';\n var styleObj = JSON.parse(style);\n var textDecoration = '';\n if (!isNullOrUndefined(styleObj.characterFormat.baselineAlignment) && styleObj.characterFormat.baselineAlignment !== 'Normal') {\n var vAlign = '';\n switch (styleObj.characterFormat.baselineAlignment) {\n case 'Superscript':\n vAlign = 'super';\n break;\n case 'Subscript':\n vAlign = 'sub';\n break;\n }\n if (vAlign.length > 1) {\n domStyle += 'vertical-align:' + vAlign + ';';\n }\n }\n if (!isNullOrUndefined(styleObj.characterFormat.underline) && styleObj.characterFormat.underline !== 'None') {\n textDecoration += 'underline ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.strikethrough) && styleObj.characterFormat.strikethrough !== 'None') {\n textDecoration += 'line-through ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontSize)) {\n domStyle += 'font-size:' + styleObj.characterFormat.fontSize + 'px;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontFamily)) {\n domStyle += 'font-family:' + styleObj.characterFormat.fontFamily + ';';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.bold) && styleObj.characterFormat.bold) {\n domStyle += 'font-weight:bold;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.italic) && styleObj.characterFormat.italic) {\n domStyle += 'font-style:italic;';\n }\n // if (!isNullOrUndefined(styleObj.characterFormat.fontColor)) {\n // domStyle += 'color: ' + styleObj.characterFormat.fontColor + ';';\n // }\n if (textDecoration.length > 1) {\n domStyle += 'text-decoration:' + textDecoration + ';';\n }\n return domStyle;\n };\n Paragraph.prototype.wireEvent = function () {\n var _this = this;\n this.leftAlignment.addEventListener('click', function () {\n _this.leftAlignmentAction();\n });\n this.rightAlignment.addEventListener('click', function () {\n _this.rightAlignmentAction();\n });\n this.centerAlignment.addEventListener('click', function () {\n _this.centerAlignmentAction();\n });\n this.justify.addEventListener('click', function () {\n _this.justifyAction();\n });\n this.increaseIndent.addEventListener('click', function () {\n _this.increaseIndentAction();\n });\n this.decreaseIndent.addEventListener('click', function () {\n _this.decreaseIndentAction();\n });\n this.lineSpacing.addEventListener('select', function (args) {\n _this.lineSpacingAction(args);\n });\n this.borders.addEventListener('click', function () {\n _this.documentEditor.showBordersAndShadingDialog();\n });\n };\n Paragraph.prototype.unwireEvents = function () {\n this.leftAlignment.click = undefined;\n this.rightAlignment.click = undefined;\n this.centerAlignment.click = undefined;\n this.justify.click = undefined;\n this.increaseIndent.click = undefined;\n this.decreaseIndent.click = undefined;\n this.lineSpacing.select = undefined;\n this.style.select = undefined;\n };\n Paragraph.prototype.leftAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Left');\n }\n };\n Paragraph.prototype.lineSpacingAction = function (args) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n var text = args.item.text;\n switch (text) {\n case this.localObj.getConstant('Single'):\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1;\n break;\n case '1.15':\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1.15;\n break;\n case '1.5':\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1.5;\n break;\n case this.localObj.getConstant('Double'):\n this.documentEditor.selection.paragraphFormat.lineSpacing = 2;\n break;\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Paragraph.prototype.setLineSpacing = function () {\n var lineSpacing = this.documentEditor.selection.paragraphFormat.lineSpacing;\n if (lineSpacing === 1) {\n this.appliedLineSpacing = this.localObj.getConstant('Single');\n }\n else if (lineSpacing === 1.15) {\n this.appliedLineSpacing = '1.15';\n }\n else if (lineSpacing === 1.5) {\n this.appliedLineSpacing = '1.5';\n }\n else if (lineSpacing === 2) {\n this.appliedLineSpacing = this.localObj.getConstant('Double');\n }\n else {\n this.appliedLineSpacing = '';\n }\n };\n Paragraph.prototype.selectStyleValue = function (args) {\n var _this = this;\n if (this.isRetrieving || !args.isInteracted) {\n return;\n }\n setTimeout(function () {\n _this.applyStyleValue(args);\n }, 10);\n };\n Paragraph.prototype.applyStyleValue = function (args) {\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n if (this.localObj.getConstant('Heading 1') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 1';\n }\n else if (this.localObj.getConstant('Heading 2') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 2';\n }\n else if (this.localObj.getConstant('Heading 3') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 3';\n }\n else if (this.localObj.getConstant('Heading 4') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 4';\n }\n else if (this.localObj.getConstant('Heading 5') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 5';\n }\n else if (this.localObj.getConstant('Heading 6') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 6';\n }\n else if (this.localObj.getConstant('Normal') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Normal';\n }\n this.documentEditor.editor.applyStyle(args.itemData.StyleName, true);\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.rightAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Right');\n }\n };\n Paragraph.prototype.centerAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Center');\n }\n };\n Paragraph.prototype.justifyAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Justify');\n }\n };\n Paragraph.prototype.increaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.increaseIndent();\n }\n };\n Paragraph.prototype.decreaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.decreaseIndent();\n }\n };\n Paragraph.prototype.numberedNoneClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.documentEditor.editor.clearList();\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedNumberDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'arabic';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'Arabic');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'uproman';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'UpRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'upletter';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'UpLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'lowletter';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'LowLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'lowroman';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'LowRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.documentEditor.selection.paragraphFormat.listLevelNumber <= 0) ? 0 : this.documentEditor.selection.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n Paragraph.prototype.bulletDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'dot';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61623), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletCircleClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'circle';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61551) + String.fromCharCode(32), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletSquareClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'square';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61607), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletFlowerClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'flower';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61558), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletArrowClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'arrow';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61656), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletTickClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'tick';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61692), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.editor) {\n //#region paragraph format\n var style = this.documentEditor.selection.paragraphFormat.styleName;\n if (style) {\n var localeValue = this.localObj.getConstant(style);\n this.style.value = (isNullOrUndefined(localeValue) || localeValue == '') ? style : localeValue;\n this.style.dataBind();\n }\n else {\n this.style.value = null;\n }\n classList(this.leftAlignment, [], ['e-btn-toggle']);\n classList(this.rightAlignment, [], ['e-btn-toggle']);\n classList(this.centerAlignment, [], ['e-btn-toggle']);\n classList(this.justify, [], ['e-btn-toggle']);\n if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Left') {\n classList(this.leftAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Right') {\n classList(this.rightAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Center') {\n classList(this.centerAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Justify') {\n classList(this.justify, ['e-btn-toggle'], []);\n }\n //#endregion\n }\n this.setLineSpacing();\n this.isRetrieving = false;\n };\n Paragraph.prototype.destroy = function () {\n this.container = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.destroy();\n this.lineSpacing = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.bulletListBtn) {\n this.bulletListBtn.destroy();\n this.bulletListBtn = undefined;\n }\n if (this.numberedListBtn) {\n this.numberedListBtn.destroy();\n this.numberedListBtn = undefined;\n }\n if (this.leftAlignmentBtn) {\n this.leftAlignmentBtn.destroy();\n this.leftAlignmentBtn = undefined;\n }\n if (this.rightAlignmentBtn) {\n this.rightAlignmentBtn.destroy();\n this.rightAlignmentBtn = undefined;\n }\n if (this.centerAlignmentBtn) {\n this.centerAlignmentBtn.destroy();\n this.centerAlignmentBtn = undefined;\n }\n if (this.justifyBtn) {\n this.justifyBtn.destroy();\n this.justifyBtn = undefined;\n }\n if (this.decreaseIndentBtn) {\n this.decreaseIndentBtn.destroy();\n this.decreaseIndentBtn = undefined;\n }\n if (this.increaseIndentBtn) {\n this.increaseIndentBtn.destroy();\n this.increaseIndentBtn = undefined;\n }\n if (this.bordersBtn) {\n this.bordersBtn.destroy();\n this.bordersBtn = undefined;\n }\n };\n return Paragraph;\n}());\nexport { Paragraph };\n","import { createElement, classList } from '@syncfusion/ej2-base';\nimport { Text } from './text-properties';\nimport { Paragraph } from './paragraph-properties';\n/**\n * Text Properties pane\n *\n * @private\n */\nvar TextProperties = /** @class */ (function () {\n /**\n * Initialize the Text properties pane.\n *\n * @param {DocumentEditorContainer} container DocumentEditorContainer instance.\n * @param {string} id Identifier element reference.\n * @param {boolean} isTableProperties Specified if text properties is inside the text properties.\n * @param {boolean} isRtl Specifies the RTL layout.\n */\n function TextProperties(container, id, isTableProperties, isRtl) {\n this.isInitial = true;\n this.container = container;\n this.text = new Text(container, isRtl);\n this.paragraph = new Paragraph(container);\n this.initializeTextProperties(id, isTableProperties, isRtl);\n this.wireEvents();\n }\n Object.defineProperty(TextProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TextProperties.prototype.updateStyles = function () {\n this.paragraph.updateStyleNames();\n };\n Object.defineProperty(TextProperties.prototype, \"appliedHighlightColor\", {\n get: function () {\n return this.text.appliedHighlightColor;\n },\n set: function (value) {\n this.text.appliedHighlightColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedBulletStyle\", {\n get: function () {\n return this.paragraph.appliedBulletStyle;\n },\n set: function (value) {\n this.paragraph.appliedBulletStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedNumberingStyle\", {\n get: function () {\n return this.paragraph.appliedNumberingStyle;\n },\n set: function (value) {\n this.paragraph.appliedNumberingStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.showTextProperties = function (isShow) {\n if (isShow) {\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n TextProperties.prototype.initializeTextProperties = function (id, isTableProperties, isRtl) {\n this.element = createElement('div', { className: 'e-de-prop-pane e-de-scrollbar-hide' });\n this.text.initializeTextPropertiesDiv(this.element, isRtl);\n this.paragraph.initializeParagraphPropertiesDiv(this.element, isRtl);\n this.paragraph.updateStyleNames();\n if (!isTableProperties) {\n this.container.propertiesPaneContainer.appendChild(this.element);\n }\n };\n TextProperties.prototype.generateUniqueID = function () {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n };\n TextProperties.prototype.wireEvents = function () {\n this.text.wireEvent();\n this.paragraph.wireEvent();\n };\n TextProperties.prototype.onSelectionChange = function () {\n this.text.onSelectionChange();\n this.paragraph.onSelectionChange();\n };\n TextProperties.prototype.destroy = function () {\n if (this.text) {\n this.text.destroy();\n this.text = undefined;\n }\n if (this.paragraph) {\n this.paragraph.destroy();\n this.paragraph = undefined;\n }\n this.container = undefined;\n };\n return TextProperties;\n}());\nexport { TextProperties };\n","import { createElement, classList, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { TextProperties } from './text-properties-pane';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { NumericTextBox, ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * Represents table properties\n *\n * @private\n */\nvar TableProperties = /** @class */ (function () {\n /* eslint-disable-next-line max-len */\n function TableProperties(container, imageProperty, isRtl) {\n this.isTopMarginApply = false;\n this.isRightMarginApply = false;\n this.isBottomMarginApply = false;\n this.isLeftMarginApply = false;\n this.borderColor = '#000000';\n this.groupButtonClass = 'e-de-ctnr-group-btn e-btn-group';\n this.container = container;\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.groupButtonClass = 'e-rtl ' + this.groupButtonClass;\n }\n this.tableTextProperties = new TextProperties(container, 'textProperties', true, this.isRtl);\n this.imageProperty = imageProperty;\n this.elementId = this.documentEditor.element.id;\n this.initializeTablePropPane();\n this.prevContext = this.documentEditor.selection.contextType;\n }\n Object.defineProperty(TableProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TableProperties.prototype.initializeTablePropPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.tableProperties = createElement('div', { className: 'e-de-scrollbar-hide', styles: 'overflow: auto' });\n this.initFillColorDiv();\n this.initBorderStylesDiv();\n this.initCellDiv();\n this.initInsertOrDelCell();\n this.initCellMargin();\n this.initAlignText();\n this.addTablePropertyTab();\n // wire fnt property\n this.wireEvent();\n };\n /**\n * @private\n * @param {boolean} enable - enable/disable table properties pane.\n * @returns {void}\n */\n TableProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TableProperties.prototype.addTablePropertyTab = function () {\n var tableHeader = createElement('div', { innerHTML: this.localObj.getConstant('Table') });\n var textHeader = createElement('div', { innerHTML: this.localObj.getConstant('Text') });\n this.parentElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-prop-pane' });\n this.element = createElement('div', { id: this.elementId + '_propertyTabDiv', className: 'e-de-property-tab' });\n /* eslint-disable-next-line max-len */\n var items = [{ header: { text: textHeader }, content: this.tableTextProperties.element }, { header: { text: tableHeader }, content: this.tableProperties }];\n this.propertiesTab = new Tab({ items: items, animation: { previous: { effect: 'None' }, next: { effect: 'None' } }, selected: this.onTabSelection.bind(this) });\n this.propertiesTab.isStringTemplate = true;\n this.propertiesTab.appendTo(this.element);\n this.parentElement.appendChild(this.element);\n this.container.propertiesPaneContainer.appendChild(this.parentElement);\n };\n TableProperties.prototype.onTabSelection = function () {\n this.documentEditor.resize();\n this.documentEditor.focusIn();\n };\n TableProperties.prototype.wireEvent = function () {\n var _this = this;\n this.shadingBtn.addEventListener('change', this.changeBackgroundColor.bind(this));\n this.borderBtn.addEventListener('change', function (args) {\n setTimeout(function () {\n _this.borderColor = args.currentValue.hex;\n _this.tableOutlineBorder.element.focus();\n }, 10);\n });\n this.tableOutlineBorder.element.addEventListener('click', this.onOutlineBorder.bind(this));\n this.tableAllBorder.element.addEventListener('click', this.onAllBorder.bind(this));\n this.tableCenterBorder.element.addEventListener('click', this.onInsideBorder.bind(this));\n this.tableLeftBorder.element.addEventListener('click', this.onLeftBorder.bind(this));\n this.tableCenterVerticalBorder.element.addEventListener('click', this.onVerticalBorder.bind(this));\n this.tableRightBorder.element.addEventListener('click', this.onRightBorder.bind(this));\n this.tableTopBorder.element.addEventListener('click', this.onTopBorder.bind(this));\n this.tableCenterHorizontalBorder.element.addEventListener('click', this.onHorizontalBorder.bind(this));\n this.tableBottomBorder.element.addEventListener('click', this.onBottomBorder.bind(this));\n this.insertRowAbove.element.addEventListener('click', this.onInsertRowAbove.bind(this));\n this.insertRowBelow.element.addEventListener('click', this.onInsertRowBelow.bind(this));\n this.insertColumnLeft.element.addEventListener('click', this.onInsertColumnLeft.bind(this));\n this.insertColumnRight.element.addEventListener('click', this.onInsertColumnRight.bind(this));\n this.deleteRow.element.addEventListener('click', this.onDeleteRow.bind(this));\n this.deleteColumn.element.addEventListener('click', this.onDeleteColumn.bind(this));\n this.horizontalMerge.element.addEventListener('click', this.onMergeCell.bind(this));\n this.alignTop.element.addEventListener('click', this.applyAlignTop.bind(this));\n this.alignBottom.element.addEventListener('click', this.applyAlignBottom.bind(this));\n this.alignCenterHorizontal.element.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n this.topMargin.element.addEventListener('click', function () {\n _this.isTopMarginApply = true;\n });\n this.rightMargin.element.addEventListener('click', function () {\n _this.isRightMarginApply = true;\n });\n this.leftMargin.element.addEventListener('click', function () {\n _this.isLeftMarginApply = true;\n });\n this.bottomMargin.element.addEventListener('click', function () {\n _this.isBottomMarginApply = true;\n });\n this.topMargin.element.addEventListener('keydown', this.onTopMargin.bind(this));\n this.rightMargin.element.addEventListener('keydown', this.onRightMargin.bind(this));\n this.leftMargin.element.addEventListener('keydown', this.onLeftMargin.bind(this));\n this.bottomMargin.element.addEventListener('keydown', this.onBottomMargin.bind(this));\n this.topMargin.element.addEventListener('blur', function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n });\n this.rightMargin.element.addEventListener('blur', function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n });\n this.leftMargin.element.addEventListener('blur', function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n });\n this.bottomMargin.element.addEventListener('blur', function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n });\n };\n TableProperties.prototype.getBorder = function (border) {\n var lineWidth = (this.borderSize.content.indexOf('No Border') >= 0) ? 0 : parseInt(this.borderSize.content, 10);\n var linestyle = (lineWidth === 0) ? 'Cleared' : 'Single';\n var borderSettings = {\n type: border,\n borderColor: this.borderColor,\n lineWidth: lineWidth,\n borderStyle: linestyle\n };\n return borderSettings;\n };\n TableProperties.prototype.onOutlineBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('OutsideBorders'));\n };\n TableProperties.prototype.onAllBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('AllBorders'));\n };\n TableProperties.prototype.onInsideBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideBorders'));\n };\n TableProperties.prototype.onLeftBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('LeftBorder'));\n };\n TableProperties.prototype.onVerticalBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideVerticalBorder'));\n };\n TableProperties.prototype.onRightBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('RightBorder'));\n };\n TableProperties.prototype.onTopBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('TopBorder'));\n };\n TableProperties.prototype.onHorizontalBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideHorizontalBorder'));\n };\n TableProperties.prototype.onBottomBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('BottomBorder'));\n };\n TableProperties.prototype.onTopMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onBottomMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onLeftMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onRightMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.applyTopMargin = function () {\n if (!this.isTopMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.topMargin = (this.topMargin.value > this.topMargin.max)\n ? this.topMargin.max : this.topMargin.value;\n };\n TableProperties.prototype.applyBottomMargin = function () {\n if (!this.isBottomMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.bottomMargin = (this.bottomMargin.value > this.bottomMargin.max)\n ? this.bottomMargin.max : this.bottomMargin.value;\n };\n TableProperties.prototype.applyLeftMargin = function () {\n if (!this.isLeftMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.leftMargin = (this.leftMargin.value > this.leftMargin.max)\n ? this.leftMargin.max : this.leftMargin.value;\n };\n TableProperties.prototype.applyRightMargin = function () {\n if (!this.isRightMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.rightMargin = (this.rightMargin.value > this.rightMargin.max)\n ? this.rightMargin.max : this.rightMargin.value;\n };\n TableProperties.prototype.applyAlignTop = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Top';\n };\n TableProperties.prototype.applyAlignBottom = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Bottom';\n };\n TableProperties.prototype.applyAlignCenterHorizontal = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Center';\n };\n TableProperties.prototype.onMergeCell = function () {\n this.documentEditor.editor.mergeCells();\n };\n TableProperties.prototype.onInsertRowAbove = function () {\n this.documentEditor.editor.insertRow(true);\n };\n TableProperties.prototype.onInsertRowBelow = function () {\n this.documentEditor.editor.insertRow(false);\n };\n TableProperties.prototype.onInsertColumnLeft = function () {\n this.documentEditor.editor.insertColumn(true);\n };\n TableProperties.prototype.onInsertColumnRight = function () {\n this.documentEditor.editor.insertColumn(false);\n };\n TableProperties.prototype.onDeleteRow = function () {\n this.documentEditor.editor.deleteRow();\n };\n TableProperties.prototype.onDeleteColumn = function () {\n this.documentEditor.editor.deleteColumn();\n };\n TableProperties.prototype.onSelectionChange = function () {\n if (this.documentEditor.selection) {\n if (this.documentEditor.editor && this.documentEditor.editor.canMergeCells()) {\n this.horizontalMerge.disabled = false;\n }\n else {\n this.horizontalMerge.disabled = true;\n }\n if (this.documentEditor.selection.contextType === 'TableText' || this.documentEditor.selection.contextType === 'TableImage') {\n this.shadingBtn.value = this.documentEditor.selection.cellFormat.background ? this.documentEditor.selection.cellFormat.background : '';\n }\n /* eslint-disable-next-line max-len */\n this.topMargin.value = this.documentEditor.selection.cellFormat.topMargin ? this.documentEditor.selection.cellFormat.topMargin : 0;\n /* eslint-disable-next-line max-len */\n this.bottomMargin.value = this.documentEditor.selection.cellFormat.bottomMargin ? this.documentEditor.selection.cellFormat.bottomMargin : 0;\n /* eslint-disable-next-line max-len */\n this.rightMargin.value = this.documentEditor.selection.cellFormat.rightMargin ? this.documentEditor.selection.cellFormat.rightMargin : 0;\n /* eslint-disable-next-line max-len */\n this.leftMargin.value = this.documentEditor.selection.cellFormat.leftMargin ? this.documentEditor.selection.cellFormat.leftMargin : 0;\n }\n };\n TableProperties.prototype.changeBackgroundColor = function (args) {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n //Handle API for shading.\n this.documentEditor.selection.cellFormat.background = args.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n TableProperties.prototype.initFillColorDiv = function () {\n var fillDiv = createElement('div', { id: this.elementId + '_fillColorDiv', className: 'e-de-property-div-padding de-tbl-fill-clr' });\n this.tableProperties.appendChild(fillDiv);\n var label = createElement('label', { className: 'e-de-prop-sub-label' });\n label.classList.add('e-de-prop-fill-label');\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n label.textContent = this.localObj.getConstant('Fill');\n fillDiv.appendChild(label);\n // const buttonStyle: string = 'width:92px;display:inline-flex;padding:3px';\n this.shadingBtn = this.createColorPickerTemplate(this.elementId + '_tableShading', fillDiv, this.localObj.getConstant('Fill color'), false);\n classList(fillDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-cellbg-clr-picker'], ['e-caret']);\n };\n TableProperties.prototype.initBorderStylesDiv = function () {\n var borderStyleDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(borderStyleDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Border Style');\n borderStyleDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex;' });\n var styleDiv = createElement('div', { styles: 'width:min-content;height:126px', className: 'e-de-grp-btn-ctnr' });\n var div1 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-top' });\n styleDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-middle' });\n styleDiv.appendChild(div2);\n var div3 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-bottom' });\n styleDiv.appendChild(div3);\n if (this.isRtl) {\n div1.classList.add('e-de-rtl');\n div3.classList.add('e-de-rtl');\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.tableOutlineBorder = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-outsideborder e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Outside borders'));\n this.tableAllBorder = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-ctnr-allborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('All borders'));\n this.tableCenterBorder = this.createButtonTemplate(this.elementId + '_tableCenterBorder', 'e-de-ctnr-insideborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside borders'));\n this.tableLeftBorder = this.createButtonTemplate(this.elementId + '_tableLeftBorder', 'e-de-ctnr-leftborders e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Left border'));\n this.tableCenterVerticalBorder = this.createButtonTemplate(this.elementId + '_tableCenterVBorder', 'e-de-ctnr-insideverticalborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside vertical border'));\n this.tableRightBorder = this.createButtonTemplate(this.elementId + '_tableRightBorder', 'e-de-ctnr-rightborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Right border'));\n this.tableTopBorder = this.createButtonTemplate(this.elementId + '_tableTopBorder', 'e-de-ctnr-topborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Top border'));\n this.tableCenterHorizontalBorder = this.createButtonTemplate(this.elementId + '_tableCenterHBorder', 'e-de-ctnr-insidehorizondalborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside horizontal border'));\n this.tableBottomBorder = this.createButtonTemplate(this.elementId + '_tableBottomBorder', 'e-de-ctnr-bottomborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Bottom border'));\n parentDiv.appendChild(styleDiv);\n var styleTypeDiv = createElement('div', { className: 'de-tbl-fill-clr' });\n if (!this.isRtl) {\n styleTypeDiv.classList.add('e-de-stylediv');\n }\n else {\n styleTypeDiv.classList.add('e-de-stylediv-rtl');\n }\n this.borderBtn = this.createColorPickerTemplate(this.elementId + '_tableBorderColor', styleTypeDiv, this.localObj.getConstant('Border color'), true);\n this.borderBtn.value = '#000000';\n styleTypeDiv.firstElementChild.lastElementChild.lastElementChild.style.width = '30px';\n styleTypeDiv.firstElementChild.lastElementChild.firstElementChild.firstElementChild.style.width = '100%';\n classList(styleTypeDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-highlightcolor'], ['e-caret']);\n var borderSizeButton = createElement('button', { id: this.elementId + '_tableBorderSize', className: 'e-de-border-size-button', styles: 'font-size:10px;padding:0px;', attrs: { type: 'button' } });\n styleTypeDiv.appendChild(borderSizeButton);\n this.borderSize = this.createBorderSizeDropDown('e-de-ctnr-strokesize e-icons', borderSizeButton);\n parentDiv.appendChild(styleTypeDiv);\n this.borderSizeColorElement = document.getElementsByClassName('e-de-border-width');\n borderStyleDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellDiv = function () {\n var cellDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(cellDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell');\n cellDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-ctnr-group-btn' });\n parentDiv.classList.add('e-de-cell-div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.horizontalMerge = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-mergecell e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Merge cells'));\n //this.verticalMerge = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Vertical Merge');\n cellDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initInsertOrDelCell = function () {\n var tableOperationDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(tableOperationDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Insert Or Delete');\n tableOperationDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-insert-del-cell', styles: 'display:inline-flex' });\n var div1 = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass });\n if (!this.isRtl) {\n div2.style.marginLeft = '12px';\n }\n else {\n div2.style.marginRight = '12px';\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n parentDiv.appendChild(div2);\n var btnStyle = '';\n this.insertColumnLeft = this.createButtonTemplate(this.elementId + '_insertColumnLeft', 'e-de-ctnr-insertleft e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the left'));\n this.insertColumnRight = this.createButtonTemplate(this.elementId + '_insertColumnRight', 'e-de-ctnr-insertright e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the right'));\n this.insertRowAbove = this.createButtonTemplate(this.elementId + '_insertRowAbove', 'e-de-ctnr-insertabove e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows above'));\n this.insertRowBelow = this.createButtonTemplate(this.elementId + '_insertRowBelow', 'e-de-ctnr-insertbelow e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows below'));\n this.deleteRow = this.createButtonTemplate(this.elementId + '_deleteRow', 'e-de-ctnr-deleterows e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete rows'));\n this.deleteColumn = this.createButtonTemplate(this.elementId + '_deleteColumn', 'e-de-ctnr-deletecolumns e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete columns'));\n tableOperationDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellMargin = function () {\n var cellMarginDiv = createElement('div', { className: 'e-de-property-div-padding e-de-cellmargin-text' });\n this.tableProperties.appendChild(cellMarginDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell Margin');\n cellMarginDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex' });\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n var textboxDivStyle = 'width:' + 48 + 'px';\n var textboxParentDivStyle = 'width:' + 50 + 'px;float:left;';\n this.topMargin = this.createCellMarginTextBox(this.localObj.getConstant('Top'), this.elementId + '_topMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Top margin'));\n this.bottomMargin = this.createCellMarginTextBox(this.localObj.getConstant('Bottom'), this.elementId + '_bottomMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Bottom margin'));\n this.leftMargin = this.createCellMarginTextBox(this.localObj.getConstant('Left'), this.elementId + '_leftMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Left margin'));\n this.rightMargin = this.createCellMarginTextBox(this.localObj.getConstant('Right'), this.elementId + '_rightMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Right margin'), true);\n cellMarginDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initAlignText = function () {\n var alignmentDiv = createElement('div', { className: 'e-de-property-div-padding', styles: 'border-bottom-width:0px' });\n this.tableProperties.appendChild(alignmentDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Align Text');\n alignmentDiv.appendChild(label);\n var parentDiv = createElement('div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var div = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div);\n var btnStyle = '';\n this.alignTop = this.createButtonTemplate(this.elementId + '_alignTop', 'e-de-ctnr-aligntop e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align top'));\n // this.alignCenterVertical = this.createButtonTemplate(this.elementId + '_alignCenterVertical', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Vertical');\n // this.alignRight = this.createButtonTemplate(this.elementId + '_alignRight', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Right');\n this.alignBottom = this.createButtonTemplate(this.elementId + '_alignBottom', 'e-de-ctnr-alignbottom e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align bottom'));\n // this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Horizontal');\n this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-ctnr-aligncenter-table e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align center'));\n this.alignCenterHorizontal.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n alignmentDiv.appendChild(parentDiv);\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createCellMarginTextBox = function (textboxLabel, textboxId, parentDiv, styles, parentStyle, maxValue, toolTipText, isRight) {\n var cellMarginParentDiv = createElement('div', { styles: parentStyle });\n if (!isRight) {\n cellMarginParentDiv.classList.add('e-de-cell-text-box');\n }\n var cellMarginLabel = createElement('label', { className: 'e-de-prop-sub-label' });\n cellMarginLabel.textContent = textboxLabel;\n cellMarginParentDiv.appendChild(cellMarginLabel);\n var cellMarginTextbox = createElement('input', { className: 'e-textbox', id: textboxId, styles: styles });\n cellMarginParentDiv.appendChild(cellMarginTextbox);\n var cellMarginNumericText = new NumericTextBox({ showSpinButton: false, min: 0, format: 'n0', max: maxValue, enableRtl: this.isRtl }, cellMarginTextbox);\n parentDiv.appendChild(cellMarginParentDiv);\n cellMarginTextbox.setAttribute('title', toolTipText);\n return cellMarginNumericText;\n };\n TableProperties.prototype.createBorderSizeDropDown = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'borderSizeTarget', styles: 'display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px; width: 126px; height: auto;',\n id: 'borderSizeListMenu'\n });\n div.appendChild(ulTag);\n var noneOption = this.createDropdownOption(ulTag, this.localObj.getConstant('No Border'));\n noneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('No Border');\n });\n var pixel = this.localObj.getConstant('px');\n var oneOption = this.createDropdownOption(ulTag, '1' + pixel);\n oneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1px');\n });\n var oneHalfOption = this.createDropdownOption(ulTag, '1.5' + pixel);\n oneHalfOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1.5px');\n });\n var twoOption = this.createDropdownOption(ulTag, '2' + pixel);\n twoOption.addEventListener('click', function () {\n _this.onBorderSizeChange('2px');\n });\n var threeOption = this.createDropdownOption(ulTag, '3' + pixel);\n threeOption.addEventListener('click', function () {\n _this.onBorderSizeChange('3px');\n });\n var fourOption = this.createDropdownOption(ulTag, '4' + pixel);\n fourOption.addEventListener('click', function () {\n _this.onBorderSizeChange('4px');\n });\n var fiveOption = this.createDropdownOption(ulTag, '5' + pixel);\n fiveOption.addEventListener('click', function () {\n _this.onBorderSizeChange('5px');\n });\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: 'e-de-prop-bordersize',\n enableRtl: this.isRtl,\n content: '1.5px'\n };\n var dropdown = new DropDownButton(menuOptions);\n dropdown.beforeOpen = function () {\n div.style.display = 'block';\n for (var i = 0; i < _this.borderSizeColorElement.length; i++) {\n _this.borderSizeColorElement[i].style.borderBottomColor = _this.borderColor;\n }\n };\n dropdown.beforeClose = function () {\n div.style.display = 'none';\n };\n dropdown.appendTo(button);\n dropdown.element.setAttribute('title', this.localObj.getConstant('Border width'));\n return dropdown;\n };\n TableProperties.prototype.onBorderSizeChange = function (value) {\n var _this = this;\n this.borderSize.content = value;\n setTimeout(function () {\n _this.tableOutlineBorder.element.focus();\n }, 10);\n };\n TableProperties.prototype.createDropdownOption = function (ulTag, text) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML;\n if (text === 'No Border') {\n innerHTML = '
      ' + text + '
      ';\n }\n else if (text === '1.5px') {\n innerHTML = '
      ' + text + '
      ';\n }\n else {\n innerHTML = '
      ' + text + '
      ';\n }\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createDropDownButton = function (id, styles, parentDiv, iconCss, content, items, target) {\n var buttonElement = createElement('button', { id: id, styles: styles, attrs: { type: 'button' } });\n parentDiv.appendChild(buttonElement);\n var splitButtonClass = 'e-de-prop-splitbutton';\n if (this.isRtl) {\n splitButtonClass = 'e-rtl ' + splitButtonClass;\n }\n /* eslint-disable-next-line max-len */\n var dropDownBtn = new DropDownButton({ iconCss: iconCss, content: content, enableRtl: this.isRtl, cssClass: splitButtonClass }, buttonElement);\n if (items) {\n dropDownBtn.items = items;\n }\n if (target) {\n dropDownBtn.target = target;\n }\n return dropDownBtn;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, styles, toolTipText, content, iconPos) {\n var buttonElement = createElement('Button', { id: id, styles: styles, attrs: { type: 'button' } });\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl, iconPosition: (iconPos ? iconPos : 'Left'),\n content: content ? content : ''\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', toolTipText);\n return btn;\n };\n TableProperties.prototype.createColorPickerTemplate = function (id, divElement, toolTipText, isBorderWidth) {\n var inputElement = createElement('input', { id: id });\n divElement.appendChild(inputElement);\n var cssClass = 'e-de-prop-font-button e-de-prop-font-colorpicker';\n if (isBorderWidth) {\n cssClass = cssClass + ' e-de-border-clr-picker';\n }\n /* eslint-disable-next-line max-len */\n var colorPicker = new ColorPicker({ showButtons: true, cssClass: cssClass, enableRtl: this.isRtl, locale: this.container.locale }, inputElement);\n inputElement.parentElement.setAttribute('title', toolTipText);\n return colorPicker;\n };\n TableProperties.prototype.showTableProperties = function (isShow, propertyType) {\n if (isShow) {\n if (propertyType === 'text') {\n this.propertiesTab.hideTab(1, true);\n }\n else {\n this.propertiesTab.hideTab(1, false);\n if (this.prevContext !== this.documentEditor.selection.contextType) {\n this.propertiesTab.selectedItem = 1;\n }\n }\n this.prevContext = this.documentEditor.selection.contextType;\n this.onSelectionChange();\n this.tableTextProperties.onSelectionChange();\n }\n if (!isShow && this.parentElement.style.display === 'none' || (isShow && this.parentElement.style.display === 'block')) {\n return;\n }\n this.parentElement.style.display = isShow ? 'block' : 'none';\n if (isShow) {\n var tabHeaderHeight = this.parentElement.getElementsByClassName('e-tab-header')[0];\n if (tabHeaderHeight) {\n var paneHeight = this.parentElement.offsetHeight - tabHeaderHeight.offsetHeight;\n this.tableProperties.style.height = paneHeight + 'px';\n this.tableTextProperties.element.style.height = paneHeight + 'px';\n }\n }\n this.documentEditor.resize();\n this.prevContext = this.documentEditor.selection.contextType;\n };\n TableProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.shadingBtn) {\n this.shadingBtn.destroy();\n this.shadingBtn = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderSize) {\n this.borderSize.destroy();\n this.borderSize = undefined;\n }\n if (this.topMargin) {\n this.topMargin.destroy();\n this.topMargin = undefined;\n }\n if (this.bottomMargin) {\n this.bottomMargin.destroy();\n this.bottomMargin = undefined;\n }\n if (this.leftMargin) {\n this.leftMargin.destroy();\n this.leftMargin = undefined;\n }\n if (this.rightMargin) {\n this.rightMargin.destroy();\n this.rightMargin = undefined;\n }\n if (this.tableTextProperties) {\n this.tableTextProperties.destroy();\n this.tableTextProperties = undefined;\n }\n if (this.propertiesTab) {\n this.propertiesTab.destroy();\n this.propertiesTab = undefined;\n }\n if (this.imageProperty) {\n this.imageProperty.destroy();\n this.imageProperty = undefined;\n }\n if (this.tableOutlineBorder) {\n this.tableOutlineBorder.destroy();\n }\n this.tableOutlineBorder = undefined;\n if (this.tableAllBorder) {\n this.tableAllBorder.destroy();\n }\n this.tableAllBorder = undefined;\n if (this.tableCenterBorder) {\n this.tableCenterBorder.destroy();\n }\n this.tableCenterBorder = undefined;\n if (this.tableLeftBorder) {\n this.tableLeftBorder.destroy();\n }\n this.tableLeftBorder = undefined;\n if (this.tableCenterVerticalBorder) {\n this.tableCenterVerticalBorder.destroy();\n }\n this.tableCenterVerticalBorder = undefined;\n if (this.tableRightBorder) {\n this.tableRightBorder.destroy();\n }\n this.tableRightBorder = undefined;\n if (this.tableTopBorder) {\n this.tableTopBorder.destroy();\n }\n this.tableTopBorder = undefined;\n if (this.tableCenterHorizontalBorder) {\n this.tableCenterHorizontalBorder.destroy();\n }\n this.tableCenterHorizontalBorder = undefined;\n if (this.tableBottomBorder) {\n this.tableBottomBorder.destroy();\n }\n this.tableBottomBorder = undefined;\n if (this.horizontalMerge) {\n this.horizontalMerge.destroy();\n }\n this.horizontalMerge = undefined;\n if (this.insertRowAbove) {\n this.insertRowAbove.destroy();\n }\n this.insertRowAbove = undefined;\n if (this.insertRowBelow) {\n this.insertRowBelow.destroy();\n }\n this.insertRowBelow = undefined;\n if (this.insertColumnLeft) {\n this.insertColumnLeft.destroy();\n }\n this.insertColumnLeft = undefined;\n if (this.insertColumnRight) {\n this.insertColumnRight.destroy();\n }\n this.insertColumnRight = undefined;\n if (this.deleteRow) {\n this.deleteRow.destroy();\n }\n this.deleteRow = undefined;\n if (this.deleteColumn) {\n this.deleteColumn.destroy();\n }\n this.deleteColumn = undefined;\n if (this.alignBottom) {\n this.alignBottom.destroy();\n }\n this.alignBottom = undefined;\n if (this.alignCenterHorizontal) {\n this.alignCenterHorizontal.destroy();\n }\n this.alignCenterHorizontal = undefined;\n if (this.alignTop) {\n this.alignTop.destroy();\n }\n this.alignTop = undefined;\n this.groupButtonClass = undefined;\n this.borderColor = undefined;\n this.elementId = undefined;\n };\n return TableProperties;\n}());\nexport { TableProperties };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Represents document editor status bar.\n *\n * @private\n */\nvar StatusBar = /** @class */ (function () {\n function StatusBar(parentElement, docEditor) {\n this.startPage = 1;\n this.statusBarDiv = parentElement;\n this.container = docEditor;\n this.initializeStatusBar();\n this.wireEvents();\n }\n Object.defineProperty(StatusBar.prototype, \"documentEditor\", {\n get: function () {\n return this.container ? this.container.documentEditor : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StatusBar.prototype, \"editorPageCount\", {\n get: function () {\n return this.documentEditor ? this.documentEditor.pageCount : 1;\n },\n enumerable: true,\n configurable: true\n });\n StatusBar.prototype.initializeStatusBar = function () {\n var _this = this;\n var isRtl = this.container.enableRtl;\n this.documentEditor.enableSpellCheck = (this.container.enableSpellCheck) ? true : false;\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var styles = isRtl ? 'padding-right:16px' : 'padding-left:16px';\n var div = createElement('div', { className: (this.container.enableSpellCheck) ? 'e-de-ctnr-pg-no' : 'e-de-ctnr-pg-no-spellout', styles: styles });\n this.statusBarDiv.appendChild(div);\n var label = createElement('span');\n label.textContent = this.localObj.getConstant('Page') + ' ';\n div.appendChild(label);\n this.pageNumberInput = createElement('input', { styles: 'text-transform:capitalize;white-space:pre;overflow:hidden;user-select:none;cursor:text', attrs: { type: 'text' }, className: 'e-de-pagenumber-input' });\n this.editablePageNumber = createElement('div', { styles: 'display: inline-flex', className: 'e-input e-de-pagenumber-text' });\n this.editablePageNumber.appendChild(this.pageNumberInput);\n var pageNumberOfLabelStyle = \"\";\n if (isRtl) {\n label.style.marginLeft = '6px';\n this.editablePageNumber.style.marginLeft = '6px';\n pageNumberOfLabelStyle = 'padding-left:5px';\n }\n else {\n label.style.marginRight = '6px';\n this.editablePageNumber.style.marginRight = '6px';\n pageNumberOfLabelStyle = 'padding-right:5px';\n }\n this.updatePageNumber();\n div.appendChild(this.editablePageNumber);\n this.editablePageNumber.setAttribute('title', this.localObj.getConstant('Current Page Number'));\n var label1 = createElement('span', { styles: pageNumberOfLabelStyle });\n label1.textContent = ' ' + this.localObj.getConstant('of') + ' ';\n div.appendChild(label1);\n this.pageCount = createElement('span');\n div.appendChild(this.pageCount);\n this.updatePageCount();\n if (this.documentEditor.enableSpellCheck) {\n var verticalLine = createElement('div', { className: 'e-de-statusbar-separator' });\n this.statusBarDiv.appendChild(verticalLine);\n var spellCheckBtn = this.addSpellCheckElement();\n this.spellCheckButton.appendTo(spellCheckBtn);\n }\n this.pageButton = this.createButtonTemplate((this.container.enableSpellCheck) ? 'e-de-statusbar-pageweb e-btn-pageweb-spellcheck' : 'e-de-statusbar-pageweb', 'e-de-printlayout e-icons', 'Print layout', this.statusBarDiv, this.pageButton, (this.documentEditor.layoutType === 'Pages') ? true : false);\n this.webButton = this.createButtonTemplate('e-de-statusbar-pageweb', 'e-de-weblayout e-icons', 'Web layout', this.statusBarDiv, this.webButton, (this.documentEditor.layoutType === 'Continuous') ? true : false);\n this.pageButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Pages';\n _this.addRemoveClass(_this.pageButton, _this.webButton);\n });\n this.webButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Continuous';\n _this.addRemoveClass(_this.webButton, _this.pageButton);\n });\n var zoomBtn = createElement('button', {\n className: 'e-de-statusbar-zoom', attrs: { type: 'button' }\n });\n this.statusBarDiv.appendChild(zoomBtn);\n zoomBtn.setAttribute('title', this.localObj.getConstant('ZoomLevelTooltip'));\n var items = [\n {\n text: '200%'\n },\n {\n text: '175%'\n },\n {\n text: '150%'\n },\n {\n text: '125%'\n },\n {\n text: '100%'\n },\n {\n text: '75%'\n },\n {\n text: '50%'\n },\n {\n text: '25%'\n },\n {\n separator: true\n },\n {\n text: this.localObj.getConstant('Fit one page')\n },\n {\n text: this.localObj.getConstant('Fit page width')\n }\n ];\n this.zoom = new DropDownButton({ content: '100%', items: items, enableRtl: this.container.enableRtl, select: this.onZoom.bind(this) });\n this.zoom.isStringTemplate = true;\n this.zoom.appendTo(zoomBtn);\n };\n StatusBar.prototype.addSpellCheckElement = function () {\n var _this = this;\n var spellCheckBtn = createElement('button', {\n className: 'e-de-statusbar-spellcheck'\n });\n this.statusBarDiv.appendChild(spellCheckBtn);\n spellCheckBtn.setAttribute('title', 'Spell Checker options');\n var spellCheckItems = [\n {\n text: this.localObj.getConstant('Spell Check')\n },\n {\n text: this.localObj.getConstant('Underline errors')\n }\n ];\n this.spellCheckButton = new DropDownButton({\n content: this.localObj.getConstant('Spelling'), items: spellCheckItems, enableRtl: this.container.enableRtl, select: this.onSpellCheck.bind(this),\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n if (isNullOrUndefined(_this.currentLanguage)) {\n _this.currentLanguage = _this.documentEditor.spellChecker.languageID;\n }\n if (isNullOrUndefined(_this.allowSuggestion)) {\n _this.allowSuggestion = _this.documentEditor.spellChecker.allowSpellCheckAndSuggestion;\n }\n var span = args.element.children[0];\n if (args.item.text === _this.localObj.getConstant('Spell Check') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellChecker.enableSpellCheck) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-spellcheck-item');\n }\n else if (args.item.text === _this.localObj.getConstant('Underline errors') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellChecker.enableSpellCheck && !_this.documentEditor.spellChecker.removeUnderline) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-underline-item');\n }\n else {\n span.style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-spellcheck-item');\n args.element.children[0].classList.remove('e-de-selected-underline-item');\n }\n }\n });\n return spellCheckBtn;\n };\n StatusBar.prototype.onZoom = function (args) {\n this.setZoomValue(args.item.text);\n this.updateZoomContent();\n };\n StatusBar.prototype.onSpellCheck = function (args) {\n this.setSpellCheckValue(args.item.text);\n };\n StatusBar.prototype.updateZoomContent = function () {\n this.zoom.content = Math.round(this.documentEditor.zoomFactor * 100) + '%';\n };\n StatusBar.prototype.setSpellCheckValue = function (text) {\n this.spellCheckButton.content = this.localObj.getConstant('Spelling');\n if (text.match(this.localObj.getConstant('Spell Check'))) {\n this.documentEditor.spellChecker.enableSpellCheck = (this.documentEditor.spellChecker.enableSpellCheck) ? false : true;\n this.documentEditor.documentHelper.triggerSpellCheck = false;\n this.documentEditor.documentHelper.triggerElementsOnLoading = false;\n }\n else if (text.match(this.localObj.getConstant('Underline errors'))) {\n if (this.documentEditor.enableSpellCheck && this.documentEditor.spellChecker.enableSpellCheck) {\n this.documentEditor.spellChecker.removeUnderline = (this.documentEditor.spellChecker.removeUnderline) ? false : true;\n }\n }\n };\n StatusBar.prototype.setZoomValue = function (text) {\n if (text.match(this.localObj.getConstant('Fit one page'))) {\n this.documentEditor.fitPage('FitOnePage');\n }\n else if (text.match(this.localObj.getConstant('Fit page width'))) {\n this.documentEditor.fitPage('FitPageWidth');\n }\n else {\n this.documentEditor.zoomFactor = parseInt(text, 10) / 100;\n }\n };\n /**\n * Updates page count.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageCount = function () {\n this.pageCount.textContent = this.editorPageCount.toString();\n };\n /**\n * Updates page number.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageNumber = function () {\n this.pageNumberInput.value = this.startPage.toString();\n this.updatePageNumberWidth();\n };\n StatusBar.prototype.updatePageNumberOnViewChange = function (args) {\n if (this.documentEditor.selection\n && this.documentEditor.selection.startPage >= args.startPage && this.documentEditor.selection.startPage <= args.endPage) {\n this.startPage = this.documentEditor.selection.startPage;\n }\n else {\n this.startPage = args.startPage;\n }\n this.updatePageNumber();\n this.updatePageCount();\n };\n StatusBar.prototype.wireEvents = function () {\n var _this = this;\n this.pageNumberInput.addEventListener('keydown', function (e) {\n if (e.which === 13) {\n e.preventDefault();\n var pageNumber = parseInt(_this.pageNumberInput.value, 10);\n if (pageNumber > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n else {\n if (_this.documentEditor.selection) {\n _this.documentEditor.selection.goToPage(parseInt(_this.pageNumberInput.value, 10));\n }\n else {\n _this.documentEditor.scrollToPage(parseInt(_this.pageNumberInput.value, 10));\n }\n }\n _this.pageNumberInput.contentEditable = 'false';\n if (_this.pageNumberInput.value === '') {\n _this.updatePageNumber();\n }\n }\n if (e.which > 64) {\n e.preventDefault();\n }\n });\n this.pageNumberInput.addEventListener('keyup', function () {\n _this.updatePageNumberWidth();\n });\n this.pageNumberInput.addEventListener('blur', function () {\n if (_this.pageNumberInput.value === '' || parseInt(_this.pageNumberInput.value, 10) > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n _this.pageNumberInput.contentEditable = 'false';\n });\n this.pageNumberInput.addEventListener('focus', function () {\n _this.pageNumberInput.select();\n });\n };\n StatusBar.prototype.updatePageNumberWidth = function () {\n if (this.pageNumberInput) {\n this.pageNumberInput.style.width = this.pageNumberInput.value.length >= 3 ? '30px' : '22px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.toggleWebLayout = function () {\n this.addRemoveClass(this.pageButton, this.webButton);\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.togglePageLayout = function () {\n this.addRemoveClass(this.webButton, this.pageButton);\n };\n StatusBar.prototype.addRemoveClass = function (addToElement, removeFromElement) {\n addToElement.classList.add('e-btn-toggle');\n if (removeFromElement.classList.contains('e-btn-toggle')) {\n removeFromElement.classList.remove('e-btn-toggle');\n }\n };\n /* eslint-disable-next-line max-len */\n StatusBar.prototype.createButtonTemplate = function (className, iconcss, toolTipText, div, appendDiv, toggle) {\n appendDiv = createElement('Button', { className: className, attrs: { type: 'button' } });\n div.appendChild(appendDiv);\n var btn = new Button({\n cssClass: className, iconCss: iconcss, enableRtl: this.container.enableRtl\n });\n if (toggle === true) {\n appendDiv.classList.add('e-btn-toggle');\n }\n btn.appendTo(appendDiv);\n appendDiv.setAttribute('title', this.localObj.getConstant(toolTipText));\n if (toolTipText === 'Web layout') {\n this.webBtn = btn;\n }\n else {\n this.pageBtn = btn;\n }\n return appendDiv;\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.destroy = function () {\n if (this.zoom) {\n this.zoom.destroy();\n this.zoom = undefined;\n }\n if (this.spellCheckButton) {\n this.spellCheckButton.destroy();\n this.spellCheckButton = undefined;\n }\n if (this.pageBtn) {\n this.pageBtn.destroy();\n this.pageBtn = undefined;\n }\n if (this.webBtn) {\n this.webBtn.destroy();\n this.webBtn = undefined;\n }\n this.pageButton = undefined;\n this.webButton = undefined;\n this.pageNumberInput = undefined;\n this.statusBarDiv = undefined;\n this.pageCount = undefined;\n this.editablePageNumber = undefined;\n this.localObj = undefined;\n this.container = undefined;\n };\n return StatusBar;\n}());\nexport { StatusBar };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport { Component, Property, NotifyPropertyChanges, L10n, Complex, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { DocumentEditor, DocumentEditorSettings, DocumentSettings } from '../document-editor/document-editor';\nimport { HeaderFooterProperties } from './properties-pane/header-footer-pane';\nimport { ImageProperties } from './properties-pane/image-properties-pane';\nimport { TocProperties } from './properties-pane/table-of-content-pane';\nimport { TableProperties } from './properties-pane/table-properties-pane';\nimport { StatusBar } from './properties-pane/status-bar';\nimport { createSpinner } from '@syncfusion/ej2-popups';\nimport { internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent } from '../document-editor/base/constants';\nimport { HelperMethods } from '../index';\n/**\n * Document Editor container component.\n */\nvar DocumentEditorContainer = /** @class */ (function (_super) {\n __extends(DocumentEditorContainer, _super);\n /**\n * Initialize the constructor of DocumentEditorContainer\n *\n * @param { DocumentEditorContainerModel } options - Specified DocumentEditorContainer model as options.\n * @param { string | HTMLElement }element - Specifies the element that is rendered as a DocumentEditorContainer.\n */\n function DocumentEditorContainer(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @private\n */\n _this.previousContext = '';\n /**\n * @private\n */\n _this.showHeaderProperties = true;\n /**\n * default locale\n *\n * @private\n */\n _this.defaultLocale = {\n 'New': 'New',\n 'Insert Footnote': 'Insert Footnote',\n 'Insert Endnote': 'Insert Endnote',\n 'Footnote Tooltip': 'Insert Footnote (Alt+Ctrl+F).',\n 'Endnote Tooltip': 'Insert Endnote (Alt+Ctrl+D).',\n 'Open': 'Open',\n 'Undo': 'Undo',\n 'Redo': 'Redo',\n 'Image': 'Image',\n 'Table': 'Table',\n 'Link': 'Link',\n 'Bookmark': 'Bookmark',\n 'Table of Contents': 'Table of Contents',\n 'HEADING - - - - 1': 'HEADING - - - - 1',\n 'HEADING - - - - 2': 'HEADING - - - - 2',\n 'HEADING - - - - 3': 'HEADING - - - - 3',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Page Setup': 'Page Setup',\n 'Page Number': 'Page Number',\n 'Break': 'Break',\n 'Find': 'Find',\n 'Local Clipboard': 'Local Clipboard',\n 'Restrict Editing': 'Restrict Editing',\n 'Upload from computer': 'Upload from computer',\n 'By URL': 'By URL',\n 'Page Break': 'Page Break',\n 'Show properties pane': 'Show properties pane',\n 'Hide properties pane': 'Hide properties pane',\n 'Section Break': 'Section Break',\n 'Header And Footer': 'Header & Footer',\n 'Options': 'Options',\n 'Levels': 'Levels',\n 'Different First Page': 'Different First Page',\n 'Different header and footer for odd and even pages': 'Different header and footer for odd and even pages.',\n 'Different Odd And Even Pages': 'Different Odd & Even Pages',\n 'Different header and footer for first page': 'Different header and footer for first page.',\n 'Position': 'Position',\n 'Header from Top': 'Header from Top',\n 'Footer from Bottom': 'Footer from Bottom',\n 'Distance from top of the page to top of the header': 'Distance from top of the page to top of the header.',\n 'Distance from bottom of the page to bottom of the footer': 'Distance from bottom of the page to bottom of the footer.',\n 'Aspect ratio': 'Aspect ratio',\n 'W': 'W',\n 'H': 'H',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Text': 'Text',\n 'Paragraph': 'Paragraph',\n 'Fill': 'Fill',\n 'Fill color': 'Fill color',\n 'Border Style': 'Border Style',\n 'Outside borders': 'Outside borders',\n 'All borders': 'All borders',\n 'Inside borders': 'Inside borders',\n 'Left border': 'Left border',\n 'Inside vertical border': 'Inside vertical border',\n 'Right border': 'Right border',\n 'Top border': 'Top border',\n 'Inside horizontal border': 'Inside horizontal border',\n 'Bottom border': 'Bottom border',\n 'Border color': 'Border color',\n 'Border width': 'Border width',\n 'Cell': 'Cell',\n 'Merge cells': 'Merge cells',\n 'Insert Or Delete': 'Insert / Delete',\n 'Insert columns to the left': 'Insert columns to the left',\n 'Insert columns to the right': 'Insert columns to the right',\n 'Insert rows above': 'Insert rows above',\n 'Insert rows below': 'Insert rows below',\n 'Delete rows': 'Delete rows',\n 'Delete columns': 'Delete columns',\n 'Cell Margin': 'Cell Margin',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Left': 'Left',\n 'Right': 'Right',\n 'Align Text': 'Align Text',\n 'Align top': 'Align top',\n 'Align bottom': 'Align bottom',\n 'Align center': 'Align center',\n 'Number of heading or outline levels to be shown in table of contents': 'Number of heading or outline levels to be shown in table of contents.',\n 'Show page numbers': 'Show page numbers',\n 'Show page numbers in table of contents': 'Show page numbers in table of contents.',\n 'Right align page numbers': 'Right align page numbers',\n 'Right align page numbers in table of contents': 'Right align page numbers in table of contents.',\n 'Use hyperlinks': 'Use hyperlinks',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers.',\n 'Font': 'Font',\n 'Font Size': 'Font Size',\n 'Font color': 'Font color',\n 'Text highlight color': 'Text highlight color',\n 'Clear all formatting': 'Clear all formatting',\n 'Bold Tooltip': 'Bold (Ctrl+B)',\n 'Italic Tooltip': 'Italic (Ctrl+I)',\n 'Underline Tooltip': 'Underline (Ctrl+U)',\n 'Strikethrough': 'Strikethrough',\n 'Superscript Tooltip': 'Superscript (Ctrl+Shift++)',\n 'Subscript Tooltip': 'Subscript (Ctrl+=)',\n 'Align left Tooltip': 'Align left (Ctrl+L)',\n 'Center Tooltip': 'Center (Ctrl+E)',\n 'Align right Tooltip': 'Align right (Ctrl+R)',\n 'Justify Tooltip': 'Justify (Ctrl+J)',\n 'Decrease indent': 'Decrease indent',\n 'Increase indent': 'Increase indent',\n 'Line spacing': 'Line spacing',\n 'Bullets': 'Bullets',\n 'Numbering': 'Numbering',\n 'Styles': 'Styles',\n 'Manage Styles': 'Manage Styles',\n 'Page': 'Page',\n 'of': 'of',\n 'Fit one page': 'Fit one page',\n 'Spell Check': 'Spell Check',\n 'Spelling': 'Spelling',\n 'Underline errors': 'Underline errors',\n 'Fit page width': 'Fit page width',\n 'Update': 'Update',\n 'Cancel': 'Cancel',\n 'Insert': 'Insert',\n 'No Border': 'No Border',\n 'Create a new document': 'Create a new document.',\n 'Open a document': 'Open a document.',\n 'Undo Tooltip': 'Undo the last operation (Ctrl+Z).',\n 'Redo Tooltip': 'Redo the last operation (Ctrl+Y).',\n 'Insert inline picture from a file': 'Insert inline picture from a file.',\n 'Insert a table into the document': 'Insert a table into the document',\n 'Create Hyperlink': 'Create a link in your document for quick access to web pages and files (Ctrl+K).',\n 'Insert a bookmark in a specific place in this document': 'Insert a bookmark in a specific place in this document.',\n 'Provide an overview of your document by adding a table of contents': 'Provide an overview of your document by adding a table of contents.',\n 'Add or edit the header': 'Add or edit the header.',\n 'Add or edit the footer': 'Add or edit the footer.',\n 'Open the page setup dialog': 'Open the page setup dialog.',\n 'Add page numbers': 'Add page numbers.',\n 'Find Text': 'Find text in the document (Ctrl+F).',\n 'Toggle between the internal clipboard and system clipboard': 'Toggle between the internal clipboard and system clipboard.
      ' +\n 'Access to system clipboard through script is denied due to browsers security policy. Instead,
      ' +\n ' 1. You can enable internal clipboard to cut, copy and paste within the component.
      ' +\n ' 2. You can use the keyboard shortcuts (Ctrl+X, Ctrl+C and Ctrl+V) to cut, copy and paste with system clipboard.',\n 'Current Page Number': 'The current page number in the document. Click or tap to navigate specific page.',\n 'Read only': 'Read only',\n 'Protections': 'Protections',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Single': 'Single',\n 'Double': 'Double',\n 'New comment': 'New comment',\n 'Comments': 'Comments',\n 'Print layout': 'Print layout',\n 'Web layout': 'Web layout',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'DropDown': 'Drop-Down',\n 'Update Fields': 'Update Fields',\n 'Update cross reference fields': 'Update cross reference fields',\n 'Track Changes': 'Keep track of the changes made in the document',\n 'TrackChanges': 'Track Changes',\n 'AllCaps': 'AllCaps',\n 'Change case Tooltip': 'Change case',\n 'UPPERCASE': 'UPPERCASE',\n 'No color': 'No color',\n 'Top margin': 'Top margin',\n 'Bottom margin': 'Bottom margin',\n 'Left margin': 'Left margin',\n 'Right margin': 'Right margin',\n 'Normal': 'Normal',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'ZoomLevelTooltip': 'Zoom level. Click or tap to open the Zoom options.',\n 'None': 'None',\n 'Borders': 'Borders'\n };\n return _this;\n }\n Object.defineProperty(DocumentEditorContainer.prototype, \"documentEditor\", {\n /* eslint-enable */\n /**\n * Gets DocumentEditor instance.\n *\n * @aspType DocumentEditor\n * @returns {DocumentEditor} - Returns the DocumentEditor instance.\n */\n get: function () {\n return this.documentEditorInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditorContainer.prototype, \"toolbar\", {\n /**\n * Gets toolbar instance.\n *\n * @returns {Toolbar} - Returns toolbar module.\n */\n get: function () {\n return this.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n DocumentEditorContainer.prototype.getModuleName = function () {\n return 'DocumentEditorContainer';\n };\n /**\n * @private\n */\n /* eslint-disable */\n DocumentEditorContainer.prototype.onPropertyChanged = function (newModel, oldModel) {\n for (var _i = 0, _a = Object.keys(newModel); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'restrictEditing':\n this.restrictEditingToggleHelper(newModel.restrictEditing);\n break;\n case 'showPropertiesPane':\n this.showHidePropertiesPane(newModel.showPropertiesPane);\n break;\n case 'enableTrackChanges':\n if (this.documentEditor.documentHelper.isTrackedOnlyMode && !newModel.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n if (this.documentEditor) {\n this.documentEditor.enableTrackChanges = newModel.enableTrackChanges;\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(newModel.enableTrackChanges);\n }\n if (this.documentEditor.enableTrackChanges) {\n this.documentEditor.documentHelper.showRevision = true;\n }\n this.documentEditor.resize();\n }\n break;\n case 'enableLocalPaste':\n if (this.documentEditor) {\n this.documentEditor.enableLocalPaste = newModel.enableLocalPaste;\n }\n break;\n case 'serviceUrl':\n if (this.documentEditor) {\n this.documentEditor.serviceUrl = newModel.serviceUrl;\n }\n break;\n case 'serverActionSettings':\n if (this.documentEditor) {\n this.setserverActionSettings();\n }\n break;\n case 'zIndex':\n if (this.documentEditor) {\n this.documentEditor.zIndex = newModel.zIndex;\n }\n break;\n case 'headers':\n if (this.documentEditor) {\n this.documentEditor.headers = newModel.headers;\n }\n break;\n case 'locale':\n case 'enableRtl':\n this.refresh();\n break;\n case 'enableComment':\n if (this.documentEditor) {\n this.documentEditor.enableComment = newModel.enableComment;\n }\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(newModel.enableComment);\n }\n break;\n case 'enableSpellCheck':\n if (this.documentEditor) {\n this.documentEditor.enableSpellCheck = newModel.enableSpellCheck;\n }\n break;\n case 'documentSettings':\n if (this.documentEditor) {\n this.documentEditor.documentSettings.compatibilityMode = this.documentSettings.compatibilityMode;\n }\n break;\n case 'documentEditorSettings':\n if (this.documentEditor) {\n this.customizeDocumentEditorSettings();\n }\n break;\n case 'toolbarItems':\n if (this.toolbarModule) {\n this.toolbarModule.reInitToolbarItems(newModel.toolbarItems);\n }\n break;\n case 'currentUser':\n if (this.documentEditor) {\n this.documentEditor.currentUser = newModel.currentUser;\n }\n break;\n case 'userColor':\n if (this.documentEditor) {\n this.documentEditor.userColor = newModel.userColor;\n }\n break;\n case 'layoutType':\n if (this.documentEditor) {\n this.documentEditor.layoutType = newModel.layoutType;\n if (newModel.layoutType === 'Continuous') {\n this.statusBar.togglePageLayout();\n }\n else {\n this.statusBar.toggleWebLayout();\n }\n }\n break;\n case 'enableToolbar':\n this.createToolbarContainer(this.enableRtl, true);\n if (newModel.enableToolbar && this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n this.toolbarModule.toggleTrackChanges(this.enableTrackChanges);\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.preRender = function () {\n this.localObj = new L10n('documenteditorcontainer', this.defaultLocale, this.locale);\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n this.initContainerElement();\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.render = function () {\n if (this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n }\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n this.element.style.minHeight = '320px';\n this.initializeDocumentEditor();\n if (this.restrictEditing) {\n this.restrictEditingToggleHelper(this.restrictEditing);\n }\n this.headerFooterProperties = new HeaderFooterProperties(this, this.enableRtl);\n this.imageProperties = new ImageProperties(this, this.enableRtl);\n this.tocProperties = new TocProperties(this, this.enableRtl);\n this.tableProperties = new TableProperties(this, this.imageProperties, this.enableRtl);\n this.statusBar = new StatusBar(this.statusBarElement, this);\n // Waiting popup\n createSpinner({ target: this.containerTarget, cssClass: 'e-spin-overlay' });\n this.setserverActionSettings();\n this.renderComplete();\n };\n DocumentEditorContainer.prototype.restrictEditingToggleHelper = function (restrictEditing) {\n this.documentEditor.isReadOnly = restrictEditing;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!restrictEditing, false);\n this.toolbarModule.toggleRestrictEditing(restrictEditing);\n }\n this.showPropertiesPane = !restrictEditing;\n this.showHidePropertiesPane(!restrictEditing);\n this.documentEditor.trackChangesPane.enableDisableButton(!restrictEditing && !this.documentEditor.documentHelper.isDocumentProtected);\n };\n DocumentEditorContainer.prototype.setFormat = function () {\n if (this.characterFormat) {\n this.documentEditor.setDefaultCharacterFormat(this.characterFormat);\n }\n if (this.paragraphFormat) {\n this.documentEditor.setDefaultParagraphFormat(this.paragraphFormat);\n }\n if (this.sectionFormat) {\n this.documentEditor.setDefaultSectionFormat(this.sectionFormat);\n }\n };\n DocumentEditorContainer.prototype.setserverActionSettings = function () {\n if (this.serviceUrl) {\n this.documentEditor.serviceUrl = this.serviceUrl;\n }\n if (this.serverActionSettings.spellCheck) {\n this.documentEditor.serverActionSettings.spellCheck = this.serverActionSettings.spellCheck;\n }\n if (this.serverActionSettings.restrictEditing) {\n this.documentEditor.serverActionSettings.restrictEditing = this.serverActionSettings.restrictEditing;\n }\n if (this.serverActionSettings.systemClipboard) {\n this.documentEditor.serverActionSettings.systemClipboard = this.serverActionSettings.systemClipboard;\n }\n if (this.headers) {\n this.documentEditor.headers = this.headers;\n }\n };\n DocumentEditorContainer.prototype.customizeDocumentEditorSettings = function () {\n if (this.documentEditorSettings.formFieldSettings) {\n var settings = this.documentEditorSettings.formFieldSettings;\n var documentEditor = this.documentEditor;\n if (!isNullOrUndefined(settings.applyShading)) {\n documentEditor.documentEditorSettings.formFieldSettings.applyShading = settings.applyShading;\n }\n if (!isNullOrUndefined(settings.formFillingMode)) {\n documentEditor.documentEditorSettings.formFieldSettings.formFillingMode = settings.formFillingMode;\n }\n if (!isNullOrUndefined(settings.formattingExceptions)) {\n documentEditor.documentEditorSettings.formFieldSettings.formattingExceptions = settings.formattingExceptions;\n }\n if (!isNullOrUndefined(settings.selectionColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.selectionColor = settings.selectionColor;\n }\n if (!isNullOrUndefined(settings.shadingColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.shadingColor = settings.shadingColor;\n }\n }\n if (this.documentEditorSettings.searchHighlightColor) {\n this.documentEditor.documentEditorSettings.searchHighlightColor = this.documentEditorSettings.searchHighlightColor;\n }\n if (this.documentEditorSettings.fontFamilies) {\n this.documentEditor.documentEditorSettings.fontFamilies = this.documentEditorSettings.fontFamilies;\n }\n if (this.documentEditorSettings.collaborativeEditingSettings) {\n this.documentEditor.documentEditorSettings.collaborativeEditingSettings = this.documentEditorSettings.collaborativeEditingSettings;\n }\n if (this.documentEditorSettings.printDevicePixelRatio) {\n this.documentEditor.documentEditorSettings.printDevicePixelRatio = this.documentEditorSettings.printDevicePixelRatio;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.enableOptimizedTextMeasuring)) {\n this.documentEditor.documentEditorSettings.enableOptimizedTextMeasuring = this.documentEditorSettings.enableOptimizedTextMeasuring;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.maximumRows)) {\n this.documentEditor.documentEditorSettings.maximumRows = this.documentEditorSettings.maximumRows;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.getPersistData = function () {\n return 'documenteditor-container';\n };\n /* eslint-disable */\n DocumentEditorContainer.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableToolbar) {\n modules.push({\n member: 'toolbar', args: [this]\n });\n }\n return modules;\n };\n DocumentEditorContainer.prototype.initContainerElement = function () {\n // Toolbar container\n var isRtl = this.enableRtl;\n this.containerTarget = this.createElement('div', { className: 'e-de-ctn' });\n this.containerTarget.contentEditable = 'false';\n this.createToolbarContainer(isRtl);\n var propertiesPaneContainerBorder;\n if (!isRtl) {\n propertiesPaneContainerBorder = 'e-de-pane';\n }\n else {\n propertiesPaneContainerBorder = 'e-de-pane-rtl';\n }\n this.propertiesPaneContainer = this.createElement('div', { className: propertiesPaneContainerBorder, styles: 'display:none' });\n this.editorContainer.appendChild(this.propertiesPaneContainer);\n this.containerTarget.appendChild(this.editorContainer);\n this.statusBarElement = this.createElement('div', { className: 'e-de-status-bar' });\n if (isRtl) {\n this.statusBarElement.style.direction = 'rtl';\n }\n this.containerTarget.appendChild(this.statusBarElement);\n this.element.appendChild(this.containerTarget);\n };\n DocumentEditorContainer.prototype.createToolbarContainer = function (isRtl, isCustom) {\n if (isNullOrUndefined((this.editorContainer))) {\n this.editorContainer = this.createElement('div', { className: 'e-de-tool-ctnr-properties-pane' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n }\n if (this.enableToolbar) {\n this.toolbarContainer = this.createElement('div', { className: 'e-de-ctnr-toolbar' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n if (isCustom) {\n this.containerTarget.insertBefore(this.toolbarContainer, this.containerTarget.firstChild);\n }\n else {\n this.containerTarget.appendChild(this.toolbarContainer);\n }\n this.editorContainer.classList.remove('e-de-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-tool-ctnr-properties-pane');\n }\n else {\n this.editorContainer.classList.remove('e-de-tool-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-ctnr-properties-pane');\n }\n };\n DocumentEditorContainer.prototype.initializeDocumentEditor = function () {\n var id = this.element.id + '_editor';\n var documentEditorTarget = this.createElement('div', { id: id, styles: 'width:100%;height:100%' });\n this.documentEditorInternal = new DocumentEditor({\n isReadOnly: false, enableRtl: this.enableRtl,\n selectionChange: this.onSelectionChange.bind(this),\n contentChange: this.onContentChange.bind(this),\n documentChange: this.onDocumentChange.bind(this),\n requestNavigate: this.onRequestNavigate.bind(this),\n viewChange: this.onViewChange.bind(this),\n customContextMenuSelect: this.onCustomContextMenuSelect.bind(this),\n customContextMenuBeforeOpen: this.onCustomContextMenuBeforeOpen.bind(this),\n beforePaneSwitch: this.onBeforePaneSwitch.bind(this),\n commentBegin: this.onCommentBegin.bind(this),\n commentEnd: this.onCommentEnd.bind(this),\n commentDelete: this.onCommentDelete.bind(this),\n beforeCommentAction: this.onCommentAction.bind(this),\n trackChange: this.onTrackChange.bind(this),\n serviceFailure: this.fireServiceFailure.bind(this),\n beforeXmlHttpRequestSend: this.beforeXmlHttpSend.bind(this),\n locale: this.locale,\n acceptTab: true,\n zIndex: this.zIndex,\n enableLocalPaste: this.enableLocalPaste,\n layoutType: this.layoutType,\n pageOutline: '#E0E0E0',\n currentUser: this.currentUser,\n userColor: this.userColor,\n height: '100%',\n width: '100%',\n enableTrackChanges: this.enableTrackChanges,\n showRevisions: true,\n enableLockAndEdit: this.enableLockAndEdit\n });\n this.wireEvents();\n this.customizeDocumentEditorSettings();\n this.documentEditor.enableAllModules();\n this.documentEditor.enableComment = this.enableComment;\n this.editorContainer.insertBefore(documentEditorTarget, this.editorContainer.firstChild);\n this.setFormat();\n this.documentEditor.appendTo(documentEditorTarget);\n this.documentEditor.resize();\n };\n DocumentEditorContainer.prototype.wireEvents = function () {\n this.documentEditor.on(internalZoomFactorChange, this.onZoomFactorChange, this);\n this.documentEditor.on(internalviewChangeEvent, this.onViewChange, this);\n this.documentEditor.on(protectionTypeChangeEvent, this.showPropertiesPaneOnSelection, this);\n };\n DocumentEditorContainer.prototype.unWireEvents = function () {\n if (isNullOrUndefined(this.documentEditor)) {\n return;\n }\n else {\n if (this.documentEditor.isDestroyed) {\n return;\n }\n }\n this.documentEditor.off(internalZoomFactorChange, this.onZoomFactorChange);\n this.documentEditor.off(internalviewChangeEvent, this.onViewChange);\n };\n DocumentEditorContainer.prototype.onCommentBegin = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(false);\n }\n };\n DocumentEditorContainer.prototype.onCommentEnd = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(true && this.enableComment);\n }\n };\n DocumentEditorContainer.prototype.beforeXmlHttpSend = function (args) {\n this.trigger(beforeXmlHttpRequestSend, args);\n };\n DocumentEditorContainer.prototype.onCommentDelete = function (args) {\n this.trigger(commentDeleteEvent, args);\n };\n DocumentEditorContainer.prototype.onCommentAction = function (args) {\n this.trigger(beforeCommentActionEvent, args);\n };\n DocumentEditorContainer.prototype.onTrackChange = function (args) {\n this.trigger(trackChangeEvent, args);\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(args.isTrackChangesEnabled);\n }\n };\n DocumentEditorContainer.prototype.onBeforePaneSwitch = function (args) {\n this.trigger(beforePaneSwitchEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showHidePropertiesPane = function (show) {\n if (this.showPropertiesPane) {\n this.showPropertiesPaneOnSelection();\n }\n this.propertiesPaneContainer.style.display = show ? 'block' : 'none';\n if (this.toolbarModule) {\n this.toolbarModule.propertiesPaneButton.element.style.opacity = show ? '1' : '0.5';\n }\n this.documentEditor.resize();\n };\n /**\n * Resizes the container component and its sub elements based on given size or client size.\n * @param width\n * @param height\n */\n DocumentEditorContainer.prototype.resize = function (width, height) {\n if (this.element) {\n if (isNullOrUndefined(height) && this.element && this.element.parentElement) {\n height = this.element.parentElement.clientHeight;\n }\n if (isNullOrUndefined(width) && this.element && this.element.parentElement) {\n width = this.element.parentElement.clientWidth;\n }\n if (!isNullOrUndefined(width) && width > 200) {\n this.width = width.toString();\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.height = height.toString();\n this.element.style.height = height + 'px';\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n if (this.toolbarModule) {\n this.toolbarModule.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onContentChange = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n var eventArgs = { source: this };\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onDocumentChange = function () {\n this.enableTrackChanges = this.documentEditor.enableTrackChanges;\n if (!isNullOrUndefined(this.documentSettings) && !isNullOrUndefined(this.documentEditor)\n && !isNullOrUndefined(this.documentEditor.documentSettings)) {\n this.documentSettings.compatibilityMode = this.documentEditor.documentSettings.compatibilityMode;\n }\n if (this.toolbarModule) {\n this.toolbarModule.isCommentEditing = false;\n this.toolbarModule.enableDisableInsertComment(true);\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onSelectionChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.showPropertiesPaneOnSelection();\n var eventArgs = { source: _this };\n _this.trigger(selectionChangeEvent, eventArgs);\n });\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onZoomFactorChange = function () {\n if (this.statusBar) {\n this.statusBar.updateZoomContent();\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onRequestNavigate = function (args) {\n if (args.linkType !== 'Bookmark') {\n var link = args.navigationLink;\n if (args.localReference.length > 0) {\n link += '#' + args.localReference;\n }\n window.open(link);\n args.isHandled = true;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onViewChange = function (args) {\n if (this.statusBar) {\n this.statusBar.updatePageNumberOnViewChange(args);\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuSelect = function (args) {\n this.trigger(customContextMenuSelectEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuBeforeOpen = function (args) {\n this.trigger(customContextMenuBeforeOpenEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showPropertiesPaneOnSelection = function () {\n if (((this.restrictEditing) && !this.showPropertiesPane) || isNullOrUndefined(this.tableProperties)) {\n return;\n }\n var isProtectedDocument = this.documentEditor.documentHelper.protectionType !== 'NoProtection';\n var allowFormatting = isProtectedDocument && this.documentEditor.documentHelper.restrictFormatting;\n var isSelectionInProtectecRegion = this.documentEditor.editor.restrictEditing;\n if (isProtectedDocument) {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!isSelectionInProtectecRegion, true);\n }\n this.tableProperties.enableDisableElements(!allowFormatting && !isSelectionInProtectecRegion);\n this.tocProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.headerFooterProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.imageProperties.enableDisableElements(!isSelectionInProtectecRegion);\n }\n else {\n var isReadOnly = !this.documentEditor.isReadOnly;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(isReadOnly, true || this.showPropertiesPane);\n }\n this.tableProperties.enableDisableElements(true);\n this.tocProperties.enableDisableElements(true);\n this.headerFooterProperties.enableDisableElements(true);\n this.imageProperties.enableDisableElements(true);\n }\n var currentContext = this.documentEditor.selection.contextType;\n var isInHeaderFooter = currentContext.indexOf('Header') >= 0\n || currentContext.indexOf('Footer') >= 0;\n if (!isInHeaderFooter) {\n this.showHeaderProperties = true;\n }\n if (!this.showPropertiesPane) {\n this.showHidePropertiesPane(false);\n this.propertiesPaneContainer.style.display = 'none';\n }\n else {\n this.propertiesPaneContainer.style.display = 'block';\n if (isInHeaderFooter && this.showHeaderProperties) {\n this.showProperties('headerfooter');\n }\n else if (currentContext.indexOf('List') >= 0 || currentContext.indexOf('Text') >= 0\n && currentContext.indexOf('Table') < 0) {\n this.showProperties('text');\n }\n else if (currentContext.indexOf('Image') >= 0) {\n this.showProperties('image');\n }\n else if (currentContext.indexOf('TableOfContents') >= 0) {\n this.showProperties('toc');\n }\n else if (currentContext.indexOf('Table') >= 0) {\n this.showProperties('table');\n }\n }\n this.previousContext = this.documentEditor.selection.contextType;\n if (this.toolbarModule && this.toolbarModule.toolbar) {\n this.toolbarModule.enableDisableInsertComment(!this.documentEditor.enableHeaderAndFooter && this.enableComment && !this.documentEditor.isReadOnlyMode && !this.documentEditor.selection.isinFootnote && !this.documentEditor.selection.isinEndnote);\n }\n };\n /**\n * @private\n * @param property\n */\n DocumentEditorContainer.prototype.showProperties = function (property) {\n if (this.toolbarModule && property !== 'headerfooter' && property !== 'toc') {\n this.toolbarModule.enableDisablePropertyPaneButton(true);\n }\n this.tableProperties.showTableProperties((property === 'table' || property === 'text'), property);\n this.imageProperties.showImageProperties(property === 'image');\n this.headerFooterProperties.showHeaderFooterPane(property === 'headerfooter');\n this.tocProperties.showTocPane(property === 'toc');\n };\n /**\n * Set the default character format for document editor container\n * @param characterFormat\n */\n DocumentEditorContainer.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = characterFormat;\n };\n /**\n * Set the default paragraph format for document editor container\n * @param paragraphFormat\n */\n DocumentEditorContainer.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n };\n /**\n * Set the default section format for document editor container\n * @param sectionFormat\n */\n DocumentEditorContainer.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = sectionFormat;\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditorContainer.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.element) {\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element.classList.remove('e-documenteditorcontainer');\n this.element = undefined;\n }\n if (this.toolbarContainer && this.toolbarContainer.parentElement) {\n this.toolbarContainer.innerHTML = '';\n this.toolbarContainer.parentElement.removeChild(this.toolbarContainer);\n }\n this.toolbarContainer = undefined;\n if (this.documentEditorInternal) {\n this.unWireEvents();\n this.documentEditorInternal.destroy();\n this.documentEditorInternal = undefined;\n }\n if (this.headerFooterProperties) {\n this.headerFooterProperties.destroy();\n }\n this.headerFooterProperties = undefined;\n if (this.imageProperties) {\n this.imageProperties.destroy();\n }\n this.imageProperties = undefined;\n if (this.tocProperties) {\n this.tocProperties.destroy();\n }\n this.tocProperties = undefined;\n if (this.tableProperties) {\n this.tableProperties.destroy();\n }\n this.tableProperties = undefined;\n if (this.statusBar) {\n this.statusBar.destroy();\n }\n if (this.propertiesPaneContainer && this.propertiesPaneContainer.parentElement) {\n this.propertiesPaneContainer.innerHTML = '';\n this.propertiesPaneContainer.parentElement.removeChild(this.propertiesPaneContainer);\n }\n this.propertiesPaneContainer = undefined;\n if (this.editorContainer && this.editorContainer.parentElement) {\n this.editorContainer.innerHTML = '';\n this.editorContainer.parentElement.removeChild(this.editorContainer);\n }\n if (this.statusBarElement && this.statusBarElement.parentElement) {\n this.statusBarElement.innerHTML = '';\n this.statusBarElement.parentElement.removeChild(this.statusBarElement);\n }\n if (this.containerTarget && this.containerTarget.parentElement) {\n this.containerTarget.innerHTML = '';\n this.containerTarget.parentElement.removeChild(this.containerTarget);\n }\n this.containerTarget = undefined;\n this.statusBarElement = undefined;\n this.editorContainer = undefined;\n this.unWireEvents();\n };\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"showPropertiesPane\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableToolbar\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditorContainer.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditorContainer.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditorContainer.prototype, \"userColor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property()\n ], DocumentEditorContainer.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditorContainer.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableCsp\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableComment\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditorContainer.prototype, \"width\", void 0);\n __decorate([\n Property('320px')\n ], DocumentEditorContainer.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeXmlHttpRequestSend\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditorContainer.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditorContainer.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ import: 'Import', systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditorContainer.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property(['New', 'Open', 'Separator', 'Undo', 'Redo', 'Separator', 'Image', 'Table', 'Hyperlink', 'Bookmark', 'TableOfContents', 'Separator', 'Header', 'Footer', 'PageSetup', 'PageNumber', 'Break', 'InsertFootnote', 'InsertEndnote', 'Separator', 'Find', 'Separator', 'Comments', 'TrackChanges', 'Separator', 'LocalClipboard', 'RestrictEditing', 'Separator', 'FormFields', 'UpdateFields'])\n ], DocumentEditorContainer.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property([])\n ], DocumentEditorContainer.prototype, \"headers\", void 0);\n DocumentEditorContainer = __decorate([\n NotifyPropertyChanges\n ], DocumentEditorContainer);\n return DocumentEditorContainer;\n}(Component));\nexport { DocumentEditorContainer };\n","import * as index from './index';\nindex.DocumentEditor.Inject(index.Print, index.SfdtExport, index.WordExport, index.TextExport, index.Selection, index.Search, index.Editor, index.EditorHistory, index.OptionsPane, index.ContextMenu, index.ImageResizer, index.HyperlinkDialog, index.TableDialog, index.BookmarkDialog, index.TableOfContentsDialog, index.PageSetupDialog, index.ParagraphDialog, index.ListDialog, index.StyleDialog, index.StylesDialog, index.BulletsAndNumberingDialog, index.FontDialog, index.TablePropertiesDialog, index.BordersAndShadingDialog, index.TableOptionsDialog, index.CellOptionsDialog, index.SpellChecker, index.SpellCheckDialog, index.CollaborativeEditing);\nindex.DocumentEditorContainer.Inject(index.Toolbar);\nexport * from './index';\n"],"names":["CharacterRangeType","Dictionary","this","keysInternal","valuesInternal","Object","defineProperty","prototype","get","length","enumerable","configurable","add","key","value","isNullOrUndefined","ReferenceError","indexOf","push","index","set","RangeError","remove","splice","containsKey","clear","destroy","undefined","WUniqueFormat","type","referenceCount","uniqueFormatType","propertiesHash","isEqual","source","property","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isNotEqual","modifiedProperty","targetValue","propertyType","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","cloneItems","format","keys","i","mergeProperties","hash","cloneProperties","WUniqueFormats","items","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","XmlHttpRequestHandler","mode","send","jsonObject","httpRequestEventArgs","_this","xmlHttpRequest","XMLHttpRequest","timeout","withCredentials","customHeaders","headers","onreadystatechange","stateChange","onerror","error","sendRequest","setTimeout","jsonObj","open","url","contentType","setRequestHeader","setCustomAjaxHeaders","responseType","data","FormData","JSON","stringify","proxyReq","readyState","status","result","name","response","responseText","successHandler","statusText","failureHandler","errorHandler","onSuccess","onFailure","onError","header","_i","_a","afterFormFieldFillEvent","beforeFormFieldFillEvent","keyDownEvent","Print","getModuleName","print","documentHelper","printWindow","navigator","userAgent","browserUserAgent","height","getPageHeight","pages","width","getPageWidth","printElement","document","createElement","style","overflow","generatePrintContent","window","pageSize","toString","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","exportAsImage","pageNumber","imageType","image","printPage","pgHeight","boundingRectangle","pgWidth","render","isPrinting","renderWidgets","imageData","pageCanvas","toDataURL","Image","src","setAttribute","element","htmlString","page","pageHeight","pageWidth","canvasURL","WSectionFormat","node","uniqueSectionFormat","ownerBase","getPropertyValue","setPropertyValue","uniqueSectionFormats","hasValue","getPropertyDefaultValue","initializeUniqueSectionFormat","propValue","uniqueSectionFormatTemp","addUniqueSectionFormat","copyFormat","history","isUndoing","isRedoing","updateUniqueSectionFormat","cloneFormat","WBorder","uniqueBorderFormat","lineStyle","hasNoneStyle","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","getLineWidth","lineArray","getBorderLineWidthArray","lineWidth","borderLineArray","Math","abs","getBorderWeight","weight","numberOfLines","getNumberOfLines","borderNumber","getBorderNumber","getPrecedence","hasValues","border","color","shadow","space","isEqualFormat","includeSpace","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","isParsing","WParagraphFormat","getBorder","baseStyle","currentFormat","listParaFormat","listFormat","paragraphFormat","getListPargaraphFormat","borders","basedOn","getDefaultValue","docParagraphFormat","documentParagraphFormat","getDocumentParagraphFormat","diagonalDown","diagonalUp","top","bottom","left","right","horizontal","vertical","top_1","WLevelOverride","overrideListLevel","levelNumber","startAt","clone","levelOverride","WList","listId","sourceListId","abstractListId","abstractList","levelOverrides","getListLevel","getLevelOverride","levels","mergeList","list","WListFormat","uniqueListFormat","helper","getDocumentHelperObject","getListById","baseListStyle","WParagraphStyle","listLevelNumber","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","clearFormat","applyStyle","getValue","mergeFormat","cloneListFormat","WTabStop","positionIn","deletePositionIn","justification","leader","position","deletePosition","tabJustification","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","tabsInListFormat_1","getTabStopsFromListFormat","tabStop","_b","tab","_c","_d","hasTabStop","parseFloat","toFixed","concat","filter","a","sort","b","level","listLevel","bidi","getListFormatParagraphFormat","formatInList","isInsideBodyWidget","ParagraphWidget","containerWidget","BodyWidget","TableCellWidget","isPaste","bodyWidget","owner","editor","clearProperty","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","clearIndent","clearPropertyValue","updateUniqueParagraphFormat","isStyle","leftIndent","rightIndent","firstLineIndent","beforeSpacing","afterSpacing","spaceBeforeAuto","spaceAfterAuto","lineSpacing","lineSpacingType","textAlignment","outlineLevel","contextualSpacing","keepWithNext","keepLinesTogether","widowControl","WRowFormat","uniqueRowFormat","beforeWidth","afterWidth","revisions","removedIds","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","containsMargins","leftMargin","rightMargin","bottomMargin","topMargin","allowBreakAcrossPages","isHeader","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","Revision","cloneRevisions","slice","author","date","range","revisionID","isContentRemoved","isTableRevision","canSkipTableItems","skipUnLinkElement","handleAcceptReject","isFromAccept","selection","selectRevision","startPos","start","endPos","end","isExistBefore","blockInfo","getParagraphInfo","initHistory","revisionType","editPosition","getHierarchicalIndex","paragraph","offset","updateInsertPosition","rangeIndex","ElementBox","WCharacterFormat","unlinkRangeItem","textPosition","getTextPosBasedOnLogicalIndex","selectContent","updateEndPosition","selectRange","updateHistoryPosition","editorHistory","currentBaseHistoryInfo","action","removedNodes","reverse","trackChangesPane","isTrackingPageBreak","currentHistoryInfo","blockToShift","layout","shiftLayoutedItems","updateHistory","reLayout","isInHeaderFooter","updateHeaderFooterWidget","handleGroupAcceptReject","isAccept","tableRevisions","initComplexHistory","groupingAcceptReject","updateComplexHistory","accept","isTrackedOnlyMode","skipGroupAcceptReject","reject","item","revision","removeRangeRevisionForItem","removeChanges","isTOC","deleteSelectedContents","currentElement","addRemovedNodes","skipeElementRemoval","updateRevisionID","tableWidget","ownerTable","currentRow","cloneTableToHistoryInfo","currentPara","line","removeRevisionItemsFromRange","removeItem","reLayoutParagraph","removeDeletedCellRevision","removeChild","childWidgets","removeFieldInBlock","removeBlock","updateTable","revisionIndex","currentRevision","elementPara","characterFormat","removeRevisionFromRow","row","unlinkRangeFromRevision","rowFormat","cellWidget","removeRevisionForCell","paraWidget","unLinkFieldCharacter","elementIndex","children","removeEmptyLine","canSkipCloning","clonedRevisions","RevisionCollection","changes","acceptAll","isReadOnly","handleRevisionCollection","rejectAll","isfromAcceptAll","revisionCollec","enableHeaderAndFooter","uniqueCharacterFormat","baseCharStyle","charStyleValue","checkCharacterStyle","length_1","TextElementBox","text","startsWith","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","fontSize","fontFamily","bold","italic","baselineAlignment","underline","fontColor","strikethrough","highlightColor","bdo","allCaps","localeIdBidi","isSameFormat","updateUniqueCharacterFormat","HelperMethods","insert","spanText","join","substring","indexOfAny","wordSplitCharacter","j","temp","lastIndexOfAny","convertArgbToRgb","substr","convertRgbToHex","val","hex","Number","convertHexToRgb","colorCode","replace","colCodeNo","parseInt","r","g","addCssStyle","css","cssText","appendChild","createTextNode","getElementsByTagName","getHighlightColorCode","isVeryDark","backColor","backgroundColor","getColor","convertPointToPixel","point","round","convertPixelToPoint","pixel","isLinkedFieldCharacter","inline","FieldElementBox","fieldType","fieldEnd","fieldBegin","removeSpace","charAt","trimStart","trimEnd","endsWith","addSpace","str","writeCharacterFormat","isInline","toWriteInline","styleName","boldBidi","italicBidi","fontSizeBidi","fontFamilyBidi","propertyName","decimalDigits","reverseString","split","formatClippedString","base64ImageString","extension","sourceString","startString","formatText","toLowerCase","toUpperCase","lowerFirstChar","capitaliseFirst","formatNumber","intl","Internationalization","numberValue","parseNumber","numberFormat","formatDate","Date","isNaN","getDate","dateFormat","splitBy","valArry","capitaliseFirstInternal","getModifiedDate","modifiedDate","getLocaleDate","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","getUtcDate","now","getTime","getTimezoneOffset","toISOString","dt","getCompatibilityModeValue","compatibilityMode","compatValue","getUniqueElementId","random","wordBefore","wordAfter","wordSplitCharacters","Point","xPosition","yPosition","xIn","yIn","copy","Base64","keyStr","encodeString","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","unicodeEncode","charCodeAt","tempInput","utftext","n","c","String","fromCharCode","decodeString","resultIndex","totalLength","Error","Uint8Array","WrapPosition","x","__extends","extendStatics","d","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","WStyle","_super","call","copyStyle","paraStyle","next","link","WCharacterStyle","charStyle","WStyles","collection","getItem","contains","pop","findByName","returnStyle","getStyleNames","map","getStyles","styleObjects","styles_1","returnStyleObject","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","foregroundColor","textureStyle","WTableFormat","uniqueTableFormat","_styleName","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","initializeTableBorders","tableFormat","tableAlignment","cellSpacing","preferredWidth","preferredWidthType","horizontalPositionAbs","horizontalPosition","allowAutoFit","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","verticalAlignment","cellWidth","columnSpan","rowSpan","WAbstractList","abstractListIdIn","absList","WListLevel","uniqueListLevel","listLevelPattern","followCharacter","restartLevel","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","Layout","islayoutFootnote","allowLayout","isfootMove","footnoteHeight","isRelayout","isRelayoutneed","isOverlapFloatTable","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","isRTLLayout","currentCell","isFootnoteContentChanged","isEndnoteContentChanged","is2013Justification","nextElementToLayout","isLayoutWhole","isBidiReLayout","defaultTabWidthPixel","isRelayoutFootnote","isRelayoutOverlap","isWrapText","isYPositionUpdated","isXPositionUpdated","hasFloatingElement","isFootNoteLayoutStart","wrapPosition","shiftedFloatingItemsFromTable","isDocumentContainsRtl","isSameStyle","currentParagraph","isAfterSpacing","nextOrPrevSibling","nextWidget","previousWidget","viewer","layoutItems","sections","isReLayout","section","lastpage","lastChild","isEndsWithPageBreak","bodyWidgets","createNewPage","addBodyWidget","clientActiveArea","pageIndex","i_1","prevPage","sectionIndex","insertPage","layoutSection","layoutComments","comments","updateFieldElements","layoutType","layoutEndNoteElement","isScrollHandler","isSpellCheck","spellChecker","enableOptimizedSpellCheck","triggerElementsOnLoading","clearContent","updateScrollBars","commentReviewPane","nextBlock","block","firstChild","TableWidget","calculateGrid","updateClientAreaForBlock","layoutBlock","footnoteWidget","layoutfootNote","nextPage","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","parentHeader","parentHeaderFooter","clearBlockWidget","updateRevisionsToHeaderFooter","updateHFClientArea","sectionFormat","headerWidget","layoutHeaderFooterItems","footer","footerWidget","updateHeaderFooterToParent","typeIndex","getHeaderFooter","headerFooterType","headersFooters","child","clearTableWidget","childWidge","HeaderFooterWidget","lineWidge","childrens","k","removeId","l","revisionsInternal","updateRevisionRange","linkFieldInHeaderFooter","widget","linkFieldInParagraph","linkFieldInTable","fields","linkFieldCharacter","FieldTextElementBox","previousElement","ShapeElementBox","firstBlock","textFrame","CommentCharacterElementBox","comment","getCommentById","commentId","commentType","commentStart","commentEnd","cell","updateClientAreaLocation","pargaraph","LineWidget","isGridUpdated","shiftChildLocation","clientArea","y","shiftTop","widgetTop","footerMaxHeight","max","childTop","childWidget","verticalPosition","shiftChildLocationForTableWidget","TableRowWidget","shiftChildLocationForTableRowWidget","rowWidget","shiftChildLocationForTableCellWidget","splitLtrAndRtlText","combineconsecutiveRTL","layoutParagraph","nextBlockToLayout","checkAndRelayoutPreviousOverlappingBlock","layoutTable","updateTableYPositionBasedonTextWrap","nextRenderedWidget","table","tableY_1","tableRect_1","Rect","floatingElements","forEach","shape","isInsideTable","shapeRect","textWrappingStyle","isIntersecting","distanceBottom","updateChildLocationForTable","cutFromTop","TextFrame","preivousBlock","paraRect","startOverlapWidget","endOverlapWidget","getSplitWidgets","wrapTextAround","tableRect","getTableCellWidth","blockRect","layoutStartEndBlocks","addParagraphWidget","area","paragraphWidget","isEmpty","WebLayoutViewer","previousPara","textHelper","getParagraphMarkWidth","addLineWidget","isFirstElementWithPageBreak","isPageBreak","PageLayoutViewer","lineWidget","BookmarkElementBox","nextElement","footnote","footNoteType","updateFootnoteClientArea","newPara","getParagraphMarkSize","Height","margin","Margin","POSITIVE_INFINITY","shiftChildWidgetInFootnote","sub","startY","bodyWidgetHeight","getBodyWidgetHeight","lineIndex","isListLayout","layoutListItems","layoutEmptyLineWidget","layoutFloatElements","indexInOwner","isFirstLine","updateClientWidth","marginTop","layoutLine","nextLine","updateWidgetToPage","isLayouted","clearLineMeasures","ShapeBase","layoutShape","getFloatingItemPoints","widthScale","containerWidth","getContainerWidth","blocks","updateClientAreaForTextBoxShape","moveElementFromNextLine","count","isNotEmptyField","padding","layoutElement","textElement","errorCollection","ischangeDetected","trim","isEmptyField","formFieldData","formFields","layoutFieldCharacters","isLastLine","nextNode","fieldSeparator","moveToNextLine","moveFromNextPage","getHeight","ListTextElementBox","EditRangeEndElementBox","EditRangeStartElementBox","ContentControl","bookmarkType","bookmarks","bookmrkElement","reference","contentControlCollection","endPage","cCStart","contentControlProperties","hasValidElement","isContainsShapeAlone","isTocField","getFieldResult","FootnoteElementBox","checkAndSplitTabOrLineBreakCharacter","getTextSize","getTabWidth","adjustPosition","moveToNextPage","updateFieldText","cutClientWidth","isLayout","layoutFootEndNoteElement","findDiff","textWrap","addElementToLine","currentLine","TabElementBox","addSplittedLineWidget","fieldBeginInternal","DropDownFormField","splitTextForClientArea","checkLineWidgetWithClientArea","splitElementForClientArea","contentControl","previousLeft","previousTop","previousWidth","adjustedRect","adjustClientAreaBasedOnTextWrap","wrapDiff","wrapPos","updateWrapPosition","previousWrapPos","isFirstitemInPage","yposition","isTextFitBelow","rect","isNeedToWrapForSquareTightAndThrough","elementBox","wrapOwnerIndex","wrapItemIndex","textWrappingBounds","allowOverlap","wrapCollectionIndex","floatingEntity","isTextRangeInTextBox","ImageElementBox","isNeedToWrapForSquareTightAndThroughForTable","container","wrapIndex","wrappingStyle","floatingElemnt","isInTextBox","isNeedToWrapLeafWidget","getMinWidth","currTextRange","previousNode","minwidth","measureText","Width","nextSibling","getNextSibling","nextSiblingText","getNextTextRangeWidth","nextSiblingTextRange","nextsibling","sizeNext","isNextSiblingSizeNeedToBeMeasure","isNextSibligSizeNeedToBeMeasure","isLeafWidgetNextSiblingIsTextRange","textRange","nextSiblingwidget","elementWidth","textInfo","isNeedDoIntermediateWrapping","remainingClientWidth","leafWidget","minimumWidthRequired","isFloatingItemOnLeft","minWidth","bounds","currentElementBox","ownerPara","layouter","clientLayoutArea","floatingItem","positioning","isExistAfter","distanceLeft","distanceTop","distanceRight","textWrappingType","listLeftIndent","paragraphLeftIndent","paragarphRightIndent","isnewline","isBorderValueZero","borderThickness","tableHorizontalPosition","horizontalAlignment","getMaximumRightCellBorderWidth","getDefaultBorderSpacingValue","getMinimumWidthRequiredForTable","topMarginValue","updateClientAreaForTextWrap","xposition","rect1","adjustClientAreaBasedOnTextWrapForTable","floatingElement","tableWidth","isShape","wrappingBounds","tableHeight","footnoteType","startat","initialFootNoteNumber","getFootEndNote","footNoteNumberFormat","footnoteCollection","initialEndNoteNumber","endnoteNumberFormat","endnoteCollection","positionchanged","footIndex","insertIndex","isFitted","isCreated","currentIndex","footNoteReference","FootNoteWidget","newParagraph","body","updateClientArea","foot","endNote","endnoteWidget","getNextValidElementForField","equals","previousRenderedWidget","char","character","splitByLineBreakOrTab","splittedParagraph","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","checkAndUpdateFieldData","hasFieldEnd","fieldStacks","field","seperator","CheckBoxFormField","checkBoxTextElement","checked","sizeType","size","dropDownTextElement","dropdownItems","selectedIndex","repeatChar","getEnSpaceCharacter","isEmptyLine","isShiftEnter","paraFormat","subWidth","whiteSpaceCount","canRenderParagraphBorders","canRenderBorder","maxHeight","getBeforeSpacing","isContainsRtl","shiftElementsForRTLLayouting","isParagraphStart","isParagraphEnd","getWidthAndSpace","getSubWidth","spaceCount","checkInbetweenShapeOverlap","getLineSpacing","getAfterSpacing","skipTopBorder","skipBottomBorder","clearListElementBox","layoutList","currentListLevel","getListNumber","isIosDevice","updateTextSize","tabWidth","addListLevels","getListLevelPattern","splittedElementBox","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","getWidth","trimEndWidth","characterRange","updateRevisionForSplittedElement","isMarkedForRevision","baselineOffset","splitErrorCollection","splittedBox","ignoreItems","ignoreOnceItems","splitByCharacter","getTextSplitIndexByCharacter","splitWidth","measureTextExcludingSpaceAtEnd","splittedElement","isSplitted","isJustify","startIndex","paddingLeft","getTextIndexAfterSpace","splittedText","isSplitByWord","isSplitByCharacter","textWidth","characterUptoWS","checkPreviousElement","span","spiltBy","inlineIndex","remainder","newSpan","newText","maxDescent","updateLineWidget","skip2013Justification","measurement","BaselineOffset","totalSpaceCount","isEndsWithLineBreak","availableWidth","totalSpaceWidth","getTotalSpaceWidth","widthForAdjustment","addSubWidth","isStarted","renderedElements","subWidthInfo","alignElements","alignLineElements","previousSplitWidget","startLineIndex","splitParagraph","updateClientAreaForNextBlock","overlapShape_1","lineY_1","getLineY","isInsideTable_1","lineRect","considerShape","para","lineY","spaceHeight","spaceBaseline","elementHeight","isCheckBoxElement","paragraphMarkSize","startBlock","previousLine","alignBlockElement","splitRow","nextBody","moveBlocksToNextPage","nextParagraph","footWidget","getFootNoteWidgetsOf","moveFootNotesToPage","addRemoveFloatElementsFromBody","lastBlock","m","updateChildLocationForCellOrShape","block_1","paragarph","previousBlock","getPreviousBlock","getFirstParagraphInCell","startRow","newTable","createTableWidget","isMoveCurrentBlock","unshift","updateClientPositionForBlock","currentBlock","isClientAreaUpdated","addTableWidget","nextRow","addTableRowWidget","updateChildLocationForRow","endBlock","startParagaraph","getFirstParagraphInFirstCell","isDocumentLoaded","editorModule","updateWholeListItems","isLastElement","associatedCell","ownerRow","getCellContentHeight","shiftFootnoteChildLocation","shiftFooterChildLocation","footerDistance","lastTextElement","index_1","lastIndexOf","clearInvalidList","abstractLists","lists","isAutoList","renderedLevelOverrides","getAbstractListById","renderedLists","ClearSubListLevelValues","updateListValues","getListText","levelNumberTemp","getListStartValue","startVal","listAdv","listText","levelKey","match","getListTextListLevel","getAsLetter","number","quotient","letter","listValue","getAsRoman","getAsLeadingZero","generateNumber","magnitude","numberstring","retval","levelOverrideAdv","fPosition","isCustomTab","isList","clientWidth","clientActiveX","defaultTabWidth","breaked","tabPosition","tabInfo","getJustificationTabWidth","tabLeader","tabText","getRightTabWidth","areaWidth","clientActiveWidth","nextIndex","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","trimmedSpaceWidth","subWidths","getSubWidthBasedOnTextWrap","renderElementBox","elementText","widthExcludeSpace","lineContent","z","info","getSubWidthInfo","currentWidget","lastWrapPositionWidth","wrappedSubWidth","totalSubWidth","dontUseHtmlParagraphAutoSpacing","before","alterLineSpacing","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","moveNextWidgetsToTable","moveFromNext","rowIndex","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","prevColumnIndex","cellspace","cellFormat","columnIndex","tableHolder","columns","getTableClientWidth","getCellWidth","prevSpannedCellWidth","getPreviousSpannedCellWidth","leftBorderWidth","getCellLeftBorder","rightBorderWidth","getCellRightBorder","linestyle","isBidiTable","isLeftStyleNone","isRightStyleNone","cellIndex","isInsertTable","checkPreviousMargins","sizeInfo","minimumWidth","tableResize","checkCellMinWidth","addWidgetToTable","tableCollection","rowCollection","endRowWidget","isInitialLayout","prevWidget","rowWidgetIndex","footnoteWidgets","prevIndex","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","footnoteNoteHeight","addEmptyFootNoteToBody","updateHeightForRowWidget","updateRowHeight","updateSpannedRowCollection","spannedRowCollection","prevRowWidget","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","colIndex","splitWidgets","tableRowWidget","splittedWidget","isLastRow","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","issplit","getSplittedWidget","updateWidgetLocation","cellWidget_1","getfootNoteHeight","updateWidgetsToTable","tableWidgets","rowWidgets","rowHeight","getRowHeight","headerRow","isAllowBreakAcrossPages","moveRowToNextTable","continueHeader","headerHeight","repeatHeaderRowTableWidget","isInsertSplittedWidgets","isTableInsert","updateWidgetsToPage","prevBodyWidget","rowToMove","keepNext","removeTable","prev","previousRow","curretTable","shiftFloatingItemsFromTable","currentRenderingPage","getHeader","getHeaderHeight","flag","row_1","updateWidgetToRow","cellHeight","isUpdateVerticalPosition","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","Widget","visiblePages","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","emptyCellWidget","createCellWidget","splitMinimalWidget","splittedPara","getSplittedWidgetForPara","tableCol","splittedTable","getSplittedWidgetForTable","isContainInsideTable","lineBottom","moveEntireBlock","rowBottom","splittedRow","allowRowBreakAcrossPages","isFirstLineFitForPara","lineHeight","cellwidget","isFirstLineFitInShiftWidgets","containerCellWidget","isFirstLineFitForTable","isFit","isFirstLineFitForCell","spacing","skipHeight","i_2","newBodyWidget","footWidgets","isUpdateToTop","BlockContainer","displacement","getDisplacement","updateCellContentVerticalPosition","location","updateShapeInsideCell","updateTableWidgetLocation","floatElement","topBorderWidth","cellContentHeight","isDisplacement","contentHeight","cellY","withShapeContentHeight","withShapeBottom","considerShapeHeight","considerAsTop","considerPositionTableHeight","nestedWrapTable","wrapTableBottom","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","tableCell","cellBorder","getCellDiagonalDownBorder","getTableWidth","rowWidth","layoutNextItemsBlock","blockAdv","isFootnoteReLayout","updateNextBlockList","BlockWidget","isShiftingEnabled","isInsertingTOC","combineWidget","updateContainerWidget","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getTop","getParentTable","elementBoxIndex","isBidi","isSkip","containerShape","layoutBodyWidgetCollection","reLayoutTable","reLayoutLine","getParentRow","reLayoutRow","updateHeaderFooterClientAreaWithTop","isBlockInHeader","block_2","clearRowWidget","layoutRow","shiftTableWidget","block_3","yPos","getYPosition","clearPosition","clearHeight","clearGrid","clearCellWidget","blockIndex","shiftNextWidget","isSkipShifting","isLayoutEnabled","curretBlock","checkAndGetBlock","shiftNextWidgets","buildTableColumns","tableView","updateClientAreaTopOrLeft","clientActiveAreaForTableWrap","clientAreaForTableWrap","updateClientAreaForWrapTable","prevBodyWidget1","footNoteWidgets","updateTableFloatPoints","tables","beforeLayout","clienactare","tableLefts","bottomBorderWidth","rows","layoutedTable","shiftWidgetForRtlTable","isRowLayout","updateClientAreaForRow","getMaxTopCellMargin","getMaxBottomCellMargin","layoutCell","getAdjacentRowCell","cellStartPos","cellEndPos","adjCells","adjRow","previouRow","adjCell","adjCellStartPos","adjCellEndPos","borderWidth","getCellBottomBorder","prevRow","getCellTopBorder","updateTopBorders","updateClientAreaForCell","findIndex","i_3","updatedTopBorders","cellTopBorder","isBorderDefined","prevCellBottomBorder","getBorderBasedOnPriority","checkAndShiftEndnote","reLayoutOrShiftWidgets","removeEmptyPages","enableLockAndEdit","fieldCode","getFieldCode","prevPageNum","isRealyoutList","isNeedToRelayout","updateContainerForTable","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","skipFootNoteHeight","shiftToPreviousWidget","updateClientAreaByWidget","isFitInClientArea","nextBodyWidget","createOrGetNextBodyWidget","isSplittedToNewPage","splitWidget","getFootNotesOfBlock","footnoteElements","getFootNotesWidgetsInLine","getFootNoteWidgetsBy","isShifting","k_1","blockfootnoteWidgets","f","getFootNodeWidgetsToShiftToPage","fromBodyWidget","splittedWidgets","toBodyWidget","isClearHeight","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","prevObj","tempClientAreaX","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","firstLine","maxElementHeight","getMaxElementHeight","paragraphView","getMaximumLineHeightToSplit","footNoteInFirstLine","widgetIndex","updateParagraphWidgetInternal","activeArea","paragraphHeight","lastLine","footNoteIndex","footNoteWidget","check","fromPage","toPage","footHeight","isLineInFootNote","footNotes","footContent","newParagraphWidget","destroyInternal","destroyAndScroll","scrollToBottom","moveFootnoteFromLastBlock","createSplitBody","newBody","lineToLayout","isFootNoteInsert","newBodyWidget_1","isSelectionChangedOnMouseMoved","isContainsRTL","isRTLText","paraBidi","textRangeBidi","hasTextRangeBidi","isContainsRTLText","characterRangeTypes","lineElementsBidiValues","Tab","isRightToLeft","RightToLeft","isStartMark","isStartMarker","isEndMark","isEndMarker","nextltWidget","getNextValidWidget","LeftToRight","rtlStartIndex","isPrevLTRText","updateCharacterRange","reorderedWidgets","reorderElements","layoutedElements","layoutedWidgets","endIndex","WordSplit","previousIndex","joinArray","listElementsBidiValues","lastItemIndexWithoutRTLFlag","consecutiveRTLCount","consecutiveNumberCount","reorderedElements","prevCharType","prevBidi","isInsertWordSplitToLeft","shiftLayoutFloatingItems","indentX","indentY","headerDistance","pageClientWidth","pageClientHeight","textWrapStyle","isLayoutInCell","vertOrigin","verticalOrigin","horzOrigin","horizontalOrigin","horzAlignment","vertAlignment","verticalPercent","verticalRelativePercent","shapeHeight","horizontalRelativePercent","shapeWidth","vertPosition","horzPosition","layoutInCell","autoShape","autoShapeType","getVerticalPosition","getHorizontalPosition","getLeftMarginHorizPosition","getRightMarginHorizPosition","paraItem","cellWid","cellInnerWidth","marginLeft","pageLeft","tableTotalWidth","ownerCell","getTotalColumnSpan","tableRow","totalColumnSpan","highestBorderSize","Renderer","pageTop","leftPosition","topPosition","pageCanvasIn","getContext","save","containerCanvas","selectionCanvas","pageContext","fillStyle","beginPath","visibleBounds","fillRect","closePath","strokeStyle","pageOutline","strokeRect","setPageSize","clip","renderHFWidgets","headerWidgetIn","footerWidgetIn","renderfootNoteWidget","renderHeaderSeparator","restore","clearRect","selectionContext","dpr","devicePixelRatio","documentEditorSettings","printDevicePixelRatio","globalAlpha","scale","cliped","pageHt","headerFooterHeight","getScaledValue","footerHeight","renderFloatingItems","renderWidget","ctx","min","renderDashLine","getHeaderFooterType","font","renderHeaderFooterMark","renderHeaderFooterMarkText","getFooterHeight","footerWidgetHeight","actualHeight","l10n","L10n","defaultLocale","setLocale","locale","getConstant","differentFirstPage","previousPage","differentOddAndEvenPages","context","isSmallDash","setLineDash","moveTo","lineTo","stroke","renderSolidLine","w","h","content","textBaseline","fillText","renderHeader","wrappingType","zOrderPosition","renderImageElementBox","shapeLeft","shapeTop","renderShapeElementBox","isZeroShapeHeight","shapeType","fillFormat","fill","lineFormat","lineFormatType","isClipped","clipRect","renderLockRegionBorder","renderParagraphWidget","renderTableWidget","locked","settinsModel","collaborativeEditingSettings","zoomFactor","lockedBy","currentUser","editableRegionColor","lockedRegionColor","renderSingleBorder","parentTable","renderTableCellWidget","renderParagraphBorder","renderLine","paragraphWidet","leftBorder","topBorder","rightBorder","bottomBorder","startX","endX","endY","getTopMargin","getBottomMargin","indent","footerY","renderTableRowWidget","renderTableOutline","cellTopMargin","cellBottomMargin","renderSelectionHighlightOnTable","renderTableCellOutline","checkHeaderFooterLineWidget","headerFooter","selectedWidget","parentIndex","currentLineIndex","renderEditRegionHighlight","editRegionHighlighters","renderHighlight","widgetInfo","renderSearchHighlight","searchModule","searchHighlighters","searchHighlightColor","renderSelectionHighlight","isScrollToSpellCheck","selectedWidgets","addSelectionHighlight","addSelectionHighlightTable","formFieldHighlighters","formFieldSettings","applyShading","shadingColor","isAltered","formField","getFormfieldInLine","isCommentMark","pageGap","renderLockMark","settings","user","editRangeMark","selectionModule","enableComment","renderCommentMark","commentMark","toSkipFieldCode","underlineY","getUnderlineYPosition","renderListTextElementBox","isVisible","renderTextElementBox","canTrigger","isSpellChecked","isChangeDetected","breakCharacterFormat","isParaBidi","direction","bgColor","getBackgroundColorHeirachy","getDefaultFontColor","renderUnderline","renderStrikeThrough","isHeightType","revisionInfo","checkRevisionType","getRevisionColor","scaledWidth","tabElement","getTabLeader","isRTL","setText","inverseCharacter","removeUnderline","triggerSpellCheck","isSelectionInsideElement","triggerPageSpellCheck","errorDetails","checktextElementHasErrors","errorFound","elements","manageSpecialCharacters","renderWavyLine","handleChangeDetectedElements","currentInfo","getRevisionType","ch","checkText","beforeIndex","checkElementCanBeCombined","markindex","getOffset","currentText","retrievedText","ignoreAllItems","handleUnorderedElements","indexInLine_1","indexinParagraph_1","spellInfo","checkSpellingInPageInfo","isElementPresent","parse","hasSpellError","handleWordByWordSpellCheck","isInUniqueWords","hasSpellingError","isErrorWord","callSpellChecker","languageID","allowSpellCheckAndSuggestion","then","canUpdate","iteration","markIndex","isLastItem","indexInLine","indexinParagraph","handleSplitWordSpellCheck","canUpdate_1","renderedHeight","underlineHeight","specialCharacter","getSpecialCharactersInfo","whiteSpaceData","getWhiteSpaceCharacterInfo","x1","beginningWidth","y1","x2","endWidth","startingPoint","endingPoint","drawWavy","from","to","frequency","amplitude","step","negative","lineCap","cx","cy","fx","fy","tx","ty","waveOffsetLength","ang","atan2","distance","sqrt","PI","sin","cos","tabString","getTabLeaderString","floor","xPos","lineCount","widgetWidth","containerWid","isMetaFile","metaFileImageString","drawImage","isCrop","cropX","cropY","cropWidth","cropHeight","e","imageString","cellLeftMargin","cellRightMargin","renderCellBackground","border_1","lineWidthInt","cellX","borderInfo","isLastCell","prevRowSpannedCells","getPreviousRowSpannedCells","isAffectedByRowSpan","spannedCell","nextRowIsInCurrentTableWidget","previousCellIndex","lastCellWidget","nextRowWidget","drawTextureStyle","foreColor","percent","getForeColor","foreColorRgb","backColorRgb","getColorValue","foreColorValue","backColorValue","authors","checkInsert","TextHelper","paragraphMarkInfo","containerContext","getFormatText","paragraphMark","textSizeInfo","textTrimEndWidth","heightInfoCollection","textMeasureHelper","getHeightInternal","toLocaleLowerCase","lineBreakMark","textToRender","isRender","isRtlText","listCharacterFormat","containsSpecialCharAlone","specialChars","containsNumberAlone","containsCombinationText","containsSpecialChar","getRtlLanguage","isRtl","id","splitTextByConsecutiveLtrAndRtl","isTextBidi","isRTLLang","hasRTLCharacter","charTypeIndex","lastLtrIndex","ltrText","rtlText","wordSplitChars","numberText","currentCharacterType","separateEachWordSplitChars","isNumber","isWordSplitChar","charType","isNumberNonReversingCharacter","isNonWordSplitCharacter","isRightToLeftLanguage","lang","numberNonReversingCharacters","isNonWordSplitChar","charCode","Zoom","onMouseWheelInternal","event","ctrlKey","preventDefault","pageX","viewerContainer","offsetLeft","pageContainer","offsetWidth","wheel","detail","Browser","isIE","wheelDelta","deltaY","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","imageResizerModule","updateImageResizerPosition","fireZoomFactorChange","zoom","handleZoom","updateFocus","AddUserDialog","show","localObj","target","initUserDialog","enableRtl","dialog","beforeOpen","loadUserDetails","buttons","click","okButtonClick","buttonModel","cssClass","isPrimary","hideDialog","deleteButtonClick","dataBind","userList","dataSource","userCollection","restrictEditingPane","addedUser","isAddUser","showStopProtectionPane","addUserCollection","hide","textBoxInput","onKeyUpOnDisplayBox","addButton","disabled","addButtonClick","validateUserName","DialogUtility","alert","getSelectedItems","localValue","className","headerValue","dlgFields","commonDiv","adduserDiv","classList","attrs","autofocus","addEventListener","addButtonElement","Button","appendTo","userCollectionDiv","userDiv","listviewDiv","ListView","domain","domainParts","ext","EnforceProtectionDialog","localeValue","initDialog","passwordTextBox","confirmPasswordTextBox","password","addProtection","protectionType","passwordContainer","confirmPasswordcontainer","TextBox","placeholder","floatLabelType","UnProtectDocumentDialog","stopProtection","containerId","newPassWord","RestrictEditing","addRemove","previousProtectionType","isShowRestrictPane","usersCollection","closePane","restrictPane","display","updateViewerSize","onYesButtonClick","removeAllEditRestrictions","onCancelButtonClick","args","protectionTypeDrop","onNoButtonClick","showAllRegion","showAllEditingRegion","addUserDialog","enforceProtectionDialog","unProtectDialog","base64","showHideRestrictPane","isShow","initPane","isHighlightEditRegion","wireEvents","loadPaneValue","headerWholeDiv","headerDiv1","closeButton","closeSpan","initRestrictEditingPane","optionsPaneContainer","insertBefore","restrictPaneWholeDiv","formatWholeDiv","formatDiv","allowFormatting","allowFormat","createCheckBox","editRestrictWholeDiv","protectionTypeInput","protectionTypeValue","Value","Name","DropDownList","userWholeDiv","subContentDiv","emptyuserDiv","showCheckBox","select","selectHandler","bind","addUser","lastDiv","enforceProtection","stopProtectionDiv","styles","headerDiv","contentWholeDiv","content1","contentDiv1","content2","contentDiv2","stopReadOnlyOptions","navigateNext","navigateNextButton","navigateNextRegion","showAllRegionButton","highlightRegion","highlightRegionInput","highlightCheckBox","CheckBox","label","lastButtonDiv","protectDocument","stopProtectionTriggered","enableFormatting","protectionTypeDropChanges","highlightClicked","restrictFormatting","saltValue","hashValue","unProtectDocument","previousItemData","editRanges","uncheckAllItems","isChecked","insertEditRangeElement","removeUserRestrictions","checkBox","enablePersistence","isDocumentProtected","navigateToNextEditingRegion","editRangeCollection","editStart","group","updateUserInformation","checkSelectionIsAtEditRegion","editRange","getEditRangeStartElement","listElement","querySelectorAll","querySelector","FormFieldPopUp","applyTextFormFieldValue","updateFormField","textBoxInstance","trigger","fieldName","resultText","isCanceled","hidePopup","applyNumberFormFieldValue","numberInput","applyDateFormFieldValue","datePickerInstance","dateInput","applyDropDownFormFieldValue","ddlInstance","enableDisableDatePickerOkButton","isInteracted","dataPickerOkButton","eventArgs","TextFormField","isFormFilling","popupObject","initPopup","popupElement","textBoxContainer","initTextBoxInput","initNumericTextBox","initDatePicker","initDropDownList","textBoxDiv","textBox","textBoxButtonDiv","textBoxOkButton","textBoxCancelButton","iconCss","numericDiv","numericTextBox","NumericTextBox","numericTextBoxInstance","dateDiv","datePicker","DateTimePicker","strictMode","change","dropDownDiv","dropDownInput","ddl","showPopUp","selectField","rex","RegExp","inputElement_1","maxLength","formFieldType","removeAttribute","showPopup","getLeftInternal","getTooltipPosition","Popup","relateTo","parentElement","X","Y","TrackChangesPane","users","enableButtons","viewTypeitems","sortedRevisions","noChangesVisibleInternal","selectedUser","selectedType","initTrackChangePane","reviewTab","trackChangeDiv","refresh","title","visible","isChangesTabVisible","noChangeDivElement","enableDisableToolbarItem","hideTab","notify","isCommentTabVisible","currentSelectedRevisionInternal","selectedElement","changesInfoDiv","singleInnerDiv","scrollIntoView","renderedChanges","initPaneHeader","textContent","updateTrackChanges","toolbarElement","toolbar","Toolbar","template","prefixIcon","align","tooltipText","navigatePreviousChanges","navigateNextChanges","userButtonEle","userDropDownitems","userDropDown","onUserSelect","onUserOpen","beforeItemRender","beforeDropDownItemRender","userDropDownButton","DropDownButton","getSpanView","viewTypeEle","viewTypeDropDownButton","onTypeSelect","menuoptionEle","menuDropDown","onMenuSelect","menuDropDownButton","marginRight","alignSelf","arg","ele","overflowY","enable","enableItems","selectedText","updateUsers","onSelection","currentSelectedRevision","sortCollectionToDisplay","updateMenuOptions","isRevisionVisible","singleChangesDiv","outerSingleDiv","setNoChangesVisibility","enableDisableButton","enableButton","removeAllChanges","ranges","groupedRevision","groupTableRevisions","changeView","nextRevision","addChanges","nextRowFormat","appendRowToTable","updateHeight","resize","startRevision","currentRevisionType","startTable","startParentTable","nextRevisionType","nextTable","nextRowIndex","removeItems","tabHeaderHeight","getRootElement","getElementsByClassName","getBoundingClientRect","parentPaneElement","clientHeight","childNodes","currentChangeView","ChangesSingleView","createSingleChangesDiv","acceptButtonElement","rejectButtonElement","revisionNavigateInternal","groupingAccept","selectTableRevision","userNameTotalDiv","userNameLabel","getAvatar","revisionTypeLabel","whiteSpace","dateView","changesTextDiv","layoutElementText","buttonTotalDiv","buttonDiv","acceptButton","acceptButtonClick","rejectButton","rejectButtonClick","changesCount","currentCount","totalCount","tableElement","insertRow","insertCell","cells","changesText","toSkip","addSpan","retrieveFieldResultantText","emptyChar","defaultValue","imageEle","paraMark","removeFromParentCollec","DocumentHelper","scrollbarWidth","isWebPrinting","isHeaderFooter","currentPage","selectionStartPageIn","selectionEndPageIn","showRevision","tapCount","timer","isTimerStarted","preZoomFactor","preDifference","fieldEndParagraph","fieldToLayout","isMouseDown","isMouseEntered","scrollMoveTimer","isControlPressed","isTouchInput","isTouchMoved","useTouchSelectionMark","touchDownOnSelectionMark","isComposingIME","lastComposedText","isCompositionStart","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","prefix","suffix","alignTablesRowByRow","commentUserOptionId","preDefinedStyles","isRowOrCellResizing","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","moveCaretPosition","isTextInput","cachedPages","skipScrollToPosition","isMobileDevice","footnotes","Footnote","endnotes","isFootnoteWidget","onTextInput","handleTextInput","compositionStart","isDevice","isReadOnlyMode","positionEditableTarget","compositionUpdated","insertIMEText","getEditableDivTextContent","compositionEnd","iframe","containerLeft","containerTop","editableDiv","undo","redoStack","onKeyPressInternal","which","keyCode","ctrl","metaKey","alt","altKey","isInlineFormFillMode","key_1","onTextInputInternal","innerText","onPaste","canEditContentControl","pasteInternal","onFocusOut","contextMenuModule","contextMenuInstance","hideCaret","showCaret","scrollHandler","scrollTimer","clearTimeout","vtHeight","offsetHeight","scrollTop","fireViewChange","onWindowResize","resizeTimer","onContextMenu","onContextMenuInternal","onMouseDownInternal","offsetX","offsetY","updateCursor","formFillPopup","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","isInShape","getCurrentTextFrame","selectShape","isImageResizing","cursorPoint","touchPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","isInCellResizerArea","isInRowResizerArea","handleResize","checkCursorIsInSelection","getLineWidget","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","currentResizingTable","startPosition","setPositionForBlock","endPosition","handleResizing","updateTextPositionForSelection","touchY","touchPoint_1","isImageResizerVisible","isShapeResize","moveTextPosition","checkForCursorVisibility","onMouseLeaveInternal","viewerTop","scrollForwardOnSelection","scrollBackwardOnSelection","onMouseEnterInternal","onMouseUpInternal","onDoubleTap","checkAndEnableHeaderFooter","getHyperLinkFieldInCurrentSelection","getCurrentFormField","enableFormField","formatType","getFormFieldType","textFormFieldDialogModule","checkBoxFormFieldDialogModule","dropDownFormFieldDialogModule","getInline","footnoteText","setPositionParagraph","endnoteText","isinEndnote","isinFootnote","footnoteReferenceElement","selectCurrentWord","isListTextSelected","updateResizingHistory","currentSelectedComment","commentPane","isEditMode","isCtrlkeyPressed","isImageSelected","useCtrlClickToFollowHyperlink","navigateHyperLinkOnEvent","enabled","formFillingMode","toggleCheckBoxFormField","isFormFillProtectedMode","navigateToNextFormField","getPhysicalPositionInternal","selectInternal","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","caret","imageResizer","leftValue","topValue","onTouchStartInternal","touches","zoomX","clientX","zoomY","clientY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","longTouchTimer","onLongTouch","pointRelToPage","selStart","selEnd","updateSel","isForward","selStartPt","selEndPt","changedTouches","updateSelectionOnTouch","onTouchMoveInternal","touch","handleImageResizingOnTouch","currentDiff","pow","onPinchOutInternal","onPinchInInternal","onTouchUpInternal","isImageField","touchStart","touchEnd","onKeyUpInternal","getSelection","anchorOffset","setEditableDivCaretPosition","onKeyDownInternal","isHandled","keyEventArgs","shift","shiftKey","documentName","initalizeStyles","test","customXmlData","visibleBoundsIn","containerCanvasIn","selectionCanvasIn","zoomModule","dialogInternal","dialogInternal2","initDialog2","dialogInternal3","initDialog3","currentSelectedCommentInternal","previousSelectedComment","clearDocumentItems","setDefaultCharacterValue","setDefaultParagraphValue","setDefaultDocumentFormat","parser","parseCharacterFormat","parseParagraphFormat","getListLevelNumber","getBookmarks","includeHidden","bookmark","selectComment","showComments","showHidePane","showRevisions","initializeComponents","contentEditable","viewerContainerStyle","tabIndex","outline","pointerEvents","createEditableDiv","createEditableIFrame","initializeImageResizer","updateViewerSizeInternal","initTouchEllipse","wireEvent","CommentReviewPane","createSpinner","measureScrollbarWidth","parentDiv","childDiv","parentNode","scrolling","initIframeContent","contentDocument","initCaret","wireInputEvents","onIframeLoad","onImageResizer","updateAuthorIdentity","getAuthorColor","userInfo","userName","userinitial","initial","avatarDiv","avatar","authorName","generateRandomColor","getRect","getSelectionPage","iframeStyle","MouseEvent","TouchEvent","dialogTarget1","Dialog","showCloseIcon","allowDragging","isModal","zIndex","animationSettings","effect","isStringTemplate","beforeClose","dialogTarget3","dialogTarget2","commentMarkElement","editRangeStart","onDocumentChanged","tocStyles","tocBookmarkId","previousSelectedFormField","highlightFormFields","documentStart","optionsPaneModule","showHideOptionsPane","isViewPasteOptions","showHidePasteOptions","fireDocumentChange","ellipse","getPage","getLeftValue","isInsideRect","selectionLineWidget","isInShapeBorder","marginBottom","button","touchOffsetValues","pageY","updatedZoomFactor","linkPageToHeaderFooter","removePage","updateHeaderFooterPage","getDocumentEditorElement","resizerTimer","currentVisibleWidth","preVisibleWidth","layoutWholeDocument","restrictPaneRect","optionsRect","isOptionsPaneShow","optionsPane","paneWidth","ceil","updateTextPosition","selectParagraph","skipCursorUpdate","getLineWidgetInternal","prevLineWidget","prevTop","scrollLeft","caretInfo","updateCaretSize","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","pageBottom","shapeElementInfo","checkFloatingItems","isShapeSelected","getLineWidgetBodyWidget","shapeInfo","behindShapeInfo","isEmptyShape","isInFootnoteWidget","inlineShapeInfo","checkInlineShapeItems","checkPointIsInLine","selectionInShape","isMouseDraggedInShape","caretPosition","blockContainer","isBehind","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","containerHeight","fieldCodes","fieldCategory","fieldPattern","pageNumberStyle","restartPageNumbering","currentSectionIndex_1","currentPageNum","getFieldText","pageStartingNumber","currentSectionIndex","currentPageCount","pattern","unWireEvent","listParagraphs","removeEventListener","hyperlinkField","footnoteElement","div","isRowResize","isCellResize","floatItemInfo","checkAllFloatingElements","resizePosition","getImagePoint","lineLeft","isInInline","getLineStartLeft","code","updateTextPositionIn","getLeft","setHyperlinkContentToToolTip","isLocked","setLockInfoTooptip","getFootNoteElementInCurrentSelection","setFootnoteContentToToolTip","cursor","updateDialogTabHeight","dialogElement","targetElement","contentElement","contentStyle","getComputedStyle","dialogStyle","paddingTop","paddingBottom","paddingVertical","borderTop","borderBottom","borderVertical","paddingRight","paddingHorizontal","borderLeft","borderRight","borderHorizontal","isSamePreviousBorder","isSameNextBorder","isSameTopBorder","isSameBottomBorder","isSameLeftBorder","isSameRightBorder","LayoutViewer","Padding","onPageFitTypeChanged","top_3","isEmptyWidget","isFootNote","updateClientAreaForTable","updateClientAreaByWidgetFootNote","tableAlignmentForBidi","getTotalWidth","getOwnerWidth","resizerPosition","currentPoint","updateCurrentPage","updatePage","pageRight","updateHeaderFooterPageInstance","getPageHeightAndWidth","viewerWidth","viewerHeight","renderVisiblePages","renderPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevY","prevValue","prevX","updateCanvasWidthAndHeight","displayPixelRatio","updateScrollBarPosition","Page","updatePageBoundingRectangle","pageFitType","getCurrentHeaderFooter","currentSecIndex","createHeaderFooterWidget","scrollToPage","updatePositionObj","updateObj","updateVisiblePages","pageH","isTopFit","isBottomFit","isMiddleFit","addVisiblePage","setImageResizerPositions","getPageContent","allowNextPageRendering","updateUniqueWords","SpellCollection","getContentHeight","getContentWidth","currentWidth","contentlen","currentBound","removeEditRange","previousContainer","getPreviousSplitWidget","nextContainer","getNextSplitWidget","previous","getPreviousSplitWidgets","widgets","nextSplitWidget","root","combine","combineRows","addWidgets","apply","arguments","sectionFormatIn","hierarchicalIndex","getTableCellWidget","tableCellWidget","chilgWidget","getIndex","getMinimumAndMaximumWordWidth","minimumWordWidth","maximumWordWidth","footNote","containsShape","inlineElement","ChartElementBox","indexInInline","getLength","imageWidths","matches","matchInfo","exec","matchedValue","wordStartIndex","wordEndIndex","spanLength","imageWidth","maximum","measureParagraph","iIncrementer","isField","nextLineWidget","splitedTextCollection","clonedTextElement","updateTextElementInRevisionRange","currentTxtRange","nextTxtRange","cloneLine","TablePosition","flags","isDefaultFormatUpdated","WTableHolder","combineCells","isBasedOnViewer","getMinimumPreferredWidth","fitCellsToClientArea","factor","tempGrid","tempSpanDecimal","spannedCells","tableCellInfo","rowCellInfo","currOffset","startOffset","removeSpannedCell","updateColumnSpans","tempSpan","getGridCount","checkTableColumns","isAutoFit","resetColumns","rowSpannedCells","isAutoWidth","isZeroWidth","splitWidthToTableCells","ColumnSizeInfo","addColumns","rowSpannedCell","getCellSizeInfo","ownerColumn","validateColumnWidths","autoFitColumn","fitColumns","setWidthToCells","rw","updateProperties","updateAllowAutoFit","currentSelectedTable","autoFitBehavior","getMaxRowWidth","updateWidth","dragValue","totalPreferredWidth","ownerWidth","convertPointToPercent","tablePreferredWidth","updateChildWidgetLeft","shiftWidgetsForRtlTable","clientAreaX","clientAreaRight","cellSpace","updateWidgetLeft","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","isInsertRow","updateRowIndex","getCellStartOffset","description","getCellOf","getCell","tableGrid","prevOffset","tabGrid","gridStartIndex","getOffsetIndex","gridWidth","getCellOffset","updateRowBySpannedCells","currentRowIndex","include","sizeInfoInternal","getContainerTable","previousCell","nextCell","cellPreferredWidth","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","prevRowCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellSpacing","actualCellSpacing","isSetWidth","hasMinimumWidth","hasMinimumWordWidth","prevCellRightBorder","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","isFirstCell","getRightBorderToRenderByHierarchy","getAdjacentCellRightBorder","nextCellLeftBorder","getTopBorderToRenderByHierarchy","prevTopCell","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getBottomBorderToRenderByHierarchy","isFirstRow","nextBottomCell","getAdjacentCellBottomBorder","prevBottomCellTopBorder","widthInfo","lastElement","textIndex","getEndOffset","isInsert","getNextTextElement","canTrack","linkFieldTraversingForward","linkFieldTraversingBackwardSeparator","isFieldEnd","linkFieldTraversingBackward","childNode","prevParagraph","childElement","objectCharacter","fieldCodeType","fieldSeparatorInternal","fieldEndInternal","FormField","helpText","textForm","getFormFieldInfo","copyFieldInfo","checkBoxForm","dropDown","istextCombined","textEle","separator","continuationNotice","continuationSeparator","symbolCode","symbolFontName","customMarker","ErrorTextElementBox","startIn","endIn","fieldText","fieldSpan","revisionChanges","tabSpan","bookmarkTypeIn","refereneceIn","nameIn","widgetType","contentControlWidgetType","ContentControlProperties","revisionChange","contentControlListItems","lockContentControl","lockContents","tag","appearance","hasPlaceHolderText","multiline","isTemporary","dateCalendarType","dateStorageFormat","dateDisplayLocale","dateDisplayFormat","checkedState","uncheckedState","xmlMapping","ContentControlListItems","displayText","CheckBoxState","XmlMapping","isMapped","isWordMl","prefixMapping","xPath","storeItemId","customXmlPart","CustomXmlPart","xml","ShapeCommon","alternativeText","shapeId","heightScale","lockAnchor","textVerticalAlignment","LineFormat","dashStyle","FillFormat","isInlineImage","imageStr","imgElement","isInlineImageIn","crop","isCompressed","cropWidthScale","cropHeightScale","isListFollowCharacter","isFollowCharacter","editRangeId","columnFirst","columnLast","removeEditRangeMark","editRangeEnd","chartTitle","chartType","chartElement","chartCategory","chartSeries","chartArea","ChartArea","chartPlotArea","chartTitleArea","ChartTitleArea","chartLegend","ChartLegend","chartPrimaryCategoryAxis","ChartCategoryAxis","chartPrimaryValueAxis","chartDataTable","ChartDataTable","gapWidth","overlap","officeChartInternal","chart","loaded","onChartLoaded","officeChart","convertChartToImage","dataURL","series","ChartCategory","categoryXName","chartData","ChartData","yValue","xValue","legendPostion","ChartSeries","chartDataFormat","trendLines","errorBar","ChartErrorBar","dataLabels","ChartDataLabels","seriesFormat","ChartSeriesFormat","sliceAngle","holeSize","trendLine","endStyle","errorValue","errorDirection","isLegend","isBubble","isCategory","isSeries","isValueEnabled","isPercentageEnabled","showLeaderLines","ChartTrendLines","intercept","forward","backward","displayRSquared","displayEquation","dataFormat","ChartDataFormat","ChartLayout","fontName","ChartFill","fillColor","fillRGB","layoutX","layoutY","majorTickMark","minorTickMark","tickLabelPostion","hasMinorGridLines","hasMajorGridLines","majorUnit","maximumValue","minimumValue","categoryType","isSeriesKeys","isHorzBorder","isVertBorder","isBorders","commentInternal","removeCommentMark","CommentElementBox","authorIn","initialIn","done","textIn","isReply","ownerComment","createdDate","replyComments","commentStartIn","commentEndIn","isResolved","removeFieldInWidget","tableColumns","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","endOffset","widthType","column","isFitColumns","preferredTableWidth","totalColumnWidth","Infinity","isAuto","isNestedTable","maxTotal","minTotal","remainingWidthTotal","isAllColumnPointWidth","difference","preferred","considerMinAsTableWidth","totalMinimumWordWidth","totalMinWidth","getPreviousValidOffset","maxWidth","hasMaximumWordWidth","ContextMenu","menuItems","customMenuItems","ids","spellContextItems","customItems","currentContextInfo","findCurretText","splittedSuggestion_1","allSuggestions_1","exactData_1","errorWordCollection","errorSuggestions","handleSuggestions","processSuggestions","Suggestions","hideSpellContextItems","showContextMenuOnSel","initContextMenu","contextMenu","ul","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","addMenuItems","handleContextMenuItem","Menu","fireCustomContextMenuBeforeOpen","enableCustomContextMenu","getElementById","onClose","collaborativeEditingModule","lockContent","unlockContent","cut","isCommentOnlyMode","isUserInsert","insertComment","isReferenceField","updateRefField","updateToc","tableOfContentsDialogModule","fontDialogModule","showFontDialog","navigateHyperlink","copyHyperlink","hyperlinkDialogModule","removeHyperlink","paragraphDialogModule","tablePropertiesDialogModule","mergeCells","insertColumn","deleteTable","deleteRow","deleteColumn","applyContinueNumbering","applyRestartNumbering","autoFitTable","contextInfo","retriveText","spellCheckDialog","showFootNotesDialog","expectedData","callSelectedOption","fireCustomContextMenuSelect","handleAddToDictionary","handleIgnoreAllItems","manageReplace","addCustomMenu","isEnable","isBottom","enableCustomContextMenuBottom","isTouch","documentElement","showHideElements","allSuggestions","splittedSuggestion","constructContextmenu","noSuggestion","allSuggestion","contextMenuItems","hideToolTip","lock","unlock","paste","updateField","editField","tableProperties","insertTable","hyperlink","openHyperlink","editHyperlink","properties","continueNumbering","restartAt","addComment","editNoteoptions","isSelectionInEditRegion","canLock","isDialogHidden","acceptChange","rejectChange","previousSibling","getHyperlinkField","isCrossRefField","isSelectionEmpty","isHideComment","enablePaste","enableLocalPaste","copiedData","contextType","isCellSelected","isFormField","canMergeCells","isTableSelected","hasRevisions","isNewComment","isUserClosed","selectedTab","onTabSelection","initReviewPane","previousSelectedCommentInt","getCommentStart","removeSelectionMark","commentView","hideDrawer","hideMenuItems","selectReviewTab","updateTabHeaderWidth","updateCommentStatus","enableDisableItems","reviewPaneHelper","reviewTabsEle","reviewContainer","addReviewTab","initCommentPane","on","commentHeader","changesHeader","reviewPane","selected","animation","headerContainer","initToolbar","currentEditingComment","isInsertingReply","replyViewTextBox","cancelReply","textArea","confirmDialog","confirm","okButton","discardButtonClick","cancelButton","closeDialogUtils","closeOnEscape","cancelEditing","discardComment","navigatePreviousComment","navigateNextComment","deleteComment","resolveComment","reopenComment","addReply","newComment","insertReply","menuBar","resolveView","CommentPane","deleteCommentInternal","isDestroyed","off","pane","isEditModeInternal","parentPane","parent","noCommentIndicator","CommentView","commentParent","layoutComment","replyView","replyViewContainer","replyComment","parentComment","parentView","replyElement","replyIndex","nextReply","editComment","showDrawer","getFirstCommentInLine","startComment","replyCmt","removeChildElements","isDrawerExpand","initCommentHeader","initCommentView","initDateView","initReplyView","initResolveOption","initDrawer","showMenuItems","hideMenuItemOnMouseLeave","commentDiv","commentUserInfo","userOption","menuItem","userOptionSelectEvent","dropDownButton","commentText","initEditView","textAreaContainer","updateTextAreaHeight","enableDisablePostButton","editRegionFooter","postButton","postComment","commentDate","drawerElement","leftPane","spanElement","drawerSpanElement","drawerAction","showOrHideDrawer","readOnly","enableReplyView","updateReplyTextAreaHeight","enableDisableReplyPostButton","replyPostButton","postReply","replyCancelButton","replyFooter","reopenButton","reopenButtonClick","deleteButton","cancel","eventActionArgs","scrollHeight","replyText","fireContentChange","updatedText","showCommentView","selectedItem","unwireEvent","HyperlinkDialog","navigationUrl","screenTipText","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","displayTextBox","urlTextBox","onInsertHyperlink","urlValue","enableOrDisableInsertButton","onScreenTipTextBox","screenTipTextBox","onInsertButtonClick","clearValue","loadHyperlinkDialog","getText","fieldObj","getHyperlinkDisplayText","isNestedField","getLinkText","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","initHyperlinkDialog","bookmarkText","bookmarkValue","noRecordsTemplate","bookmarkCheckDiv","bookmarkCheck","address","isBookmark","insertHyperlinkInternal","TableDialog","onInsertTableClick","columnValueTexBox","rowValueTextBox","maximumRows","rowCount","columnCount","initTableDialog","columnValue","columnsCountBox","rowValue","rowsCountBox","focusIn","BookmarkDialog","onKeyUpOnTextBox","enableOrDisableButton","addBookmark","insertBookmark","focusTextBox","gotoBookmark","selectBookmark","deleteBookmark","initBookmarkDialog","searchDiv","listviewInstance","hasNoBookmark","addbuttonDiv","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","gotoButton","removeObjects","firstItem","selectItem","setSelectionRange","TableOfContentsDialog","loadTableofContentDialog","rightAlign","showLevel","closeTableOfContentDialog","unWireEventsAndBindings","dialog3","showStyleDialog","styleDialogModule","reset","values","changeByValue","normal","changeStyle","headingValue","srcElement","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","applyTableOfContentProperties","tocSettings","startLevel","endLevel","includeHyperlink","includePageNumber","includeOutlineLevels","applyLevelSetting","insertTableOfContents","initTableOfContentDialog","ownerId","generalDiv","genLabel","topContainer","leftGeneralDiv","rightGeneralDiv","bottomContainer","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDivContainer","tabDiv","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","changeShowLevelValue","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesLabel","listViewDiv","styleLocale","styleValues","styleLocaleValue","listViewInstance","modifyButtonDiv","modifyElement","headings","getHeadingLevel","levelSettings","newStartLevel","newEndLevel","isEndLevel","headingStyle","PageSetupDialog","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","onApplySectionFormat","changeByPaperSize","onPortrait","onLandscape","paperSize","initPageSetupDialog","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","marginDiv","leftMarginDiv","rightMarginDiv","topTextBox","bottomTextBox","leftTextBox","rightTextBox","leftContainer","rightContainer","decimals","portraitDivStyles","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","RadioButton","sizeDiv","leftSizeDiv","rightSizeDiv","widthTextBox","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","textLabel","propertyDiv","leftLayoutDiv","rightLayoutDiv","s","ParagraphDialog","lineSpacingIn","isStyleDialog","directionDiv","keepWithNextValue","keepLineTogetherValue","widowControlValue","tabObj","keyUpParagraphSettings","applyParagraphFormat","changeBeforeSpacing","local","beforeSpacingIn","focusBeforeSpacing","blurBeforeSpacing","proxy_1","clickBeforeSpacing","changeAfterSpacing","afterSpacingIn","focusAfterSpacing","blurAfterSpacing","proxy_2","clickAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","special","leftIndentIn","changeByTextAlignment","changeBidirectional","rtlButton","ltrButton","changeAlignmentByBidi","changeContextualSpacing","changeKeepWithNext","changeKeepLinesTogether","changeWidowControl","byIn","changeBySpacing","atIn","loadParagraphDialog","selectionFormat","alignValue","getAlignmentValue","alignment","rightIndentIn","lineSpaceValue","indeterminate","widowControlIn","contextSpacing","isApply","onParagraphFormat","updateParagraphFormat","closeParagraphDialog","initParagraphDialog","tabContainer","instance","indentContainer","alignmentWholeDiv","alignmentDiv","dirLabel","rtlDiv","rtlInputELe","ltrDiv","ltrInputELe","indentionWholeDiv","indentLabel","indentionSubDiv1","indentionSubDiv2","beforeTextDiv","afterTextDiv","specialDiv","byDiv","spacingDiv","leftSpacingDiv","contextSpacingDiv","rightSpacingDiv","contextInputEle","by","spaceLabel","spacingWholeDiv","beforeSpacingWholeDiv","afterSpacingWholeDiv","lineSpacingDiv","lineTypeDiv","lineSpacingAt","blur","lineBreakContainer","paginationDiv","paginationLabel","widowContorlContainer","keepNextContainer","keepLines","isListBidi","setPreviousBlockToLayout","applyParaFormatProperty","layoutItemBlock","updateSelectionParagraphFormatting","q","ListViewModel","listIn","levelNumberIn","createList","listLevelAdv","ListDialog","viewModel","textIndent","alignedAt","listLevelElement","followNumberWith","numberStyle","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","getList","onApplyList","setList","dialog2","disposeBindingForListUI","closeListDialog","showListDialog","bindEvent","initListDialog","buttonClass","wireAndBindEvent","listLevelDiv","divStyle","numberStyleDiv","numberFormatDiv","indentsDivLabelStyle","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","popupHeight","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","Tooltip","options","option","option_1","listPatternConverter","followCharacterConverter","calculateAlignedAt","updateCharacterFormat","StyleDialog","styleType","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showParagraphDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","currentValue","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","updateStyleNames","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","BulletsAndNumberingDialog","showNumberBulletDialog","onOkButtonClick","styleNameElement","name_1","tmpStyle","updateList","createLinkStyle","loadStyleDialog","closeStyleDialog","initStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","formatting","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","styleDropdwn","fontFamilyElement","ComboBox","fontStyle","query","Query","allowCustom","popupWidth","showClearButton","itemTemplate","fontFamilyValue","fontFamilies","fontValue","fontStyleValue","FontName","addItem","fontSizeElement","sizeDataSource","fontGroupButton","createButtonElement","fontColorElement","ColorPicker","leftAlign","centerAlign","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","indentingDiv","buttonElement","getStyle","paragraphFOrmat","nxtName","basedOnIndex","createStyle","isBullet","numberListClick","setActiveElement","currentTarget","bulletListClick","symbol","loadNumberingBulletDialog","closeNumberingBulletDialog","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","numberListDiv","bulletListDiv","heightAdjustMode","selecting","onTabSelect","selectingIndex","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text2","text3","liTag","liInnerDiv","cssFloat","createBulletListTag","isNone","liNextDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","html","childElementCount","FontDialog","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","allcaps","isListDialog","loadFontDialog","closeFontDialog","onInsertFontFormat","listDialogModule","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","allcapsUpdate","createInputElement","initFontDialog","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","allCapsElement","fontEffectSubDiv1","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","effectsProperties","fontEffectSubDiv2","checkBoxDiv","fontEffectSubDiv3","sizeSubDiv1","sizeLabel","sizeSubDiv2","underlineElement","fontSubDiv1","fontLabel","fontNameValues","fontValues","fontSubDiv2","fontStyleValues","fontStyleLabel","getParagraphLength","applyCharFormatValueInternal","setOffsetValue","updateSelectionCharacterFormatting","TablePropertiesDialog","hasTableWidth","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","rowHeightValue","onTableFormat","onRowFormat","onCellFormat","closeTablePropertiesDialog","applyTableSubProperties","cellOptionsDialogModule","applySubCellOptions","tableOptionsDialogModule","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","rowHeightType","repeatHeader","allowRowBreak","cellWidthBox","cellWidthType","activeTableAlignment","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","getTableAlignment","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showTableOptionsDialog","showBordersShadingsPropertiesDialog","bordersAndShadingDialogModule","showCellOptionsDialog","cellFormatIn","tableFormatIn","paraFormatIn","rowFormatInternal","initTablePropertyDialog","rowTab","separatorLine","tableHeader","rowHeader","cellHeader","tableContent","rowContent","cellContent","initTableProperties","initTableRowProperties","initTableCellProperties","alignMentButtons","cellAlignment","duration","delay","calculateGridValue","updateSelectionTextPosition","modifiedProperties","updateSelection","setTableProperties","setTableRowProperties","setTableCellProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","childContainer1","childContainer2","preferredWidthDiv","controlDiv","alignmentContainer","alignmentHeader","alignmentSubContainer","classDivName","leftDiv","leftAlignDiv","centerAlignDiv","center","leftlabel","centerlabel","rightlabel","leftIndenetContainer","tableDirHeader","tableDirContainer","tableOptionContiner","formatNumericTextBox","tableHasWidth","isChanged","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","rowHeightDiv","allowRowContainer","repeatHeaderContaniner","enableRowHeight","enabledHeader","enableRepeatHeader","childdiv1","preferredCellDiv","preferredCellWidth","divAlignment","topDiv","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","topLabel","centerLabel","bottomLabel","cellAlignments","BordersAndShadingDialog","isShadingChanged","applyBordersShadingsProperties","tablePropertiesDialog","selectedCell","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","noneDiv","applyBordersInternal","currentTableFormat","isNoneBorder","onApplyParagraphFormat","applyFormat","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","targetId","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","visibility","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewLeftDiagonalDiv","previewRightDiagonalDiv","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","borderColor","initBordersAndShadingsDialog","settingAndPreviewContainer","settingsContiner","styleContainer","previewContiner","previewSubContainer1","previewSubContainer2","styleSubContainer","dropdownListDiv","dropDownList","widthcontainerDiv","widthNumericDiv","widthNumeric","colorText","borderColorPickerElement","settingText","settingsSubContiner","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","previewText","previewDivVerticalContainer","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivHorizontalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","colorPickerDiv","shadingColorPickerElement","shdApply","ulelementShadingValue","borderStyle","borderColorPicker","isBordersAndShadingDialog","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","elementClass","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","cloneBorders","getSelectionBorderFormat","getLineStyle","copyToBorder","selectionBorder","horizontalBorder","verticalBorder","diagonalDownBorder","customBorder","diagonalUpBorder","TableOptionsDialog","applyTableCellProperties","cellSpaceTextBox","applyTableOptions","closeCellMarginsDialog","changeAllowSpaceCheckBox","allowSpaceCheckBox","removeEvents","initTableOptionsDialog","innerDiv","innerDivLabel","CellOptionsDialog","getCellMarginDialogElements","cellSpaceLabel","td6Padding","table2","cellspacingTextBox","divBtn","loadCellMarginsDialog","applyTableOptionsHistory","applyTableOptionsHelper","applySubTableOptionsHelper","addModifiedTableOptions","documentLocale","changeSameAsTable","sameAsTableCheckBox","initCellMarginsDialog","tr","td","localizeValue","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginValue","applyCellMarginsInternal","newRow","addModifiedCellOptions","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","sourceFormat","cellOptions","StylesDialog","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","hideObjects","styleNames","defaultStyleNames","defaultStyleName","v","SpellCheckDialog","onIgnoreClicked","showSpinner","removeErrors","checkForNextError","hideSpinner","onIgnoreAllClicked","addToDictClicked","errorText","changeButtonClicked","isSpellChecking","changeAllButtonClicked","matchResults","getMatchedResultsFromElement","results","textResults","textSearch","updateMatchedTextLocation","elementInfo","createErrorElementWithInfo","innerList","elementbox","updateSuggestionDialog","suggestions","handleRetrievedSuggestion","initSpellCheckDialog","suggestion","textContainer","spellContainer","spellingListView","ignoreButtonElement","ignoreAllButtonElement","addDictButtonElement","suggestionDiv","suggestionContainer","suggestListDiv","suggestionListView","suggestBtnContainder","changeButtonElement","changeButton","changeAllButtonElement","changeAllbutton","CheckBoxFormFieldDialog","autoButton","exactButton","exactlyNumber","changeBidirect","notCheckedButton","checkedButton","insertCheckBoxField","closeCheckBoxField","checkBoxField","bookmarkInputText","tooltipInputText","checBoxEnableElement","editFormField","initCheckBoxDialog","dialogDiv","headingLabel","sizeParentDiv","autoDiv","exactDiv","autoEle","exactEle","exactNumberDiv","exactNumber","defaultValueLabel","defaultcheckDiv","notcheckDiv","checkDiv","notcheckEle","checkEle","fieldSettingsLabel","settingsTotalDiv","totalToolTipDiv","totalBookmarkDiv","checkBoxEnableDiv","checBoxEnableEle","loadCheckBoxDialog","fieldData","checkBoxDialogTarget","TextFormFieldDialog","updateTextFormtas","defautText","updateFormats","defaultTextInput","insertTextField","valid","typeDropDown","isValidDateFormat","maxLengthNumber","textFormatDropDown","bookmarkTextInput","tooltipTextInput","fillInEnable","closeTextField","initTextDialog","firstDiv","typeDiv","defaultTextDiv","typeDropDownitems","typeDropDownList","changeTypeDropDown","secondDiv","maxLengthDiv","textFromatDiv","textFormatList","formatDropDownitems","fileSettingsLabel","thirdDiv","toolTipTotalDiv","bookmarkTotalDiv","fillInEnableDiv","fillInEnableEle","defaultTextLabel","loadTextDialog","textDialogTarget","textFormatLabel","DropDownFormFieldDialog","addItemtoList","dropDownItems","drpDownItemsInput","currentSelectedItem","removeItemFromList","moveUpItem","getSelectedIndex","moveUp","moveDownItem","moveDown","insertDropDownField","dropDownField","bookmarkInput","tooltipInput","dropDownEnable","closeDropDownField","itemsDrpItemsLabel","addButtonDiv","addButtonEle","editButtonDiv","editButtonEle","editButton","removeButtonDiv","removeButtonEle","removeButton","moveBtnDiv","moveUpButtonDiv","moveUpButtonEle","moveUpButton","moveDownButtonDiv","moveDownButtonEle","moveDownButton","toolTipDiv","dropDownEnableDiv","dropDownEnableEle","loadDropDownDialog","dropDownInstance","toSelectItem","fromIndex","toIndex","tempData","dropDownDialogTarget","TextPosition","isUpdateLocation","getStartOffset","getLineLength","getHierarchicalIndexInternal","containsRtlText","setPositionForSelection","physicalLocation","isLastRenderedInline","setPositionFromLine","setPosition","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","newValue","index1","value1","moveNextLine","isAtSamePosition","isInSameParagraphIndex","isInSameParagraph","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","lineLength","getNextRenderedBlock","prevLine","currentOffSet","moveNextPosition","isNavigate","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","nextOffset","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","previousParagraph","getPreviousSelectionCell","getPreviousParagraphBlock","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","moveForward","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","selectionStart","selectionEnd","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeparator","getNextWordOffsetFieldEnd","getNextWordOffsetComment","txt","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","getPreviousWordOffsetComment","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","isSelectParaMark","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","getLastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstParagraph","getFirstBlockInFirstCell","moveToPreviousLine","firstElement","getFirstElementInternal","prevInline","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","isMoveToLineEnd","moveDownInTable","firstItemWidth","top_2","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","SelectionWidgetInfo","widthIn","floatingItems","Hyperlink","fieldBeginAdv","linkInternal","localRef","opensNewWindow","lowercase","parseFieldValues","typeInternal","isHyperlink","codes","parseFieldValue","isLocalRef","setLinkType","endChar","navigationLink","ImageInfo","imageContainer","ModifiedLevel","modified","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","modifiedFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","revertChanges","isRedo","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","tableHierarchicalIndex","CellHistoryFormat","BaseHistoryInfo","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","actionIn","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","setBookmarkInfo","setFormFieldInfo","setEditRangeInfo","revertFormTextFormat","fieldInfo","applyTextFormatInternal","recordChanges","undoStack","revertFormField","revertBookmark","bookmarkInfo","deleteBookmarkInternal","revertComment","insertPosition","resolveOrReopenComment","addReplyComment","addCommentWidget","commentElement","getCommentElementBox","deleteCommentWidget","revertEditRangeRegion","editRangeInfo","updateRangeCollection","removeUserRestrictionsInternal","revert","listNumberFormat","currentListLevelPattern","currentNUmberFormat","selectionStartTextPosition","selectionEndTextPosition","revertModifiedProperties","sel","deletedNodes","insertTextPosition","endTextPosition","lastElementRevision","endRevisionLogicalIndex","updateEndRevisionInfo","undoRevisionForElements","selectPosition","editModule","changeSelectedTextCase","isRemoveContent","currentPosition","skipDelete","removeSelectedContents","isRedoAction","revertModifiedNodes","removeContent","isSelectionChanged","highlightListText","isDelete","checkAdjacentNodeForMarkedRevision","retrieveEndPosition","markedNode","nextItem","revertResizing","revertTableDialogProperties","revertProperties","redoAction","singleBackspace","singleDelete","mergeSelectedCellsInTable","insertSection","isEmptySelection","getBlock","lastNode","insertTableInternal","insertBlock","initialStart","insertNewParagraphWidget","constructRevisionFromID","selectParagraphInternal","firstNode","insertRemovedNodes","insertInlineInSelection","updateNextBlocksIndex","insertBlockTable","wiget","endWidget","insertRevisionForBlock","endPara","startoffset","endoffset","isSamePara","applyRevisionForCurrentPara","highlightSelection","prevTableHistoryInfo","tableHistoryInfoCurrent","applyProperties","updateGridValue","currentPropertyIndex","updateCellMargins","addModifiedPropertiesForSection","previousFormat","addModifiedProperties","skipRemove","prevLength","nextFormat","addModifiedPropertiesForParagraphFormat","addModifiedPropertiesForContinueNumbering","addModifiedPropertiesForRestartNumbering","addModifiedPropertiesForList","previousLevel","cloneListLevel","getProperty","updateListCharacterFormat","revertContinueNumbering","updateSectionFormat","restartListAtInternal","updateImageSize","modifiedLevel","updateListChanges","updateTableFormat","updateCellFormat","updateRowFormat","getOffsetValue","copyCellOptions","copyTableOptions","getCharacterPropertyValue","addModifiedTableProperties","previousTableFormat","addModifiedRowProperties","addModifiedCellProperties","HistoryInfo","isChild","isChildHistoryInfo","modifiedActions","addModifiedAction","baseHistoryInfo","updateEditRangeCollection","updateComplexHistoryInternal","EditorHistory","undoStackIn","redoStackIn","historyInfoStack","modifiedParaFormats","undoLimitIn","redoLimitIn","canUndo","canRedo","initializeHistory","initResizingHistory","resizeNode","tableHistoryInfo","rowHistoryFormat","cellHistoryFormat","getCellReSizerPosition","enableHistoryMode","redoLimit","undoLimit","clearRedoStack","isHandledComplexHistory","insertRemoveBookMarkElements","isHandledComplex","hasAction","fireSelectionChanged","updateListChangesInHistory","currentAbstractList","copyListLevel","applyListChanges","modifiedLevelsInternal","currentList","copyFromListLevelParagraphFormat","modifiedCollection","updateListParagraphs","historyInfo","redo","clearHistory","clearUndoStack","TableResizer","getRowReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","bodywid","currentHeight","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","newWidth","dragOffset","updateCellPreferredWidths","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","selectedCells","getSelectedCells","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","leftColumn","isContinue","isUpdate","isLeftSideCollection","ignoreRow","isIncrease","diff","maxRowWidth","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","updateGridBeforeWidth","updateGridAfterWidth","Editor","nodes","editHyperlinkInternal","formFieldCounter","skipFieldDeleteTracking","isForHyperlinkFormat","isTrackingFormField","isInsertText","isRemoveRevision","removedBookmarkElements","pageRefFields","delBlockContinue","delBlock","delSection","editStartRangeCollection","skipReplace","skipTableElements","isXmlMapped","copiedContent","copiedTextContent","previousParaFormat","previousCharFormat","previousSectionFormat","pasteTextPosition","isPasteListUpdated","isHtmlPaste","isInsertField","nbsp","lineFeed","textBoxText","retrieveCurrentFormatProperties","handleBackKey","predictText","checkContentControlLocked","setFieldInfo","insertField","insertPageCount","insertPageNumber","insertFormat","copyInsertFormat","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","clearDirectFormatting","clearFormatting","styleObj","preservedStartPosition","preservedEndPosition","onApplyCharacterFormat","parseStyle","getCompleteStyles","copySelectedContent","isCutPerformed","insertEditingRegion","credential","restrictFormatType","typeOfProtection","limitToFormatting","getCommentHierarchicalIndex","alertBox","insertCommentInternal","isAtParagraphEnd","paragraphInfo","endParagraphInfo","commentRangeStart","commentRangeEnd","isSameLine","initInsertInline","endIndex_1","commentAdv","constructCommentInitial","deleteAllComments","deleteCommentWidgetInternal","removeInline","commentIndex","resolve","commentWidget","currentCmtStart","currentCmtEnd","isAtSameLine","isInserted","currentStart","getElementPosition","paraIndex","currentProtectionType","enforceProtectionHandler","formObject","passwordBase64","saltBase64","spinCount","serviceUrl","serverActionSettings","restrictEditing","enforceProtectionInternal","protectionFailureHandler","httprequestEventArgs","serverActionType","fireServiceFailure","console","toggleTrackChangesProtection","enableTrackChanges","isTrackChangesEnabled","protect","unProtectDocumentHandler","onUnProtectionSuccess","validateHashValue","currentHashValue","decodeUserHashValue","documentHashValue","defaultHashValue","highlightEditRegion","updateLockRegion","onHighlight","getPrefixAndSuffix","boxInfo","getElementBoxInternal","box","spaceIndex","prefixAdded","getPreviousTextElement","endInlineInfo","endInline","suffixAdded","toggleUnderline","decreaseIndent","toggleBaselineAlignment","toggleHighlightColor","insertFootnote","insertEndnote","acceptTab","handleTabKey","handleEnterKey","handleDelete","handleSpaceBarKey","getDocumentEnd","getDocumentStart","updateFields","handleShiftEnter","handleCtrlBackKey","handleCtrlDelete","insertPageBreak","toggleBold","toggleTextAlignment","isReplace","toggleItalic","increaseIndent","openBlank","enableEditorHistory","onBackSpace","delete","onEnter","handleControlShiftLeftKey","handleLeftKey","handleControlShiftRightKey","handleShiftLeftKey","animationTimer","insertText","sFormat","getResultContentControlText","updateXmlMappedContentControl","startInlineEle","getContentControl","updateCustomXml","itemId","xmlDoc","DOMParser","parseFromString","lastText","htmlCollec","nodeValue","attributes","getNamedItem","xmlString","XMLSerializer","serializeToString","insertTextInternal","pasteContents","getFieldResultText","selectFieldInternal","isRemoved","commentStarts","checkAndRemoveComments","isSkipLayouting","skipFormatRetrieval","search","isRepalceTracking","isSpecialChars","matchedRevisions","getMatchedRevisionsToCombine","mapMatchedRevisions","checkToCombineRevisionWithPrevPara","insertRevision","removeErrorsFromCollection","inlineLangId","isTextContainsSpecChar","canInsertRevision","insertTextInline","isRevisionCombined","prevRevisionCount","checkToMapRevisionWithInlineText","checkToMapRevisionWithNextNode","checkToCombineRevisionsinBlocks","checkToMapRevisionWithPreviousNode","splittedSpan","updateRevisionForSpittedTextElement","copyElementRevision","updateElementInFieldRevision","updateSplittedElementError","checkAndConvertList","checkAndConvertToHyperlink","updateHistoryForComments","revisionElement","elementToInclude","isEnd","resultantText","previousValidNodeForTracking","checkWidget","combineRevisionWithNextPara","combineRevisionWithPrevPara","inlinePara","nextElementPara","nextValidNodeForTracking","prevElement","newElement","updateLastElementRevision","applyMatchedRevisionInorder","combineElementRevisions","elementToCombine","prevRevision","isBegin","revisionsMatched","elementToCopy","isSplitElementMerged","isRevisionAlreadyIn","isRevisionMatched","decideInlineForTrackChanges","matched","isMatched","insertSectionBreak","combineRevisionWithBlocks","prevPara","lastLine_1","lastElement_1","compareElementRevision","clearAndUpdateRevisons","nextPara","firstEleRevision","checkToCombineRevisionWithNextPara","mappedRevisions","removeRevision","revisionToRemove","clearElementRevision","spittedRange","currentDate","updateRevisionCollection","splitRevisionByElement","splittedRange","elementRevision","compare","insertRevisionAtEnd","insertRevisionAtPosition","prevRevisionLength","insertRevisionAtBegining","splitRevisionForSpittedElement","spittedElement","combineElementRevision","currentElementRevisions","revisionToCombine","rangeLength","combineRevisions","endposition","getLineInfo","editPostion","skipParaMark","elemets","currentRange","firstCell","updateEditPosition","selectFirstBlock","newSectionFormat","splitTable","splitParagraphInternal","splitBodyWidget","updateSectionIndex","insertRemoveHeaderFooter","updateBlockIndex","startBodyWidget","increaseIndex","isTab","convertList","isLeadingZero","tabValue","previousText","previousList","checkNumberFormat","checkLeadingZero","checkNextLevelAutoList","leadingZeroText","autoConvertList","listNumber","prevListText","currentListText","inputString","prevListNumber","getNumber","currentListNumber","roman","conversion","M","D","C","L","V","I","arr","num","newList","newAbstractList","isZero","getPageFromBlockWidget","skipReLayout","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","spanIndex","getPreviousTextInline","getNextTextInline","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","getCharacterFormat","createHyperlinkElement","updateComplexWithoutHistory","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","begin","insertHyperlinkfield","removeCollection","unlinkWholeRangeInRevision","fieldIndex","formFieldIndex","insertHyperlink","screenTip","insertHyperlinkInternalInternal","fieldStartPosition","selects","isTrackEnabled","insertHyperlinkByFormat","insertElement","insertElementInCurrentLine","checkIsNotRedoing","checkEndPosition","fieldResult","newFieldBegin","insertInlineInternal","insertClonedFieldResult","fieldParagraph","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","curParagraph","fieldStartString","fieldSeparatorPosition","fieldSeparatorString","pasteWindow","currentPasteOptions","defaultPasteOption","pasteElement","htmlContent","rtfContent","clipbordData","clipboardData","getData","pasteAjax","doc","currentPasteAction","applyPasteOptions","kind","pasteImage","getAsFile","files","imgFile","fileReader","FileReader","onload","onPasteImage","readAsDataURL","insertImage","proxy","pasteRequestHandler","systemClipboard","pasteFormattedContent","onPasteFailure","sfdt","document_1","getUniqueListOrAbstractListId","sortedList","sortedAbsList","checkSameLevelFormat","lstLevelNo","listLevelPatternInCollection","isEqualParagraphFormat","dest","getBlocksToUpdate","blcks","obj","updateListIdForBlocks","idToUpdate","update","existingList","isUpdated","toUpdate","updatePasteContent","pasteContent","sectionId","uniqueListId","sortedPasteList","uniqueAbsLstId","sortedPasteAbsList","out_k_1","this_1","lstDup","getBlocks","currentInline","insertParaFormat","copySelectionParagraphFormat","words","addCustomStyles","commentsCollection","commentEnds","parseComments","parseAbstractList","parseList","revisionCollection","sfdtExportModule","copyWithTrackChange","revisionCheck","revisionId","j_1","revision_1","parseRevisions","parseBody","lastParagraphMarkCopied","parseSectionFormat","applyMergeFormat","applyFormatInternal","isPasteOptionTextOnly","applyTablePasteOptions","pasteAsNestedTable","pasteAsNewRow","pasteAsNewColumn","pasteOverwriteCell","selectedTextLength","contentlength","isTablePaste","commentStartToInsert","defaultPaste","removeSelectedContentInternal","getOwnerCell","cloneTable","numberOfRows","numberOfColumns","newCell","addRows","tableUpdate","createColumn","rowspannedCollection","insertSpannedCells","tableReLayout","dataTable","pasteCell","clonedTable","rowIndexPaste","newCells","row2","rowSpanIndex","cloneCells","rowWidgetLength","cellIndexSE","rowsToAdd","numberOfColumns_1","cellIterate","getRowCountToInsert","getColumnCountToInsert","pasteRowCount","rowCell","isCellInserted","rowInsertion","isPastingContent","pasteCopiedData","isSectionEmpty","generateTableRevision","insertTableRows","insertBlockInternal","moveRows","constructRevisionsForTable","canConstructRevision","constructRevisionsForBlock","linIndex","isParaMarkIncluded","skipElement","endElement","moveInlines","checkInsertPosition","handleCut","removedCommentStart","deleteSelectedContent","isValidNodeForTracking","updateFootnoteCollection","updateEndnoteCollection","curInline","insertElementInternal","isTrackingEnabled","prevRevisionsCount","updateRevisionForElement","isFirstItem","isBeginning","isMiddle","relayout","skipTracking","incrementCommentIndex","revisionToInclude","startPara","insertImageInternal","isUiInteracted","insertPicture","createTable","removedComment","startLine","getLastParagraphInLastCell","above","rowPlacement","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","fitType","tableAdv","getTable","editorHistoryModule","isCellIncluded","isRowSpanned","clonedRowIndex","columnPlacement","copyCellFormats","newCellPara","nextCellpara","nextCellTextBox","isNewRow","textElementBox","getOwnerRow","isStart","endRow","getOwnerTable","endTable","alertDialog","confirmCellMerge","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","firstParagraph","getCellLeft","endCellLeft","endCellRight","cellInfo","updateSelectedCellsInTable","rowStartIndex","cellStart","mergeBorders","newBlock","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","startLeft","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","cellLeft","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertAfter","insertIndex_1","endLine","isMoved","moveContent","shapeIndex","updateRevisionForMovedContent","isLayoutChanged","previousBlockToLayout","shiftFootnotePageContent","updateHeaderFooterWidgetToPage","shiftPageContent","isEvenPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","isContentControl","removeFieldTable","removeField","checkAndShiftFromBottom","isEven","isNotEmpty","splittedSection","allowFormattingInFormFields","formattingExceptions","contentControlStart","getPosition","cCstart","cCend","checkPlainTextContentControl","startInline","endInlineEle","applyCharFormatValue","applyCharacterFormatForListText","applyListCharacterFormatByValue","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","toggleSubscript","toggleSuperscript","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","updateParagraphFormatInternal","currentUnderline","script","completeStylesString","intializeDefaultStyles","existingStyles","styleNames_1","name_2","styleString","createStyleIn","getUniqueStyleName","uniqueName","getUniqueName","matchArray","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","endLineWidget","inlineLength","applyCharFormatInline","getCurrentSelectionValue","changeCase","removedTextNodes","isRevert","changeTextCase","changeCaseParagraph","changeCaseParaFormatInCell","startOffsetVal","len","endOffsetVal","textCount","endElementBox","childIndex","isIncreaseIteration","changeCaseInline","changeCaseNextBlock","changeCaseInlineInternal","addRemovedTextNodes","textToChange","getChangeCaseText","preText","getNextBlockForChangeCase","changeCaseForTable","oldText","indexToStart","changeCaseForSelectedCell","containsRow","changeCaseForSelectedPara","changeCaseForSelTable","cellContainer","changeCaseParaForCellInternal","changeCaseParaForRow","changeCaseParaForTableCell","wCell","cellStartValue","cellEndValue","cellEndLeft","cellEndRight","childBlock","changeCaseParaFormatTableInternal","wRow","toggleAllCaps","getSelectedCharacterFormat","toggleStrikethrough","updateFontSize","fontsizeCollection","formatInline","indexCountForRevision","updateRevisionForFormattedContent","indexCount","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","copyInlineCharacterFormat","destFormat","onImageFormat","positionImageResizer","applyParagraphBorders","bordersType","isFirstParaForList","updateListLevelIndent","updateListLevel","getIndentIncrementValue","increaseLevel","nextListLevel","onApplyListInternal","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","isBidiList","applyParaFormatSelectedContent","applyCharacterStyle","applyParaFormat","applyParaFormatInCell","copyParagraphFormat","applyBorder","oldFormat","newFormat","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","levelNum","listType","checkNumberArabic","levelPattern","restartListAt","changeRestartNumbering","getNextParagraphForFormatting","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","applyParagraphFormatTableInternal","startValue","endValue","applyParaFormatTable","startPageIndex","endPageIndex","startSectionIndex","endSectionIndex","applyPropertyValueForSection","onApplyTableFormat","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","onApplyTableRowFormat","getRowAction","applyRowPropertyValue","onApplyTableCellFormat","getTableCellAction","applyCellPropertyValue","restartIndexForEndnotes","restartIndexForFootnotes","startInfo","endInfo","combineSection","nextSection","combineSectionChild","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","isMultipleSectionSelected","checkMultipleSectionSelected","removeSelectedContent","getBodyWidgetIndex","hierarchicalPosition","editAction","deletePara","deleteSection","deleteBlock","deleteTableCell","selectTable","considerTrackChanges","getParagraphForSelection","trackRowDeletion","onDeleteColumnConfirmed","selectColumn","deleteCells","selectRow","removeRow","canremoveRow","retrieveRevisionInOder","removeRevisionsInRow","trackInnerTable","returnDeleteRevision","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isEndInAdjacentTable","paraEnd","paraReplace","isStartParagraph","removeInlines","revisionLength","removeRevisionForBlock","deleteParagraphMark","insertParagraphPaste","removedNodeLength","checkAndInsertBlock","paraInfo","combineSectionInternal","currentSection","lastBlockIndex","paragraphAdv","linewid","removeFootnote","removeCommentsInBlock","removeCommentInPara","removeCommentsInline","skipElementRemoval","isSkipTracking","isPasteRevertAction","tableDelete","removePrevParaMarkRevision","isFromDelete","nonEmptyEndPara","toCheckForTrack","removeEndnote","removeAutoShape","endnote","deleteTableBlock","cellAdv","deletePreviousBlock","deleteCellsInTable","isCellCleared","deleteCell","deleteContainer","endCells","isDeleteCells","startColumnIndex","endColumnIndex","startRowIndex","endRowIndex","isRowSelected","isWholeRowSelected","onConfirmedTableCellsDeletion","tiltle","canRemoveRow","onConfirmedCellDeletion","rowToRemove","prevRenderedRow","setActionInternal","cell_1","j_2","removeRevisionForRow","addRemovedRevisionInfo","rowRevision","removeRevisionForInnerTable","addToRevisionInfo","unlinkRangeByRevision","copyChildToClipboard","checkClearCells","paragrapghBookmarkCollection","existingBookmark","bookmarkCol","deleteContent","splitEndRow","canHandleDeletion","deleteCommentInSelection","curentBaseHistoryInfo","startText","fieldInline","clearFieldElementRevisions","handleDeleteTracking","deleteCommentWidgetInline","removePrevRevisions","destination","cloneLevelOverride","updateListParagraphsInBlock","startListLevel","initialListLevel","isSameList","tempList","abstractListAdv","listName","bulletCharacters","isInsertPageBreak","SelectionCharacterFormat","fireRequestNavigate","breakParagraph","pageBreak","isRetrieveFormatting","checkParaMarkMatchedWithElement","insertParaRevision","isPreviousRevision","checkToMatchEmptyParaMark","applyRevisionForParaMark","splitRevision","isCombined","prevRevCount","checkToMatchEmptyParaMarkBack","lineWid","textWid","updateIndex","currentCellIndex","increment","getSelectedComments","commentEndInfo","commentStartInfo","startBlockInfo","endBlockInfo","commentToDelete","commentEndMark","commentStartBlockInfo","getParagraphInfoInternal","commentEndBlockInfo","updateStartPosition","startLineInfo","getLineInfoBasedOnParagraph","endLineInfo","skipBackSpace","insertSpaceInFormField","bookMark","bookMarkStart","bookMarkEnd","isBackSpace","deleteSelectedContentInternal","removeWholeElement","isElementInSelection","isCommentDelete","currentLineWidget","initComplextHistory","previousOffset","selectTextElementStartOfField","indexcolle","setPositionForHistory","removeOffset","removeAtOffset","childLength","removeCharacter","isRearrange","isBreak","removeCharacterInLine","removedCount","removeRevisionsInformation","removeElement","removedNode","updateEndRevisionIndex","handleDeletionForInsertRevision","revision_2","index_2","updateCursorForInsertRevision","checkToCombineRevisionsInSides","startOff","lastEle","endOff","toCombineOrInsertRevision","handleDeleteBySplitting","prevHistoryInfo","elementToEnsure","spittedSpan","deleteEditElement","removeContentControlMark","nextRenderedInline","editEnd","bookMarkBegin","paraEndOffset","singleDeleteInternal","handleParaMark","updateEditPositionOnMerge","handleDeleteParaMark","prevLastLineIndex","canRemoveParaMark","deleteRevision","retrieveRevisionByType","insertDeleteParaMarkRevision","revisionToRetrieve","combineRevisionOnDeleteParaMark","base64String","imageElementBox","generateFallBackImage","insertPictureInternal","draw","fitImageToPage","copyValues","changeMarginValue","onPaperSize","isFindingListParagraph","listID","getNextBlockForList","listSearchResultInfo","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","updateListNumber","listWholeWidth","prevWidth","lineInfo","skipSelectionChange","getParagraph","createFields","fieldtext","bookmarkEnd","insertElements","bookmarkName","getSelectionInfo","endElements","startElements","insertElementsInternal","getBodyWidget","getBlockInternal","getBlockByIndex","blockObj","isInsertPosition","applyBorders","clearAllBorderValues","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","borderType","isLastSelectedRow","isLastRightCell","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","sourceBorders","sourceShading","sourceBorder","isShading","applyTableFormat","handleTableFormat","shiftNextItem","rowStartPos","rowEndPos","handleRowFormat","onParaFormat","cellStartPosition","cellEndPosition","getSelectedCellInColumn","rowEndIndex","handleCellFormat","tocField","getTocFieldInternal","validateTocSettings","getTocSettings","swtiches","swtch","decodeTSwitch","tSwitch","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","createTocFieldElement","isSkipRevision","tocPara","tocLine","emptyParaAppended","headingStyleName","tocStyleName","insertTocHyperlink","pageField","insertTocPageNumber","bookMarkname","isRightAlign","pageRef","startElement","generateBookmarkName","formatString","onCellContentAlignment","selectTableCell","skipEditRangeRetrieval","addEditElement","insertEditRangeInsideTable","addRestrictEditingForSelectedArea","cellSelectionStartIndex","cellSelectionEndIndex","newEndElement","startCell_1","addEditCollectionToDocument","insertFormField","insertFormFieldInternal","getFormFieldData","getBookmarkName","getFormFieldCode","setFormField","formData","bookmarkStart","textFormat","currentOffset","getDefaultText","defaultText","updateFormFieldInternal","formattedText","updateFormFieldResult","checkBookmarkAvailability","available","applyFormTextFormat","isInlineFormFillProtectedMode","previousStartIndex","previousEndIndex","isModifyingSelectionInternally","getFirstParagraphBlock","isFormatUpdated","splittedName","initials","handleRightKey","footPara","updateFootNoteIndex","footText","followText","updateEndNoteIndex","endNoteCollec","footNoteCollec","ImageResizer","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","selectedImageWidget","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","currentImageElementBox","imageResizerDivElement","resizeDiv","initResizeMarks","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","showImageResizer","hideImageResizer","initResizeContainerDiv","opacity","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","points","currentElementId","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","imageHeight","widgetHeight","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","touchEvent","imageResizingPoints","bottomMiddle","bottomRight","bottomLeft","topMiddle","topRight","topLeft","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","selectedElements","updateHistoryForImageResizer","imageFormat","heightIn","CollaborativeEditing","version","updateAction","isArray","documentData","transFormLockRegion","lockRegion","selectionInfo","updateRegion","previousLockInfo","sectionDiff","blockDiff","getHierarchicalIndexByPosition","tranformPosition","firstPara","lastPara","getLastParagraphBlock","selectionInfo_1","roomName","startInfo_1","endInfo_1","ajax","userNames","isSelectionInEditableRange","getPreviousLockedRegion","saveTimer","sfdtContent","serializeEditableRegion","saveObject","saveContent","timeOut","saveTimeout","saveContentInternal","isPartialExport","previousEditRange","lockObject","lockRegionInternal","updateLockInfo","setEditableRegion","getParentBlock","lockStart","isInEditRange","startParagrahInfo","endParagrahInfo","removedBlock","removeDuplicateCollection","lastBockIndex","lastInsertIndex","containerWidget_1","editRanges_1","positionInfo","tranformSelection","tranformHistoryPosition","revisionStart","getRevisionTextPosition","transformHistory","transformBaseHistoryInfo","removeComment","incrementCount","pullAction","getPendingActions","TextSearch","isFooter","find","findOption","findNext","stringToRegex","textSearchResults","clearResults","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","getElementInfo","includeNextLine","inlines","stringBuilder","spans","elementBoxes","elementsWithOffset","fullText","isFirstMatch","addResult","spanKeys","getTextPosition","hierachicalPosition","nextParagraphWidget","findInline","getNextParagraph","findInlineText","inlineEle","matchObject","SearchWidgetInfo","leftInternal","widthInternal","TextSearchResult","getTextInternal","TextSearchResults","textSearchResult","SearchResults","navigate","getTextSearchResultsOffset","searchIndex","textToReplace","replaceInternal","replaceAll","replaceAllInternal","highlight","clearSearchHighlight","Search","isHandledOddPageHeader","isHandledEvenPageHeader","isHandledOddPageFooter","isHandledEvenPageFooter","searchResultsInternal","findOptions","replaceText","linewidget","searchResults","highlightResult","highlightSearchResult","getStartLineWidget","getEndLineWidget","elementCollection","getElementsForward","elementIsRTL","createHighlightBorder","highlightSearchResultParaWidget","findHighLight","addSearchHighlightBorder","highlighters","searchHighlight","getElementsBackward","addSearchResultItems","findResultsList","addFindResultView","addFindResultViewForSearch","suffixtext","lastIndex","getRenderedInline","boxObj","boxIndex","shiftIndex","endInlineObj","headerFooterString","OptionsPane","matchCase","wholeWord","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","focusedIndex","focusedElement","isOptionsPane","replacePaneText","findPaneText","matchDivReplaceText","tabInstance","searchOptionChange","clearSearchResultItems","inputText","searchInput","selectionIndex","navigateSearchResult","messageDiv","resultContainer","resultsListBlock","clearFocusElement","onEnableDisableReplaceButton","replaceButton","replaceAllButton","onKeyDownOnOptionPane","focusIndex","HTMLInputElement","HTMLLIElement","hideMatchDiv","onReplaceButtonClick","findText","replaceWith","selectionText","onReplaceAllButtonClick","searchIconClickInternal","inputElement","searchIcon","matchDiv","occurrenceDiv","patterns","getMessageDivHeight","resultsContainerHeight","findTab","navigateNextResultButtonClick","nextResult","navigateToNextResult","navigatePreviousResultButtonClick","previousResult","navigateToPreviousResult","onKeyDown","findDiv","resultListBlockClick","currentlist","list_1","currentelement","initOptionsPane","findTabButton","replaceTabButton","selectedTabItem","findTabContentDiv","searchTextBoxContainer","matchInput","matchChange","wholeWordLabel","wholeInput","wholeWordsChange","replaceTabContentDiv","createReplacePane","resultDiv","onWireEvents","replaceDiv","replaceButtonDivTextAlign","replaceButtonMargin","replaceButtonDiv","emptyDiv6","contentParent","previousTab","nextTab","firstElementChild","onFindPane","onReplacePane","currentIndexValue","text_1","searchElements","optionsPaneContainerStyle","resultListBox","message","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","allCapsIn","notifyPropertyChanged","fontFamilyIn","isCleared","propertyValue","combineFormat","selectionCharacterFormat","SelectionBorder","colorIn","lineStyleIn","lineWidthIn","shadowIn","spaceIn","SelectionBorders","SelectionParagraphFormat","spaceAfterAutoIn","spaceBeforeAutoIn","textAlignmentIn","firstLineIndentIn","lineSpacingTypeIn","bidiIn","keepWithNextIn","keepLinesTogetherIn","contextualSpacingIn","listLevelNumberIn","bordersIn","validateLineSpacing","listTextElement","getListTextElementBox","value_1","copyToFormat","history_1","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","pageStartingNumberIn","restartPageNumberingIn","footerDistanceIn","endnoteNumberFormatIn","footNoteNumberFormatIn","initialFootNoteNumberIn","initialEndNoteNumberIn","restartIndexForFootnotesIn","restartIndexForEndnotesIn","getPropertyvalue","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","preferredWidthTypeIn","background","SelectionCellFormat","verticalAlignmentIn","clearCellFormat","SelectionRowFormat","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","clearRowFormat","SelectionImageFormat","updateImageFormat","copyImageFormat","clearImageFormat","HtmlExport","prevListLevel","isOrdered","fieldCheck","writeHtml","serializeSection","string","serializeParagraph","closeList","serializeTable","blockStyle","isPreviousList","tagAttributes","getHtmlList","serializeParagraphStyle","createAttributesTag","getStyleName","serializeInlines","endTag","levelNumer","serializeContentInlines","serializeImageContainer","tagAttributes_1","serializeInlineStyle","serializeSpan","inlineStyle","spanClass","decodeHtmlNames","imageStyle","imageSource","serializeCell","cellHtml","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","convertBorderLineStyle","WCell","serializeBorderStyle","borderPosition","inlineFormat","serializeTextDecoration","tagValue","localProperties","sb","createTag","tableStyle","createRowEndTag","htmlText","Selection","documentEditor","contextTypeInternal","isMoveDownOrMoveUp","isHighlightEditRegionIn","isHighlightFormFields","isHightlightEditRegionInternal","isCurrentUser","isHighlightNext","isWebLayout","isSelectList","pasteOptions","characterFormatIn","paragraphFormatIn","rowFormatIn","imageFormatInternal","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","getContainerWidget","getSelBookmarks","writeSfdt","getFieldInfo","bookmarkCln","bookmrkStart","bookmrkEnd","bmStartPos","bmEndPos","bmEndPosCell","getCellInTable","checkLayout","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","enableSelection","selectTableInternal","selectTableRow","selectColumnInternal","selectCell","selectionSettings","startOrEnd","pageCoordinates","extend","selectByHierarchicalIndex","fieldStart","isKeyBoardEvent","isReplacingFormResult","triggerFormFillEvent","linkType","localReference","navigateBookmark","hyperLinkField","linkText","copyToClipboard","isHideSelection","bodyWgt","headerFooterHt","showResizerForShape","highlightSelectedContent","isElementBoxHighlight","shapeElement","startTextPos","endTextPos","selectionWidget","selectionWidgetCollection","addEditRegionHighlight","addFormFieldHighlight","getWrapPosition","selectionWidgetInfos","splitSelectionHighlightPosition","getPageTop","clipSelection","clipInfo","editRegionHighlight","userColor","formFieldHighlight","createHighlightBorderInsideTable","isVisiblePage","canvasContext","widgetInfoCollection","selectedWidgetInfo","heightInfo","descent","selectedWidgetInfoCollection","removeSelectionHighlight","currentParaWidget","selectedWidgetCollection","pageRect","selectCurrentWordRange","selectLine","moveToLineStart","handleShiftEndKey","moveToDocumentStart","handleControlHomeKey","moveToDocumentEnd","handleControlEndKey","moveToParagraphStart","moveToParagraphEnd","moveToNextCharacter","moveToPreviousCharacter","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","getFormFieldInFormFillMode","selectPrevNextFormField","nextFootnote","footNoteElement","nextFootnoteElement","referenceElement","previousFootnote","nextEndnote","endNoteElement","endnoteElement","previousEndnote","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","firstrow","firstcell","selectionLength","isMovePrevious","cellEnd","lastRow","lastCell","moveToLineEnd","isMouseLeave","lastPage","documentEnd","handleControlLeftKey","extendToWordStartInternal","handleControlRightKey","extendToWordEndInternal","handleControlDownKey","handleControlUpKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","isCurrentParaBidi","handleControlShiftUpKey","handleControlShiftDownKey","handleUpKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","isNavigateInCell","isShiftTab","selectPreviousCell","selectNextCell","currentFormField","isKeyBoardNavigation","previousFieldData","currentFieldData","previousField","currentField","selectTableCellInternal","clearMultiSelection","firstLineWidget","columnCells","startCellColumnCells","endCellColumnCells","selectAll","pageLength","endNotes","extendToWordStartEnd","extendToWordStart","extendToWordEnd","isNavigation","includeObject","startInlineObj","getTextInline","hfString","getParagraphInternal","getHeaderFooterWidget","getFootNoteWidget","getBodyWidgetInternal","lineOffset","endParagraphWidget","getFieldCodeInternal","getPreviousParagraph","getLastParagraphInFirstRow","elemPosition","cell1","cell2","startPage","isExistBeforeInline","isExistAfterInline","isRetrieve","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","getPreviousParagraphSelection","getFirstParagraphInLastRow","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","fieldValue","elementBoxObj","highlightNextBlock","hightLightNextParagraph","highlightCell","startLineObj","endLineObj","charFormat","paragraphMarkWidth","highlightParagraph","elementBoxCollection","highlightTable","getLineWidgetInternalInline","highlightCells","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","highlightCellWidget","sourceCell","getLevelFormatNumber","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","getNextLineWidget","measureObj","firstInline","getEndPosition","getRenderedField","elementObj","getCaretHeight","isItalic","getFieldCharacterHeight","heightElement","maxLineHeight","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","floatWidget","floatWidgetWidth","getLineWidgetTableWidget","footChild","getLineWidgetParaWidget","lineTotalHeight","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","isImageSelectedObj","includeParagraphMark","elementValues","getFirstElement","selectParaMark","charIndex","curIndex","getTextLength","textMetrics","isLineEnd","renderedElement","renderedChild","getIndexInInline","renderedWidget","widgetInternal","childLen","fireSelectionChange","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","setCurrentContextType","getPreviousContextType","isElement","getContextElement","getNextContextType","contextIsinImage","contextIsinTable","getCurrentRevision","isInHeader","addItemRevisions","currentItem","eleEndPosition","nextOffsetElement","processLineRevisions","getselectedRevisionElements","acceptReject","toAccept","getSelectedLineRevisions","addRevisionsCollec","eleStartPosition","revisCollec","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","startParaSection","endParaSection","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInBlock","getParagraphFormatInternalInCell","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","getCharacterFormatInternal","setCharacterFormat","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","isSelected","top_4","widgetIn","copyAddress","isCrossRef","toolTipElement","toolTipText","getScreenTipText","showToolTip","toolTipField","toolTipObject","ln","positions","toolTipInfo","createPasteElement","pasteDropDwn","splitButtonEle","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","lineStartInLeft","leftLength","checkFormField","isParagraph","paragraphIsInFieldResult","inlineIsInFieldResult","bodyIndex","checkFieldResult","getSelectedCellsInTable","startRowindex","isCut","getHtmlContent","documentContent","htmlWriter","removeAllRanges","createRange","selectNodeContents","addRange","copySuccess","execCommand","enableCursorOnReadOnly","caretLeft","caretStartLeft","caretEndLeft","page_1","setStart","collapse","top_5","skipUpdate","transform","caretHeightInfo","pagePoint","isCursorInHeaderRegion","shiftBlockOnHeaderFooterEnableDisable","moveToStart","bookmrkElmnt","getTocField","isTocStyle","commentNavigateInternal","navigatePreviousRevision","navigateNextRevision","curentPosition","firstElementTable","lastElementTable","secondRowWidget","everyOneArea","unHighlightEditRegion","highlightEditRegionInternal","highlightEditRegions","nextPosition","firstPosition","toggleEditingRegionHighlight","isSelectionInsideEditRange","editRangeRow","checkFormat","cCStartInsideSelction","cCEndInsideSelction","bookmarkId","tablerow","tc","tablecell","paragr","lines","SpellChecker","langIDInternal","enableSpellCheckInternal","uniqueSpelledWords","spellSuggestionInternal","uniqueKey","removeUnderlineInternal","uniqueWordsCountInternal","performOptimizedCheck","uniqueWordsCollection","createGuid","exactText_1","handleReplace","retrieveExactElementInfo","exactText","startPattern","handleIgnoreOnce","endPattern","contextElement","contextItem","isRemove","allsuggestions","spellCheckSuggestion","constructInlineMenu","spellSuggestion","hasError","erroElements","updateStatusForGlobalErrors","handleErrorCollection","getCombinedElement","errorInElement","errors","inlineSuggestion","errorElement","addErrorCollection","elementToCompare","errorElements","compareErrorTextElement","compareTextElement","addCorrectWordCollection","isCorrectWord","copyElement","isSamePage","HasSpellingError","textToCombine","isNext","isPrevious","canCombine","checkPrevious","checkNext","combinedElements","prevText","prevCombined","isPrevField","lookThroughPreviousLine","nextText","canCombine_1","lookThroughNextLine","checkCombinedElementsBeIgnored","handleCombinedElements","currentText_1","checkArrayHasSameElement","elementToCheck","handleMatchedResults","Text","HasSpellError","wavyLineY","word","checkSpelling","checkSuggestion","addWord","isByPage","spellchecker","Promise","httpRequest_1","service_1","spellCheck","setCustomHeaders","spellCheckData","LanguageID","TexttoCheck","CheckSpelling","CheckSuggestion","AddWord","httpRequest","errorWords","updateErrorElementTextBox","textLineInfo","matchedText","wordLength","beginingwidth","errorCount","sfdtExport","Initialize","writePage","textExportModule","textExport","pageContent","setDocument","writeInternal","spelledWords","localStorage","uniqueWordsCount","checkForUniqueWords","setItem","spellData","clearCache","dateTime","randNo","wordToCheck","uniqueWords","Optimized","optimizedHeightCollection","getkeyFromCharFormat","getFontInfo","baseLineFactor","offsetTop","heightFactor","HeightFactor","BaselineFactor","fontInfo","fontHeight","fontSizeInfo","Regular","textHeight","tempDiv","textTopVal","SfdtReader","isPageBreakInsideTable","referedRevisions","isParseHeader","editableRanges","convertJsonToDocument","json","parseDocumentProtection","trackChanges","dontUseHTMLParagraphAutoSpacing","documentSettings","parseStyles","parseSections","customXml","parseCustomXml","formFieldShading","parseFootnotes","parseEndtnotes","generalizeRevisions","tempRevisionCollection","tempRevisons","xmlData","itemID","enforcement","revisionData","parseRevision","checkAndApplyRevision","revisionIds","commentData","parseComment","parseCommentText","wStyle","basedStyle","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","listCollection","parseLevelOverride","parseHeaderFooter","parseTextBody","hfs","oddHeader","oddFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","isSectionBreak","hasValidElmts","parseParagraph","parseTable","blockStartContentControl","blockEndContentControl","parseContentControlProperties","blockWidget","parseTableFormat","parseTablePositioning","parseRowFormat","parseRowGridValues","parseCellFormat","cellStartContentControl","cellEndContentControl","rowStartContentControl","rowEndContentControl","wContentControlProperties","contentControlListItem","writeInlineFormat","trackChange","chartGapWidth","chartOverlap","parseChartTitleArea","parseChartArea","plotArea","parseChartLegend","parseChartData","parseChartCategoryAxis","parseChartDataTable","ChartComponent","chartRender","isValidImage","validateImageUrl","getimageheight","getimagewidth","textInput","fieldTextElement","containsFieldBegin","isAdd","isConsider","permEnd","permStart","parseEditableRangeStart","commentID","commentCharacterType","commentStartElement","commentEndElement","inlineStartContentControl","inlineEndContentControl","addEditRangeCollection","newEditStartCollection","titleArea","chartfontName","chartFontSize","parseChartDataFormat","parseChartLayout","rgb","chartLayout","chartLayoutLeft","chartLayoutTop","legend","chartLegendPostion","categoryAxis","primaryAxis","categoryAxisType","categoryNumberFormat","axisFontSize","axisFontName","majorGridLines","minorGridLines","majorTick","minorTick","tickPosition","tickLabelPosition","categoryAxisTitle","showSeriesKeys","hasHorzBorder","hasVertBorder","hasBorders","chartForeColor","xData","xName","yData","yAxisValue","bubbleSize","parseChartSeries","isPieType","seriesName","firstSliceAngle","doughnutHoleSize","parseChartDataLabels","dataLabel","markerStyle","markerColor","markerSize","errorType","errorEndStyle","parseChartTrendLines","parseChartSeriesDataPoints","dataPoints","labelPosition","isLegendKey","isBubbleSize","isCategoryName","isSeriesName","isValue","isPercentage","isLeaderLines","chartFormat","trendLineName","trendLineType","forwardValue","backwardValue","interceptValue","isDisplayEquation","isDisplayRSquared","parseBorders","parseShading","isSamePaddingAsTable","parseCellMargin","destBorder","parseBorder","destShading","texture","parseListFormat","parseTabStop","wTabs","imagestr","WordExport","customXMLItemsPath","customXMLItemsPropspath","itemPropsPath","documentPath","stylePath","chartPath","numberingPath","settingsPath","headerPath","footerPath","imagePath","footnotesPath","endnotesPath","appPath","corePath","contentTypesPath","defaultEmbeddingPath","commentsPath","commentsExtendedPath","generalRelationPath","wordRelationPath","customXMLRelPath","excelRelationPath","footnotesRelationPath","endnotesRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","settingsContentType","commentsContentType","commentsExContentType","endnoteContentType","footerContentType","footnoteContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","chartsContentType","tableStyleContentType","chartColorStyleContentType","commentsRelType","commentsExRelType","settingsRelType","endnoteRelType","footerRelType","footnoteRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","chartRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","chartColorStyleRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","svgNamespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cxNamespace","c15Namespace","c7Namespace","csNamespace","spreadSheetNamespace","spreadSheet9","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","dsNamespace","excelFiles","lastSection","mRelationShipID","cRelationShipId","eRelationShipId","efRelationShipId","mDocPrID","chartCount","seriesCount","chartStringCount","mDifferentFirstPage","mBookmarks","mComments","customXMLProps","paraID","commentParaID","commentParaIDInfo","isInsideComment","currentCommentId","trackChangesId","prevRevisionIds","isRevisionContinuous","mDocumentImages","mSvgImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterSvgImages","mDocumentCharts","mHeaderFooterColl","mFootEndnotesColl","fileName","serialize","serializeExcelFiles","all","saveInternal","mArchive","saveAsBlob","blob","Blob","excelPromise","zipArchiveItem","ZipArchiveItem","saveExcel","xlsxPath","mArchiveExcel","clearDocument","mCustomXML","ZipArchive","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeComments","serializeCommentsExtended","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","contenttype","serializeSettingsRelation","serializeHeaderFooters","serializeFootnotes","serializeEndnotes","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","mStyles","blockOwner","writer","XmlWriter","writeStartElement","writeCommonAttributeStrings","serializeDocumentBody","writeEndElement","archiveItem","buffer","writeAttributeString","writeCustom","writeDup","last","serializeBodyItems","serializeSectionProperties","serializeCommentCommonAttribute","serializeCommentInternal","retrieveCommentText","serializeBodyItem","multiText","serializeCommentsExInternal","syncParaID","serializeHFReference","serializeSectionType","serializePageSetup","serializeColumns","serializeFootNotesPr","serializeEndNotesPr","getFootNoteNumberFormat","getFootNoteNumberRestart","patternType","numberRestart","getPageNumberFormat","pageSetup","serializePageSize","serializePageMargins","serializePageNumberType","roundToTwoDecimal","marginValue","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeContentControl","contentControlItem","serializeContentProperties","contentProperties","picture","toUnicode","dropDownLists","serializeContentControlList","comboList","serializeContentControlDate","serializeContentParagraph","sec","serializeParagraphItems","serializeRevisionStart","retrieveRevision","serializeTrackChanges","paraItems","isContinueOverride","isBdo","serializeBiDirectionalOverride","serializeFieldCharacter","serializePicture","currentParargaph","serializeShape","serializeBookMark","serializeEditRange","serializeChart","serializeChartStructure","serializeComment","serializeEFReference","serializeTextRange","serializeRevisionEnd","efId","ef","getEFNextRelationShipID","addFootnotesEndnotes","efType","efColl","endnotesFootnotes","serializeEndnotesFootnote","serializeInlineEndnotes","serializeInlineFootnotes","endNoteFootnote","writeEFCommonAttributes","serializeCommentItems","editElement","getBookmarkId","serializeDrawing","serializeInlineCharts","serializeInlinePictureAndShape","serializeWrappingPictureAndShape","serializePictureAndShapeDistance","behindText","layoutcell","horPos","writeString","horAlig","vertPos","verAlig","serializeShapeDrawingGraphics","serializeShapeWrapStyle","serializeDrawingGraphics","writeDefaultDistAttribute","serializeDrawingGraphicsChart","updatechartId","getNextChartName","serializeChartXML","serializeChartColors","serializeChartExcelData","serializeChartRelations","serializeChartData","colorPath","serializeChartColor","isScatterType","serializeWorkBook","serializeSharedString","serializeExcelContentTypes","serializeExcelData","serializeExcelStyles","serializeExcelRelation","serializeExcelGeneralRelations","resetExcelRelationShipId","getNextExcelRelationShipID","serializeExcelSheet","chartSharedString","seriesLength","isString","category","uniqueCount","bubbleLength","isBubbleType","categoryLength","alphaNumeric","serializeDefaultContentType","serializeOverrideContentType","serializeRelationShip","getNextChartRelationShipID","serializeTextProperties","serializeChartPlotArea","serializeShapeProperties","serializationChartType","isPieTypeSerialization","barDiv","grouping","chartGrouping","valueSheet","parseChartDataPoint","parseChartSeriesColor","serializeChartErrorBar","serializeDefaultShapeProperties","categoryRef","cacheType","serializeChartCategory","serializeChartValue","isStackedPercentage","serializeCategoryAxis","serializeValueAxis","showHorzBorder","showVertBorder","showOutline","showKeys","serializeChartLegend","legendPosition","chartLegendPosition","serializeChartTitleFont","errorBarValueType","valueType","axisType","formatCode","serializeAxis","valueAxis","crossBetween","axisID","axis","chartTrendLineType","dispRSqr","dispEq","solidFill","serializeChartSolidFill","trendlineType","isLine","serializeDefaultLineProperties","chartTitleName","serializeFont","fontSizeCalc","isSeriesFill","symbolType","chartCategoryCount","serializeChartYValue","addChartRelation","documentCharts","chartCollection","relationId","lineWeight","wrapType","updateShapeId","documentImages","externalImages","serializeBlipExtensions","iscrop","t","isSvgData","tOwner","updateHFImageRels","addImageRelation","svgImages","imageCollection","isSvgImage","headerId","types","hfKeys","headerImages","headerFooterSvgImages","headerFooterImages","serializeTableFormat","serializeTableGrid","mHorizontalMerge","owner_1","serializeRowFormat","cellLength","prevColIndex","getMergeCellFormat","serializeTableCell","mergedCellFormat","xmlWriter","mergeStart","serializeCellWidth","serializeCellMargins","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","itemIndex","grid","serializeGridColumns","serializeTableRows","serializeCells","serializeRowMargins","pointWidth","serializeCellFormat","createCellForMerge","collKey","endProperties","spanCellFormat","serializeColumnSpan","checkMergeCell","ensureMerge","serializeCellMerge","serializeGridSpan","cf","isserialized","createMerge","gridValue","serializeTablePositioning","serializeTableWidth","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableMargins","serializeTableBorders","serializeTblLayout","serializeMargins","getTextureStyle","serializeParagraphBorders","formatPara","multipler","isParagraphBorder","serializeBorder","tagName","multiplier","sz","getBorderStyle","tableIndent","writeElementString","encodeURI","isDeleteText","retrieveDeleteRevision","localName","serializeListFormat","getOutlineLevelValue","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","outlineLvl","lvlNumber","serializeTab","getTabJustification","lf","txtAlignment","lineSpacingValue","serializeCustomXMLMapping","customXML","customXmlWriter","fileIndex","itemPath","createXMLItem","createXMLItemProps","customXMLRelation","xmlBlob","customitemPropsPath","serializeDefaultStyles","serializeDocumentStyles","serializeBoolProperty","getHighlightColor","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","cnt","serializeListLevel","lvl","serializeLevelOverrides","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","lvlIndex","fc","serializeDocumentProtectionSettings","editMode","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeSvgImageRelation","serializeHeaderFooterRelations","serializeChartDocumentRelations","serializeExternalLinkImages","charts","resetChartRelationShipId","chartColorPath","chartRelationPath","chartExcelPath","images","isSvg","mImage","imageInfo","imageBlob","encodedString","encode2","encode3","encode4","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeHFContentTypes","SerializeEFContentTypes","serializeHeaderFootersContentType","partName","serializeEFContentType","TextExport","curSectionIndex","inField","StreamWriter","streamWriter","sectionCount","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","writeText","writeHeaderFooter","writeLine","paragraphs","pCount","SfdtExport","writeInlineStyles","blockContent","startContent","multipleLineContent","nestedContent","selectedCommentsId","selectedRevisionId","nestedBlockContent","nestedBlockEnabled","contentInline","isBlockClosed","isExport","checkboxOrDropdown","updateEditRangeId","createSection","createParagraph","getNextBlock","writeBlock","endCell_1","writeStyles","writeLists","writeComments","writeRevisions","writeCustomXml","writeParagraphFormat","writeBodyWidget","writeHeaderFooters","blockContentControl","tableContentControl","writeParagraphs","secondElement","nestedBlocks","contentControlProperty","contentControlPropertie","tounCheckedState","toCheckedState","state","unCheckedState","secondChild","tableContentControls","writeLines","writeInlines","isformField","writeInlinesFootNote","writeInlinesContentControl","writeInline","inlineContentControl","nestedContentInline","inlineContentControls","nestedContentinline","nestedContentProperty","writeChart","editableRangeStart","writeShape","textFrameBlock","writeChartTitleArea","writeChartArea","writeChartCategory","createChartSeries","writeChartLegend","writeChartCategoryAxis","writeChartDataTable","writeChartDataFormat","writeChartLayout","primaryCategoryAxis","categories","createChartCategory","writeChartData","yCategory","createChartData","writeChartSeries","errorBarData","writeChartDataLabels","writeChartTrendLines","isContentStarted","started","ended","contentinline","isParaSelected","writeParagraphBorders","writeListFormat","writeTabs","listIdValue","writeRow","writeRowInternal","createRow","writeCell","createCell","writeTableFormat","writeTablePositioning","writeRowFormat","writeCellFormat","writeShading","wShading","writeBorder","wBorder","wBorders","writeBorders","wCellFormat","wRowFormat","writeRowRevisions","wrevisions","wTableFormat","seprators","endnoteSeparator","writeStyle","writeRevision","writeComment","xmlValue","commentInlines","ctext","writeList","writeAbstractList","wAbstractList","writeListLevel","wList","writeLevelOverrides","wlevel","wListLevel","NotesDialog","noteNumberFormat","footnotesFormat","reversetype","notesList","startValueTextBox","endnotesFormat","onInsertFootnoteClick","formats","renderFormat","notesDialog","idName","startatValue","footCount","endnoteListValue","listFocus","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","DocumentEditorSettings","Property","selectionColor","ChildProperty","DocumentSettings","DocumentEditor","enableHeaderFooterIn","disableHistoryIn","createdTriggered","Table","Row","Cell","Ok","Apply","Cancel","Size","Preferred Width","Points","Percent","Measure in","Alignment","Left","Center","Right","Justify","Indent from left","Borders and Shading","Options","Specify height","At least","Exactly","Row height is","Allow row to break across pages","Repeat as header row at the top of each page","Vertical alignment","Top","Bottom","Default cell margins","Default cell spacing","Allow spacing between cells","Cell margins","Same as the whole table","Borders","None","Style","Letter","1, 2, 3, ...","a, b, c, ...","A, B, C, ...","I, II, III, ...","i, ii, iii, ...","Tabloid","Legal","Statement","Executive","A3","A4","A5","B4","B5","Custom Size","Different odd and even","Different first page","From edge","Header","Footer","First Page Header","First Page Footer","Even Page Header","Even Page Footer","Odd Page Header","Odd Page Footer","Paper","Orientation","Landscape","Portrait","Show page numbers","Right align page numbers","Nothing","Tab leader","Show levels","Use hyperlinks instead of page numbers","Build table of contents from","Styles","Available styles","TOC level","Heading","Heading 1","Heading 2","Heading 3","Heading 4","Heading 5","Heading 6","List Paragraph","Normal","Outline levels","Table entry fields","Modify","Color","Setting","Box","All","Custom","Preview","Shading","Fill","Apply To","Table Properties","Cell Options","Table Options","Insert Table","Number of columns","Number of rows","Text to display","ScreenTip text","Address","Insert Hyperlink","Edit Hyperlink","Insert","General","Indentation","Before text","Special","First line","Hanging","After text","By","Before","Line Spacing","After","At","Multiple","Spacing","Define new Multilevel list","List level","Choose level to modify","Level","Number format","Number style for this level","Enter formatting for number","Start at","Restart list after","Position","Text indent at","Aligned at","Follow number with","Tab character","Space","Arabic","UpRoman","LowRoman","UpLetter","LowLetter","Leading zero","Bullet","Ordinal","Ordinal Text","For East","No Restart","Font","Font style","Underline style","Font color","Effects","Strikethrough","Superscript","Subscript","Double strikethrough","Bold","Italic","Cut","Copy","Paste","Open Hyperlink","Copy Hyperlink","Remove Hyperlink","Paragraph","Linked Style","Character","Merge Cells","Insert Above","Insert Below","Insert Left","Insert Right","Delete","Delete Table","Delete Row","Delete Column","File Name","Format Type","Save","Navigation","Results","Replace","Replace All","We replaced all","Find","No matches","All Done","Result","of","instances","with","Click to follow link","Continue Numbering","Bookmark name","Close","Restart At","Properties","Style type","Style based on","Style for following paragraph","Formatting","Numbering and Bullets","Numbering","Update Field","Edit Field","Bookmark","Page Setup","No bookmarks found","Number format tooltip information","Format","Create New Style","Modify Style","New","InsertFootnote","InsertEndnote","Endnote","Notes Options","Bullets","Use bookmarks","Table of Contents","AutoFit","AutoFit to Contents","AutoFit to Window","Fixed Column Width","Reset","Match case","Whole words","Add","Go To","Search for","Replace with","TOC 1","TOC 2","TOC 3","TOC 4","TOC 5","TOC 6","TOC 7","TOC 8","TOC 9","Right-to-left","Left-to-right","Direction","Table direction","Indent from right","Contextual Spacing","Password Mismatch","Restrict Editing","Formatting restrictions","Allow formatting","Editing restrictions","Read only","Exceptions Optional","Select Part Of Document And User","Everyone","More users","Add Users","Enforcing Protection","Start Enforcing Protection","Enter User","Users","Enter new password","Reenter new password to confirm","Your permissions","Protected Document","FormFieldsOnly","CommentsOnly","ReadOnlyProtection","Stop Protection","Password","Spelling Editor","Spelling","Spell Check","Underline errors","Ignore","Ignore All","Add to Dictionary","Change","Change All","The password is incorrect","Error in establishing connection with web server","Highlight the regions I can edit","Show All Regions I Can Edit","Find Next Region I Can Edit","Keep source formatting","Match destination formatting","InsertAsRows","InsertAsColumns","OverwriteCells","NestTable","Text only","Comments","Type your comment","Post","Reply","New Comment","Edit","Resolve","Reopen","No comments in this document","more","Type your comment here","Next Comment","Previous Comment","Un-posted comments","Discard Comment","No Headings","Add Headings","More Options","Click to see this comment","Form Fields","Text Form","Check Box","Drop Down Form Field","Dropdown items","Items in dropdown list","ADD","REMOVE","Field settings","Dropdown enabled","Check Box Form Field","Check box size","Auto","Default value","Not checked","Checked","Check box enabled","Text Form Field","Type","Default text","Maximum length","Text format","Fillin enabled","Default number","Default date","Date format","Merge Track","UnTrack","Accept","Reject","Previous Changes","Next Changes","Inserted","Deleted","Move From","Move To","Changes","Accept all","Reject all","No changes","Accept Changes","Reject Changes","User","View","Insertion","Deletion","All caps","This region is locked by","Lock","Unlock","Already locked","Click to View/Edit Footnote","Click to View/Edit Endnote","Multiple Comment","No suggestions","More Suggestion","Ignore Once","Keep With Next","Keep Lines Together","WidowControl","Indents and Spacing","Line and Page Breaks","Pagination","Single","DashSmallGap","DashDot","Double","ThinThickSmallGap","ThickThinSmallGap","ThickThinMediumGap","ThickThinLargeGap","SingleWavy","DoubleWavy","Inset","DashLargeGap","Dot","DashDotDot","Triple","ThinThickThinSmallGap","ThinThickThinMediumGap","ThinThickThinLargeGap","DashDotStroked","Engrave3D","Thick","Outset","Emboss3D","ThinThickLargeGap","ThinThickMediumGap","Number of rows must be between 1 and 32767.","Number of columns must be between 1 and 63.","Unlimited","Regular text","Uppercase","Lowercase","FirstCapital","TitleCase","Filling in forms","px","Tracked changes","TrackChangesOnly","RemovedIgnoreExceptions","RemovedIgnore","Information","Yes","No","initHelper","DocumentEditor_1","spellCheckDialogModule","spellCheckerModule","isDocumentLoadedIn","enableSpellCheck","enableImageResizer","preRender","enableOptimizedTextMeasuring","Inject","refreshing","minHeight","formatUnit","optimizedModule","regularModule","renderComplete","onPropertyChanged","model","oldProp","localizeDialogs","oldValue","footNotesDialogModule","pageSetupDialogModule","tableDialogModule","setDefaultCharacterFormat","setDefaultParagraphFormat","setDefaultSectionFormat","getPersistData","clearPreservedCollectionsInViewer","enableEditor","fireBeformFieldFill","fireAfterFormFieldFill","showPageSetupDialog","showTableDialog","showTableOfContentsDialog","showHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","showStylesDialog","stylesDialogModule","showTablePropertiesDialog","showBordersAndShadingDialog","requiredModules","modules","member","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableSearch","enableContextMenu","enableOptionsPane","enableHyperlinkDialog","enableTableDialog","enableBookmarkDialog","enableTableOfContentsDialog","enablePageSetupDialog","enableFootnoteAndEndnoteDialog","enableStyleDialog","enableListDialog","enableParagraphDialog","enableFontDialog","enableTablePropertiesDialog","enableBordersAndShadingDialog","enableTableOptionsDialog","sfdtText","clearSpellCheck","enableAllModules","refreshOverflow","getFormFieldNames","formFieldNames","formFieldInfo","resetFormFields","importFormData","exportFormData","fitPage","printModule","mimeType","wordExportModule","jsonString","showDialog","dialogType","showSpellCheckDialog","showOptionsPane","showRestrictEditingPane","destroyDependentModules","Complex","Event","NotifyPropertyChanges","Component","ServerActionSettings","FormFieldSettings","CollaborativeEditingSettings","ContainerServerActionSettings","CLIPBOARD_ID","isCommentEditing","importHandler","initToolBar","toolbarItems","renderToolBar","toolbarContainer","toolbarWrapper","toolbarTarget","initToolbarItems","propertiesPaneDiv","cssClassName","propertiesPaneButton","EventHandler","showHidePropertiesPane","initToolbarDropdown","id_1","imgDropDwn","onDropDownButtonSelect","breakDropDwn","filePicker","imagePicker","toggleButton","restrictIconCss","restrictDropDwn","onBeforeRenderRestrictDropdown","formFieldDropDown","selectedIcon","toggleRestrictIcon","toggleProtection","icon","toggle","paneDiv","propertiesPaneContainer","showPropertiesPane","previousContext","showHeaderProperties","enableDisablePropertyPaneButton","showPropertiesPaneOnSelection","onWrapText","togglePropertiesPane","onFileChange","onImageChange","EJ2Toolbar","clicked","clickHandler","getToolbarItems","reInitToolbarItems","toolbarTimer","tItem","toggleTrackChangesInternal","statusBar","toggleWebLayout","onToc","toggleLocalPaste","toggleEditing","toggleRestrictEditing","restrictEditingId","parentId","file","fileSize","fileReader_1","readAsText","convertToSfdt","containerTarget","import","append","enableDisableFormField","enableDisableInsertComment","toggleTrackChanges","trackId","enableDisableToolBarItem","isProtectedContent","containsItem","enableDisableUndoRedo","undoElement","redoElement","headerFooterProperties","showProperties","HeaderFooterProperties","isHeaderTopApply","isFooterTopApply","initHeaderFooterPane","toolbarModule","enableDisableElements","initializeHeaderFooter","showHeaderFooterPane","onSelectionChange","elementId","createDivTemplate","headerLabel","closeButtonFloat","closeIcon","optionsLabelDiv","optionsLabel","firstPage","changeFirstPageOptions","oddOrEven","changeoddOrEvenOptions","positionLabelDiv","positionLabel","positionDiv","headerTopDiv","headerTopLabel","headerFromTop","showSpinButton","footerBottomDiv","footerBottomLabel","footerFromTop","divElement","onHeaderValue","onFooterValue","changeHeaderValue","changeFooterValue","headerTop","footerTop","ImageProperties","isWidthApply","isHeightApply","isMaintainAspectRatio","initializeImageProperties","initImageProp","imageDiv","outerDiv","widthElement","createImagePropertiesDiv","widthNumericBox","heightNumericBox","aspectRatioDiv","aspectRatio","aspectRatioBtn","inputId","spanContent","tooltip","onAspectRatioBtnClick","onImageWidth","onImageHeight","applyImageWidth","applyImageHeight","ratio","showImageProperties","updateImageProperties","TocProperties","initializeTocPane","tocHeaderDiv","initTemplates","tocOptionsDiv","contentStylesDropdown","checkboxContent","updateTocProperties","rightalignPageNumber","showPageNumber","cancelBtn","updateBtn","onInsertToc","showTocPane","closeButtonMargin","template1","template1Div","templateContent1","templateContent2","templateContent3","createDropDownButton","contentStyleElement","borderLevelStyle","checkboxElement","showPageNumberDiv","showpagenumberCheckboxElement","rightalignpagenumberCheckboxElement","hyperlinkDiv","hyperlinkCheckboxElement","footerElementFloat","footerElement","updatebuttoncontentStyleElement","cancelbuttoncontentStyleElement","previousContextType","prevContext","borderBtn","isRetrieving","appliedHighlightColor","createChangecase","changeCaseDropdown","changeCaseContainer","initializeTextPropertiesDiv","wholeDiv","textProperties","textDiv","createDiv","fontFamilyDiv","createDropDownListForFamily","fontSizeDiv","divClassName","createDropDownListForSize","propertiesDiv","createButtonTemplate","rightDiv","leftDiv2","createFontColorPicker","lastElementChild","initializeHighlightColorElement","createHighlightColorSplitButton","nextElementSibling","highlightColorInputElement","rightDiv2","hgltSplitObj","SplitButton","highlightColorElement","closePopup","openPopup","applyHighlightColor","yellowDiv","createHightlighColorPickerDiv","brightGreenDiv","turquoiseDiv","hotPinkDiv","blueDiv","redDiv","darkBlueDiv","tealDiv","greenDiv","violetDiv","darkRedDiv","darkYellowDiv","gray50Div","gray25Div","blackDiv","nocolor","nocolorDiv","nocolorDivValue","onHighLightColor","applyHighlightColorAsBackground","removeSelectedColorDiv","hgltColor","getHighLightColor","iconcss","btn","boldBtn","italicBtn","underlineBtn","strikethroughBtn","superscriptBtn","subscriptBtn","clearFormatBtn","fontColorInputElement","showButtons","fontSelectElement","enableCsp","FontValue","changeFontFamily","changeFontSize","boldAction","italicAction","underlineAction","strikethroughAction","superscriptAction","subscriptAction","changeFontColor","clearFormatAction","unwireEvents","appliedBulletStyle","appliedNumberingStyle","appliedLineSpacing","splitButtonClass","initializeParagraphPropertiesDiv","paragraphDiv","createDivElement","styleDiv","styleSelect","createStyleDropDownList","indentWholeDiv","indentDiv","indentClassName","leftAlignment","centerAlignment","rightAlignment","increaseIndentIconCss","decreaseIndentIconCss","incDecIndentDiv","listDiv","paraDiv","createLineSpacingDropdown","listDropDown","bulletButton","numberingList","bulletIconCss","numberIconCss","createBulletListDropButton","createNumberListDropButton","createSeparator","leftAlignmentBtn","rightAlignmentBtn","justifyBtn","decreaseIndentBtn","increaseIndentBtn","bordersBtn","centerAlignmentBtn","dropdown","lineSpacingAction","noneNumberTag","numberedNoneClick","numberList","numberedNumberDotClick","lowLetter","numberedLowLetterClick","upLetter","numberedUpLetterClick","lowRoman","numberedLowRomanClick","upRoman","numberedUpRomanClick","updateSelectedNumberedListType","removeSelectedList","numberedListBtn","applyLastAppliedNumbering","updateSelectedBulletListType","flowerBullet","tickBullet","noneBulletTag","applyLastAppliedBullet","bulletDotClick","bulletCircleClick","bulletSquareClick","bulletArrowClick","bulletTickClick","bulletFlowerClick","bulletListBtn","spanDiv","selectElement","StyleName","Class","selectStyleValue","updateOptions","footerTemplate","popup","itemData","constructStyleDropItems","domStyle","textDecoration","vAlign","leftAlignmentAction","rightAlignmentAction","centerAlignmentAction","justifyAction","increaseIndentAction","decreaseIndentAction","setLineSpacing","applyStyleValue","TextProperties","isTableProperties","isInitial","initializeTextProperties","updateStyles","showTextProperties","generateUniqueID","TableProperties","imageProperty","isTopMarginApply","isRightMarginApply","isBottomMarginApply","isLeftMarginApply","groupButtonClass","tableTextProperties","initializeTablePropPane","initFillColorDiv","initBorderStylesDiv","initCellDiv","initInsertOrDelCell","initCellMargin","initAlignText","addTablePropertyTab","textHeader","propertiesTab","shadingBtn","changeBackgroundColor","tableOutlineBorder","onOutlineBorder","tableAllBorder","onAllBorder","tableCenterBorder","onInsideBorder","tableLeftBorder","onLeftBorder","tableCenterVerticalBorder","onVerticalBorder","tableRightBorder","onRightBorder","tableTopBorder","onTopBorder","tableCenterHorizontalBorder","onHorizontalBorder","tableBottomBorder","onBottomBorder","insertRowAbove","onInsertRowAbove","insertRowBelow","onInsertRowBelow","insertColumnLeft","onInsertColumnLeft","insertColumnRight","onInsertColumnRight","onDeleteRow","onDeleteColumn","horizontalMerge","onMergeCell","alignTop","applyAlignTop","alignBottom","applyAlignBottom","alignCenterHorizontal","applyAlignCenterHorizontal","onTopMargin","onRightMargin","onLeftMargin","onBottomMargin","applyTopMargin","applyRightMargin","applyLeftMargin","applyBottomMargin","borderSize","fillDiv","createColorPickerTemplate","borderStyleDiv","div1","div2","div3","styleTypeDiv","borderSizeButton","createBorderSizeDropDown","borderSizeColorElement","cellDiv","tableOperationDiv","cellMarginDiv","createCellMarginTextBox","textboxLabel","textboxId","parentStyle","maxValue","isRight","cellMarginParentDiv","cellMarginLabel","cellMarginTextbox","cellMarginNumericText","createDropdownOption","onBorderSizeChange","borderBottomColor","dropDownBtn","iconPos","iconPosition","isBorderWidth","showTableProperties","paneHeight","StatusBar","docEditor","statusBarDiv","initializeStatusBar","pageCount","pageNumberInput","editablePageNumber","pageNumberOfLabelStyle","updatePageNumber","label1","updatePageCount","verticalLine","spellCheckBtn","addSpellCheckElement","spellCheckButton","pageButton","webButton","addRemoveClass","zoomBtn","onZoom","spellCheckItems","onSpellCheck","currentLanguage","allowSuggestion","setZoomValue","updateZoomContent","setSpellCheckValue","editorPageCount","updatePageNumberWidth","updatePageNumberOnViewChange","togglePageLayout","addToElement","removeFromElement","appendDiv","webBtn","pageBtn","DocumentEditorContainer","Insert Footnote","Insert Endnote","Footnote Tooltip","Endnote Tooltip","Open","Undo","Redo","Link","HEADING - - - - 1","HEADING - - - - 2","HEADING - - - - 3","Page Number","Break","Local Clipboard","Upload from computer","By URL","Page Break","Show properties pane","Hide properties pane","Section Break","Header And Footer","Levels","Different First Page","Different header and footer for odd and even pages","Different Odd And Even Pages","Different header and footer for first page","Header from Top","Footer from Bottom","Distance from top of the page to top of the header","Distance from bottom of the page to bottom of the footer","Aspect ratio","W","H","Fill color","Border Style","Outside borders","All borders","Inside borders","Left border","Inside vertical border","Right border","Top border","Inside horizontal border","Bottom border","Border color","Border width","Merge cells","Insert Or Delete","Insert columns to the left","Insert columns to the right","Insert rows above","Insert rows below","Delete rows","Delete columns","Cell Margin","Align Text","Align top","Align bottom","Align center","Number of heading or outline levels to be shown in table of contents","Show page numbers in table of contents","Right align page numbers in table of contents","Use hyperlinks","Font Size","Text highlight color","Clear all formatting","Bold Tooltip","Italic Tooltip","Underline Tooltip","Superscript Tooltip","Subscript Tooltip","Align left Tooltip","Center Tooltip","Align right Tooltip","Justify Tooltip","Decrease indent","Increase indent","Line spacing","Manage Styles","Fit one page","Fit page width","Update","No Border","Create a new document","Open a document","Undo Tooltip","Redo Tooltip","Insert inline picture from a file","Insert a table into the document","Create Hyperlink","Insert a bookmark in a specific place in this document","Provide an overview of your document by adding a table of contents","Add or edit the header","Add or edit the footer","Open the page setup dialog","Add page numbers","Find Text","Toggle between the internal clipboard and system clipboard","Current Page Number","Protections","New comment","Print layout","Web layout","DropDown","Update Fields","Update cross reference fields","Track Changes","TrackChanges","AllCaps","Change case Tooltip","UPPERCASE","No color","Top margin","Bottom margin","Left margin","Right margin","ZoomLevelTooltip","documentEditorInternal","newModel","oldModel","restrictEditingToggleHelper","setserverActionSettings","customizeDocumentEditorSettings","createToolbarContainer","enableToolbar","initContainerElement","initializeDocumentEditor","imageProperties","tocProperties","statusBarElement","setFormat","propertiesPaneContainerBorder","editorContainer","isCustom","documentEditorTarget","selectionChange","contentChange","onContentChange","documentChange","onDocumentChange","requestNavigate","onRequestNavigate","viewChange","onViewChange","customContextMenuSelect","onCustomContextMenuSelect","customContextMenuBeforeOpen","onCustomContextMenuBeforeOpen","beforePaneSwitch","onBeforePaneSwitch","commentBegin","onCommentBegin","onCommentEnd","commentDelete","onCommentDelete","beforeCommentAction","onCommentAction","onTrackChange","serviceFailure","beforeXmlHttpRequestSend","beforeXmlHttpSend","onZoomFactorChange","unWireEvents","isProtectedDocument","isSelectionInProtectecRegion","currentContext","index.DocumentEditor","index.Print","index.SfdtExport","index.WordExport","index.TextExport","index.Selection","index.Search","index.Editor","index.EditorHistory","index.OptionsPane","index.ContextMenu","index.ImageResizer","index.HyperlinkDialog","index.TableDialog","index.BookmarkDialog","index.TableOfContentsDialog","index.PageSetupDialog","index.ParagraphDialog","index.ListDialog","index.StyleDialog","index.StylesDialog","index.BulletsAndNumberingDialog","index.FontDialog","index.TablePropertiesDialog","index.BordersAndShadingDialog","index.TableOptionsDialog","index.CellOptionsDialog","index.SpellChecker","index.SpellCheckDialog","index.CollaborativeEditing","index.DocumentEditorContainer","index.Toolbar"],"mappings":"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"} \ No newline at end of file diff --git a/Server side with Redis/src/main/resources/static/js/main.js b/Server side with Redis/src/main/resources/static/js/main.js new file mode 100644 index 0000000..0582ba3 --- /dev/null +++ b/Server side with Redis/src/main/resources/static/js/main.js @@ -0,0 +1,121 @@ +'use strict'; + +var usernamePage = document.querySelector('#username-page'); +var chatPage = document.querySelector('#chat-page'); +var usernameForm = document.querySelector('#usernameForm'); +var messageForm = document.querySelector('#messageForm'); +var messageInput = document.querySelector('#message'); +var messageArea = document.querySelector('#messageArea'); +var connectingElement = document.querySelector('.connecting'); + +var stompClient = null; +var username = null; + +var colors = [ + '#2196F3', '#32c787', '#00BCD4', '#ff5652', + '#ffc107', '#ff85af', '#FF9800', '#39bbb0' +]; + +function connect(event) { + username = document.querySelector('#name').value.trim(); + + if(username) { + usernamePage.classList.add('hidden'); + chatPage.classList.remove('hidden'); + + var socket = new SockJS('/ws'); + stompClient = Stomp.over(socket); + + stompClient.connect({}, onConnected, onError); + } + event.preventDefault(); +} + + +function onConnected() { + // Subscribe to the Public Topic + stompClient.subscribe('/topic/public', onMessageReceived); + + // Tell your username to the server + stompClient.send("/app/chat.addUser", + {}, + JSON.stringify({sender: username, type: 'JOIN'}) + ) + + connectingElement.classList.add('hidden'); +} + + +function onError(error) { + connectingElement.textContent = 'Could not connect to WebSocket server. Please refresh this page to try again!'; + connectingElement.style.color = 'red'; +} + + +function sendMessage(event) { + var messageContent = messageInput.value.trim(); + + if(messageContent && stompClient) { + var chatMessage = { + sender: username, + content: messageInput.value, + type: 'CHAT' + }; + + stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage)); + messageInput.value = ''; + } + event.preventDefault(); +} + + +function onMessageReceived(payload) { + var message = JSON.parse(payload.body); + + var messageElement = document.createElement('li'); + + if(message.type === 'JOIN') { + messageElement.classList.add('event-message'); + message.content = message.sender + ' joined!'; + } else if (message.type === 'LEAVE') { + messageElement.classList.add('event-message'); + message.content = message.sender + ' left!'; + } else { + messageElement.classList.add('chat-message'); + + var avatarElement = document.createElement('i'); + var avatarText = document.createTextNode(message.sender[0]); + avatarElement.appendChild(avatarText); + avatarElement.style['background-color'] = getAvatarColor(message.sender); + + messageElement.appendChild(avatarElement); + + var usernameElement = document.createElement('span'); + var usernameText = document.createTextNode(message.sender); + usernameElement.appendChild(usernameText); + messageElement.appendChild(usernameElement); + } + + var textElement = document.createElement('p'); + var messageText = document.createTextNode(message.content); + textElement.appendChild(messageText); + + messageElement.appendChild(textElement); + + messageArea.appendChild(messageElement); + messageArea.scrollTop = messageArea.scrollHeight; +} + + +function getAvatarColor(messageSender) { + var hash = 0; + for (var i = 0; i < messageSender.length; i++) { + hash = 31 * hash + messageSender.charCodeAt(i); + } + + var index = Math.abs(hash % colors.length); + return colors[index]; +} + +usernameForm.addEventListener('submit', connect, true) +messageForm.addEventListener('submit', sendMessage, true) diff --git a/Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF b/Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java b/Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java new file mode 100644 index 0000000..19b6fac --- /dev/null +++ b/Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java @@ -0,0 +1,13 @@ +package com.syncfusion.tomcat; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class TomcatApplicationTests { + + @Test + void contextLoads() { + } + +} From 61c0303e85d7ae8d230862fc0d22fc77d6c5ba05 Mon Sep 17 00:00:00 2001 From: kavitha Muralitharan Date: Wed, 5 Feb 2025 17:02:36 +0530 Subject: [PATCH 2/3] 933482: Added Collaborative Editing java with Redis --- .../Java/Using Redis}/.gitignore | 0 .../Java/Using Redis}/ReadMe.md | 0 .../Java/Using Redis}/mvnw | 0 .../Java/Using Redis}/mvnw.cmd | 0 .../Java/Using Redis}/pom.xml | 0 .../com/syncfusion/tomcat/BackgroundService.java | 0 .../tomcat/CollaborativeEditingController.java | 10 +++++----- .../tomcat/CollaborativeEditingHelper.java | 0 .../java/com/syncfusion/tomcat/CustomParameter.java | 0 .../syncfusion/tomcat/CustomRestrictParameter.java | 0 .../java/com/syncfusion/tomcat/DocumentContent.java | 0 .../java/com/syncfusion/tomcat/FileNameInfo.java | 0 .../java/com/syncfusion/tomcat/FilesPathInfo.java | 0 .../main/java/com/syncfusion/tomcat/SaveInfo.java | 0 .../com/syncfusion/tomcat/TomcatApplication.java | 0 .../syncfusion/tomcat/config/WebSocketConfig.java | 0 .../tomcat/controller/DocumentEditorHub.java | 0 .../tomcat/controller/RedisSubscriber.java | 0 .../tomcat/controller/WebSocketEventListener.java | 0 .../tomcat/others/BackgroundQueueImpl.java | 0 .../syncfusion/tomcat/others/IBackgroundQueue.java | 0 .../tomcat/others/IQueuedHostedService.java | 0 .../tomcat/others/QueuedHostedService.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/static/css/main.css | 0 .../src/main/resources/static/document-editor.html | 0 .../static/files/Character Formatting_3.docx | Bin .../resources/static/files/Getting Started_3.docx | Bin .../static/files/Headers and Footers_3.docx | Bin .../static/files/Paragraph Formatting_3.docx | Bin .../src/main/resources/static/files/Styles_3.docx | Bin .../src/main/resources/static/index.html | 0 .../resources/static/js/ej2-documenteditor.min.js | 0 .../static/js/ej2-documenteditor.min.js.map | 0 .../src/main/resources/static/js/main.js | 0 .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../syncfusion/tomcat/TomcatApplicationTests.java | 0 37 files changed, 5 insertions(+), 5 deletions(-) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/.gitignore (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/ReadMe.md (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/mvnw (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/mvnw.cmd (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/pom.xml (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/BackgroundService.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java (97%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/CustomParameter.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/DocumentContent.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/FileNameInfo.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/SaveInfo.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/TomcatApplication.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/application.properties (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/css/main.css (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/document-editor.html (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/files/Character Formatting_3.docx (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/files/Getting Started_3.docx (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/files/Headers and Footers_3.docx (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/files/Paragraph Formatting_3.docx (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/files/Styles_3.docx (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/index.html (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/js/ej2-documenteditor.min.js (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/js/ej2-documenteditor.min.js.map (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/resources/static/js/main.js (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/main/webapp/META-INF/MANIFEST.MF (100%) rename {Server side with Redis => Server side with distributed cache/Java/Using Redis}/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java (100%) diff --git a/Server side with Redis/.gitignore b/Server side with distributed cache/Java/Using Redis/.gitignore similarity index 100% rename from Server side with Redis/.gitignore rename to Server side with distributed cache/Java/Using Redis/.gitignore diff --git a/Server side with Redis/ReadMe.md b/Server side with distributed cache/Java/Using Redis/ReadMe.md similarity index 100% rename from Server side with Redis/ReadMe.md rename to Server side with distributed cache/Java/Using Redis/ReadMe.md diff --git a/Server side with Redis/mvnw b/Server side with distributed cache/Java/Using Redis/mvnw similarity index 100% rename from Server side with Redis/mvnw rename to Server side with distributed cache/Java/Using Redis/mvnw diff --git a/Server side with Redis/mvnw.cmd b/Server side with distributed cache/Java/Using Redis/mvnw.cmd similarity index 100% rename from Server side with Redis/mvnw.cmd rename to Server side with distributed cache/Java/Using Redis/mvnw.cmd diff --git a/Server side with Redis/pom.xml b/Server side with distributed cache/Java/Using Redis/pom.xml similarity index 100% rename from Server side with Redis/pom.xml rename to Server side with distributed cache/Java/Using Redis/pom.xml diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/BackgroundService.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java similarity index 97% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java index a958eec..99671a5 100644 --- a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java +++ b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingController.java @@ -78,7 +78,7 @@ public CollaborativeEditingController(Gson gson) { @CrossOrigin(origins = "*", allowedHeaders = "*") @PostMapping("/api/collaborativeediting/ImportFile") - public String ImportFile(@RequestBody FilesPathInfo file) throws Exception { + public String importFile(@RequestBody FilesPathInfo file) throws Exception { try { ClassLoader classLoader = getClass().getClassLoader(); WordProcessorHelper document = getDocumentFromBucketS3(file.getFileName(), datasourceAccessKey, @@ -126,7 +126,7 @@ private List getPendingOperations(String listKey, int startIndex, in @CrossOrigin(origins = "*", allowedHeaders = "*") @PostMapping("/api/collaborativeediting/UpdateAction") - public ActionInfo UpdateAction(@RequestBody ActionInfo param) throws Exception { + public ActionInfo updateAction(@RequestBody ActionInfo param) throws Exception { String roomName = param.getRoomName(); ActionInfo transformedAction = addOperationsToCache(param); HashMap action = new HashMap<>(); @@ -138,7 +138,7 @@ public ActionInfo UpdateAction(@RequestBody ActionInfo param) throws Exception { @CrossOrigin(origins = "*", allowedHeaders = "*") @PostMapping("/api/collaborativeediting/GetActionsFromServer") - public String GetActionsFromServer(@RequestBody ActionInfo param) throws ClassNotFoundException { + public String getActionsFromServer(@RequestBody ActionInfo param) throws ClassNotFoundException { try (Jedis jedis = RedisSubscriber.getJedis()) { // Initialize necessary variables from the parameters and helper class int saveThreshold = CollaborativeEditingHelper.saveThreshold; @@ -146,7 +146,7 @@ public String GetActionsFromServer(@RequestBody ActionInfo param) throws ClassNo int lastSyncedVersion = param.getVersion(); int clientVersion = param.getVersion(); // Fetch actions that are effective and pending based on the last synced version - List actions = GetEffectivePendingVersion(roomName, lastSyncedVersion, jedis); + List actions = getEffectivePendingVersion(roomName, lastSyncedVersion, jedis); List currentAction = new ArrayList<>(); for (ActionInfo action : actions) { @@ -172,7 +172,7 @@ public String GetActionsFromServer(@RequestBody ActionInfo param) throws ClassNo } } - private List GetEffectivePendingVersion(String roomName, int lastSyncedVersion, Jedis jedis) { + private List getEffectivePendingVersion(String roomName, int lastSyncedVersion, Jedis jedis) { // Define Redis keys for accessing the room data and its revision information String[] keys = { roomName, roomName + CollaborativeEditingHelper.revisionInfoSuffix }; // Prepare Redis values for the script: start index and save threshold diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CollaborativeEditingHelper.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CustomParameter.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/CustomRestrictParameter.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/DocumentContent.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/FileNameInfo.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/FilesPathInfo.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/SaveInfo.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/TomcatApplication.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/config/WebSocketConfig.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/DocumentEditorHub.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/RedisSubscriber.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/controller/WebSocketEventListener.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/BackgroundQueueImpl.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/IBackgroundQueue.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/IQueuedHostedService.java diff --git a/Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java b/Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java similarity index 100% rename from Server side with Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java rename to Server side with distributed cache/Java/Using Redis/src/main/java/com/syncfusion/tomcat/others/QueuedHostedService.java diff --git a/Server side with Redis/src/main/resources/application.properties b/Server side with distributed cache/Java/Using Redis/src/main/resources/application.properties similarity index 100% rename from Server side with Redis/src/main/resources/application.properties rename to Server side with distributed cache/Java/Using Redis/src/main/resources/application.properties diff --git a/Server side with Redis/src/main/resources/static/css/main.css b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css similarity index 100% rename from Server side with Redis/src/main/resources/static/css/main.css rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css diff --git a/Server side with Redis/src/main/resources/static/document-editor.html b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html similarity index 100% rename from Server side with Redis/src/main/resources/static/document-editor.html rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html diff --git a/Server side with Redis/src/main/resources/static/files/Character Formatting_3.docx b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Character Formatting_3.docx similarity index 100% rename from Server side with Redis/src/main/resources/static/files/Character Formatting_3.docx rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Character Formatting_3.docx diff --git a/Server side with Redis/src/main/resources/static/files/Getting Started_3.docx b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Getting Started_3.docx similarity index 100% rename from Server side with Redis/src/main/resources/static/files/Getting Started_3.docx rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Getting Started_3.docx diff --git a/Server side with Redis/src/main/resources/static/files/Headers and Footers_3.docx b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Headers and Footers_3.docx similarity index 100% rename from Server side with Redis/src/main/resources/static/files/Headers and Footers_3.docx rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Headers and Footers_3.docx diff --git a/Server side with Redis/src/main/resources/static/files/Paragraph Formatting_3.docx b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Paragraph Formatting_3.docx similarity index 100% rename from Server side with Redis/src/main/resources/static/files/Paragraph Formatting_3.docx rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Paragraph Formatting_3.docx diff --git a/Server side with Redis/src/main/resources/static/files/Styles_3.docx b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Styles_3.docx similarity index 100% rename from Server side with Redis/src/main/resources/static/files/Styles_3.docx rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/files/Styles_3.docx diff --git a/Server side with Redis/src/main/resources/static/index.html b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/index.html similarity index 100% rename from Server side with Redis/src/main/resources/static/index.html rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/index.html diff --git a/Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js similarity index 100% rename from Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js diff --git a/Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map similarity index 100% rename from Server side with Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map diff --git a/Server side with Redis/src/main/resources/static/js/main.js b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js similarity index 100% rename from Server side with Redis/src/main/resources/static/js/main.js rename to Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js diff --git a/Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF b/Server side with distributed cache/Java/Using Redis/src/main/webapp/META-INF/MANIFEST.MF similarity index 100% rename from Server side with Redis/src/main/webapp/META-INF/MANIFEST.MF rename to Server side with distributed cache/Java/Using Redis/src/main/webapp/META-INF/MANIFEST.MF diff --git a/Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java b/Server side with distributed cache/Java/Using Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java similarity index 100% rename from Server side with Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java rename to Server side with distributed cache/Java/Using Redis/src/test/java/com/syncfusion/tomcat/TomcatApplicationTests.java From 6ed77ab3af8bb72c665ab37a0bb233c318db8f06 Mon Sep 17 00:00:00 2001 From: kavitha Muralitharan Date: Wed, 19 Feb 2025 19:26:42 +0530 Subject: [PATCH 3/3] 933482: Updated Review Changes --- .../Java/Using Redis/ReadMe.md | 2 +- .../src/main/resources/static/css/main.css | 298 -------- .../resources/static/document-editor.html | 640 ------------------ .../static/js/ej2-documenteditor.min.js | 2 - .../static/js/ej2-documenteditor.min.js.map | 1 - .../src/main/resources/static/js/main.js | 121 ---- 6 files changed, 1 insertion(+), 1063 deletions(-) delete mode 100644 Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css delete mode 100644 Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html delete mode 100644 Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js delete mode 100644 Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js.map delete mode 100644 Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js diff --git a/Server side with distributed cache/Java/Using Redis/ReadMe.md b/Server side with distributed cache/Java/Using Redis/ReadMe.md index 2ae0e98..1e06dec 100644 --- a/Server side with distributed cache/Java/Using Redis/ReadMe.md +++ b/Server side with distributed cache/Java/Using Redis/ReadMe.md @@ -1,6 +1,6 @@ # How to host the DocumentEditor service. -Opening and saving documents from S3 bucket using PostgreSQL. +Opening and saving documents using Redis. ## Maven Project diff --git a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css deleted file mode 100644 index 384b3cd..0000000 --- a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/css/main.css +++ /dev/null @@ -1,298 +0,0 @@ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html,body { - height: 100%; - overflow: hidden; -} - -body { - margin: 0; - padding: 0; - font-weight: 400; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 1rem; - line-height: 1.58; - color: #333; - background-color: #f4f4f4; - height: 100%; -} - -body:before { - height: 50%; - width: 100%; - position: absolute; - top: 0; - left: 0; - background: #128ff2; - content: ""; - z-index: 0; -} - -.clearfix:after { - display: block; - content: ""; - clear: both; -} - -.hidden { - display: none; -} - -.form-control { - width: 100%; - min-height: 38px; - font-size: 15px; - border: 1px solid #c8c8c8; -} - -.form-group { - margin-bottom: 15px; -} - -input { - padding-left: 10px; - outline: none; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 20px; - margin-bottom: 20px; -} - -h1 { - font-size: 1.7em; -} - -a { - color: #128ff2; -} - -button { - box-shadow: none; - border: 1px solid transparent; - font-size: 14px; - outline: none; - line-height: 100%; - white-space: nowrap; - vertical-align: middle; - padding: 0.6rem 1rem; - border-radius: 2px; - transition: all 0.2s ease-in-out; - cursor: pointer; - min-height: 38px; -} - -button.default { - background-color: #e8e8e8; - color: #333; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.12); -} - -button.primary { - background-color: #128ff2; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.12); - color: #fff; -} - -button.accent { - background-color: #ff4743; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.12); - color: #fff; -} - -#username-page { - text-align: center; -} - -.username-page-container { - background: #fff; - box-shadow: 0 1px 11px rgba(0, 0, 0, 0.27); - border-radius: 2px; - width: 100%; - max-width: 500px; - display: inline-block; - margin-top: 42px; - vertical-align: middle; - position: relative; - padding: 35px 55px 35px; - min-height: 250px; - position: absolute; - top: 50%; - left: 0; - right: 0; - margin: 0 auto; - margin-top: -160px; -} - -.username-page-container .username-submit { - margin-top: 10px; -} - - -#chat-page { - position: relative; - height: 100%; -} - -.chat-container { - max-width: 700px; - margin-left: auto; - margin-right: auto; - background-color: #fff; - box-shadow: 0 1px 11px rgba(0, 0, 0, 0.27); - margin-top: 30px; - height: calc(100% - 60px); - max-height: 600px; - position: relative; -} - -#chat-page ul { - list-style-type: none; - background-color: #FFF; - margin: 0; - overflow: auto; - overflow-y: scroll; - padding: 0 20px 0px 20px; - height: calc(100% - 150px); -} - -#chat-page #messageForm { - padding: 20px; -} - -#chat-page ul li { - line-height: 1.5rem; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid #f4f4f4; -} - -#chat-page ul li p { - margin: 0; -} - -#chat-page .event-message { - width: 100%; - text-align: center; - clear: both; -} - -#chat-page .event-message p { - color: #777; - font-size: 14px; - word-wrap: break-word; -} - -#chat-page .chat-message { - padding-left: 68px; - position: relative; -} - -#chat-page .chat-message i { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 10px; - display: inline-block; - vertical-align: middle; - font-size: 18px; - line-height: 42px; - color: #fff; - text-align: center; - border-radius: 50%; - font-style: normal; - text-transform: uppercase; -} - -#chat-page .chat-message span { - color: #333; - font-weight: 600; -} - -#chat-page .chat-message p { - color: #43464b; -} - -#messageForm .input-group input { - float: left; - width: calc(100% - 85px); -} - -#messageForm .input-group button { - float: left; - width: 80px; - height: 38px; - margin-left: 5px; -} - -.chat-header { - text-align: center; - padding: 15px; - border-bottom: 1px solid #ececec; -} - -.chat-header h2 { - margin: 0; - font-weight: 500; -} - -.connecting { - padding-top: 5px; - text-align: center; - color: #777; - position: absolute; - top: 65px; - width: 100%; -} - - -@media screen and (max-width: 730px) { - - .chat-container { - margin-left: 10px; - margin-right: 10px; - margin-top: 10px; - } -} - -@media screen and (max-width: 480px) { - .chat-container { - height: calc(100% - 30px); - } - - .username-page-container { - width: auto; - margin-left: 15px; - margin-right: 15px; - padding: 25px; - } - - #chat-page ul { - height: calc(100% - 120px); - } - - #messageForm .input-group button { - width: 65px; - } - - #messageForm .input-group input { - width: calc(100% - 70px); - } - - .chat-header { - padding: 10px; - } - - .connecting { - top: 60px; - } - - .chat-header h2 { - font-size: 1.1em; - } -} \ No newline at end of file diff --git a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html deleted file mode 100644 index 0050985..0000000 --- a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/document-editor.html +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
      -
      -
      -
      -
      - -
      - - - - - - - - \ No newline at end of file diff --git a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js deleted file mode 100644 index e5a30a4..0000000 --- a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/ej2-documenteditor.min.js +++ /dev/null @@ -1,2 +0,0 @@ -this.ej=this.ej||{},this.ej.documenteditor=function(e,t,i,n,r,o,s,a,l,d,h,c,p,g){"use strict";!function(e){e[e.LeftToRight=0]="LeftToRight",e[e.RightToLeft=1]="RightToLeft",e[e.WordSplit=2]="WordSplit",e[e.Number=4]="Number",e[e.Tab=6]="Tab"}(e.CharacterRangeType||(e.CharacterRangeType={}));var u=function(){function e(){this.keysInternal=[],this.valuesInternal=[]}return Object.defineProperty(e.prototype,"length",{get:function(){return this.keysInternal.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"keys",{get:function(){return this.keysInternal},enumerable:!0,configurable:!0}),e.prototype.add=function(e,i){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key or value is not valid.");return this.keysInternal.indexOf(e)<0&&(this.keysInternal.push(e),this.valuesInternal.push(i)),1},e.prototype.get=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);return i<0||i>this.keysInternal.length-1?void 0:this.valuesInternal[i]},e.prototype.set=function(e,i){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var n=this.keysInternal.indexOf(e);if(n<0||n>this.keysInternal.length-1)throw new RangeError("No item with the specified key has been added.");this.valuesInternal[n]=i},e.prototype.remove=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);if(i<0||i>this.keysInternal.length-1)throw new RangeError("No item with the specified key has been added.");return this.keysInternal.splice(i,1),this.valuesInternal.splice(i,1),!0},e.prototype.containsKey=function(e){if(t.isNullOrUndefined(e))throw new ReferenceError("Provided key is not valid.");var i=this.keysInternal.indexOf(e);return!(i<0||i>this.keysInternal.length-1)},e.prototype.clear=function(){this.keysInternal=[],this.valuesInternal=[]},e.prototype.destroy=function(){this.clear(),this.keysInternal=void 0,this.valuesInternal=void 0},e}(),m=function(){function e(e){this.referenceCount=0,this.uniqueFormatType=e,this.propertiesHash=new u}return e.prototype.isEqual=function(e,t,i){var n=!1;switch(this.uniqueFormatType){case 1:n=this.isBorderEqual(e,t,i);break;case 2:n=this.isCharacterFormatEqual(e,t,i);break;case 3:n=this.isParagraphFormatEqual(e,t,i);break;case 4:n=this.isCellFormatEqual(e,t,i);break;case 5:n=this.isShadingEqual(e,t,i);break;case 6:n=this.isRowFormatEqual(e,t,i);break;case 7:n=this.isListFormatEqual(e,t,i);break;case 8:n=this.isTableFormatEqual(e,t,i);break;case 9:n=this.isListLevelEqual(e,t,i);break;case 10:n=this.isSectionFormatEqual(e,t,i)}return n},e.prototype.isNotEqual=function(i,n,r,o,s){var a=void 0,l=e.getPropertyType(s,i);this.propertiesHash.containsKey(l)&&(a=this.propertiesHash.get(l));var d=void 0;return i===r?d=o:n.containsKey(l)&&(d=n.get(l)),!(a===d||!t.isNullOrUndefined(a)&&!t.isNullOrUndefined(d)&&a===d)},e.getPropertyType=function(e,t){var i=0;switch(e){case 1:i=this.getBorderPropertyType(t);break;case 2:i=this.getCharacterFormatPropertyType(t);break;case 3:i=this.getParaFormatPropertyType(t);break;case 4:i=this.getCellFormatPropertyType(t);break;case 5:i=this.getShadingPropertyType(t);break;case 6:i=this.getRowFormatType(t);break;case 7:i=this.getListFormatType(t);break;case 8:i=this.getTableFormatType(t);break;case 9:i=this.getListLevelType(t);break;case 10:i=this.getSectionFormatType(t)}return i},e.getRowFormatType=function(e){return"allowBreakAcrossPages"===e?1:"isHeader"===e?2:"height"===e?3:"heightType"===e?4:"gridBefore"===e?5:"gridBeforeWidth"===e?6:"gridBeforeWidthType"===e?7:"gridAfter"===e?8:"gridAfterWidth"===e?9:"gridAfterWidthType"===e?10:"leftMargin"===e?11:"topMargin"===e?12:"bottomMargin"===e?13:"rightMargin"===e?14:"leftIndent"===e?15:0},e.getListFormatType=function(e){return"listId"===e?1:"listLevelNumber"===e?2:0},e.getTableFormatType=function(e){return"leftMargin"===e?1:"rightMargin"===e?2:"topMargin"===e?3:"bottomMargin"===e?4:"cellSpacing"===e?5:"leftIndent"===e?6:"tableAlignment"===e?7:"preferredWidth"===e?8:"preferredWidthType"===e?9:"bidi"===e?10:"allowAutoFit"===e?11:"horizontalPositionAbs"===e?12:"horizontalPosition"===e?13:0},e.getListLevelType=function(e){return"listLevelPattern"===e?1:"startAt"===e?2:"followCharacter"===e?3:"numberFormat"===e?4:"restartLevel"===e?5:0},e.getShadingPropertyType=function(e){return"backgroundColor"===e?1:"foregroundColor"===e?2:"textureStyle"===e?3:0},e.getCellFormatPropertyType=function(e){return"leftMargin"===e?1:"rightMargin"===e?2:"topMargin"===e?3:"bottomMargin"===e?4:"columnSpan"===e?5:"rowSpan"===e?6:"verticalAlignment"===e?7:"preferredWidthType"===e?8:"preferredWidth"===e?9:"cellWidth"===e?10:0},e.getBorderPropertyType=function(e){return"color"===e?1:"lineStyle"===e?2:"lineWidth"===e?3:"shadow"===e?4:"space"===e?5:"hasNoneStyle"===e?6:0},e.getCharacterFormatPropertyType=function(e){return"fontColor"===e?1:"fontFamily"===e?2:"fontSize"===e?3:"bold"===e?4:"italic"===e?5:"underline"===e?6:"strikethrough"===e?7:"baselineAlignment"===e?8:"highlightColor"===e?9:"bidi"===e?10:"bdo"===e?11:"boldBidi"===e?12:"italicBidi"===e?13:"fontFamilyBidi"===e?14:"fontSizeBidi"===e?15:"allCaps"===e?16:"localeIdBidi"===e?17:0},e.getParaFormatPropertyType=function(e){return"leftIndent"===e?1:"rightIndent"===e?2:"firstLineIndent"===e?3:"textAlignment"===e?4:"beforeSpacing"===e?5:"afterSpacing"===e?6:"lineSpacing"===e?7:"lineSpacingType"===e?8:"outlineLevel"===e?9:"bidi"===e?10:"contextualSpacing"===e?11:"keepWithNext"===e?12:"keepLinesTogether"===e?13:"widowControl"===e?14:"spaceBeforeAuto"===e?15:"spaceAfterAuto"===e?16:0},e.getSectionFormatType=function(e){return"headerDistance"===e?1:"footerDistance"===e?2:"differentFirstPage"===e?3:"differentOddAndEvenPages"===e?4:"pageWidth"===e?5:"pageHeight"===e?6:"leftMargin"===e?7:"topMargin"===e?8:"rightMargin"===e?9:"bottomMargin"===e?10:"bidi"===e?11:"restartPageNumbering"===e?12:"pageStartingNumber"===e?13:"endnoteNumberFormat"===e?14:"endnotePosition"===e?15:"footNoteNumberFormat"===e?16:"footnotePosition"===e?17:"restartIndexForEndnotes"===e?18:"restartIndexForFootnotes"===e?19:"initialFootNoteNumber"===e?20:"initialEndNoteNumber"===e?21:"pageNumberStyle"===e?22:0},e.prototype.isBorderEqual=function(e,t,i){return!this.isNotEqual("color",e,t,i,1)&&(!this.isNotEqual("lineStyle",e,t,i,1)&&(!this.isNotEqual("lineWidth",e,t,i,1)&&(!this.isNotEqual("shadow",e,t,i,1)&&(!this.isNotEqual("space",e,t,i,1)&&!this.isNotEqual("hasNoneStyle",e,t,i,1)))))},e.prototype.isCharacterFormatEqual=function(e,t,i){return!this.isNotEqual("fontColor",e,t,i,2)&&(!this.isNotEqual("fontFamily",e,t,i,2)&&(!this.isNotEqual("fontSize",e,t,i,2)&&(!this.isNotEqual("bold",e,t,i,2)&&(!this.isNotEqual("italic",e,t,i,2)&&(!this.isNotEqual("underline",e,t,i,2)&&(!this.isNotEqual("strikethrough",e,t,i,2)&&(!this.isNotEqual("baselineAlignment",e,t,i,2)&&(!this.isNotEqual("highlightColor",e,t,i,2)&&(!this.isNotEqual("bidi",e,t,i,2)&&(!this.isNotEqual("bdo",e,t,i,2)&&(!this.isNotEqual("fontColor",e,t,i,2)&&(!this.isNotEqual("fontFamilyBidi",e,t,i,2)&&(!this.isNotEqual("fontSizeBidi",e,t,i,2)&&(!this.isNotEqual("boldBidi",e,t,i,2)&&(!this.isNotEqual("italicBidi",e,t,i,2)&&(!this.isNotEqual("allCaps",e,t,i,2)&&!this.isNotEqual("localeIdBidi",e,t,i,2)))))))))))))))))},e.prototype.isParagraphFormatEqual=function(e,t,i){return!this.isNotEqual("leftIndent",e,t,i,3)&&(!this.isNotEqual("rightIndent",e,t,i,3)&&(!this.isNotEqual("firstLineIndent",e,t,i,3)&&(!this.isNotEqual("textAlignment",e,t,i,3)&&(!this.isNotEqual("beforeSpacing",e,t,i,3)&&(!this.isNotEqual("afterSpacing",e,t,i,3)&&(!this.isNotEqual("spaceBeforeAuto",e,t,i,3)&&(!this.isNotEqual("spaceAfterAuto",e,t,i,3)&&(!this.isNotEqual("lineSpacing",e,t,i,3)&&(!this.isNotEqual("lineSpacingType",e,t,i,3)&&(!this.isNotEqual("outlineLevel",e,t,i,3)&&(!this.isNotEqual("bidi",e,t,i,3)&&(!this.isNotEqual("contextualSpacing",e,t,i,3)&&(!this.isNotEqual("keepWithNext",e,t,i,3)&&(!this.isNotEqual("keepLinesTogether",e,t,i,3)&&!this.isNotEqual("widowControl",e,t,i,3)))))))))))))))},e.prototype.isCellFormatEqual=function(e,t,i){return!this.isNotEqual("leftMargin",e,t,i,4)&&(!this.isNotEqual("rightMargin",e,t,i,4)&&(!this.isNotEqual("topMargin",e,t,i,4)&&(!this.isNotEqual("bottomMargin",e,t,i,4)&&(!this.isNotEqual("columnSpan",e,t,i,4)&&(!this.isNotEqual("rowSpan",e,t,i,4)&&(!this.isNotEqual("verticalAlignment",e,t,i,4)&&(!this.isNotEqual("preferredWidthType",e,t,i,4)&&(!this.isNotEqual("preferredWidth",e,t,i,4)&&!this.isNotEqual("cellWidth",e,t,i,4)))))))))},e.prototype.isShadingEqual=function(e,t,i){return!this.isNotEqual("backgroundColor",e,t,i,5)&&(!this.isNotEqual("foregroundColor",e,t,i,5)&&!this.isNotEqual("textureStyle",e,t,i,5))},e.prototype.isRowFormatEqual=function(e,t,i){return!this.isNotEqual("allowBreakAcrossPages",e,t,i,6)&&(!this.isNotEqual("isHeader",e,t,i,6)&&(!this.isNotEqual("height",e,t,i,6)&&(!this.isNotEqual("heightType",e,t,i,6)&&(!this.isNotEqual("gridBefore",e,t,i,6)&&(!this.isNotEqual("gridBeforeWidth",e,t,i,6)&&(!this.isNotEqual("gridBeforeWidthType",e,t,i,6)&&(!this.isNotEqual("gridAfter",e,t,i,6)&&(!this.isNotEqual("gridAfterWidth",e,t,i,6)&&(!this.isNotEqual("gridAfterWidthType",e,t,i,6)&&(!this.isNotEqual("leftMargin",e,t,i,6)&&(!this.isNotEqual("topMargin",e,t,i,6)&&(!this.isNotEqual("bottomMargin",e,t,i,6)&&(!this.isNotEqual("rightMargin",e,t,i,6)&&!this.isNotEqual("leftIndent",e,t,i,6))))))))))))))},e.prototype.isListFormatEqual=function(e,t,i){return!this.isNotEqual("listId",e,t,i,7)&&!this.isNotEqual("listLevelNumber",e,t,i,7)},e.prototype.isTableFormatEqual=function(e,t,i){return!this.isNotEqual("leftMargin",e,t,i,8)&&(!this.isNotEqual("rightMargin",e,t,i,8)&&(!this.isNotEqual("topMargin",e,t,i,8)&&(!this.isNotEqual("bottomMargin",e,t,i,8)&&(!this.isNotEqual("cellSpacing",e,t,i,8)&&(!this.isNotEqual("leftIndent",e,t,i,8)&&(!this.isNotEqual("tableAlignment",e,t,i,8)&&(!this.isNotEqual("preferredWidth",e,t,i,8)&&(!this.isNotEqual("preferredWidthType",e,t,i,8)&&(!this.isNotEqual("bidi",e,t,i,8)&&(!this.isNotEqual("allowAutoFit",e,t,i,8)&&(!this.isNotEqual("horizontalPositionAbs",e,t,i,8)&&!this.isNotEqual("horizontalPosition",e,t,i,8))))))))))))},e.prototype.isListLevelEqual=function(e,t,i){return!this.isNotEqual("listLevelPattern",e,t,i,9)&&(!this.isNotEqual("startAt",e,t,i,9)&&(!this.isNotEqual("followCharacter",e,t,i,9)&&(!this.isNotEqual("numberFormat",e,t,i,9)&&!this.isNotEqual("restartLevel",e,t,i,9))))},e.prototype.isSectionFormatEqual=function(e,t,i){return!this.isNotEqual("headerDistance",e,t,i,10)&&(!this.isNotEqual("footerDistance",e,t,i,10)&&(!this.isNotEqual("differentFirstPage",e,t,i,10)&&(!this.isNotEqual("differentOddAndEvenPages",e,t,i,10)&&(!this.isNotEqual("pageWidth",e,t,i,10)&&(!this.isNotEqual("pageHeight",e,t,i,10)&&(!this.isNotEqual("leftMargin",e,t,i,10)&&(!this.isNotEqual("topMargin",e,t,i,10)&&(!this.isNotEqual("rightMargin",e,t,i,10)&&(!this.isNotEqual("bottomMargin",e,t,i,10)&&(!this.isNotEqual("bidi",e,t,i,10)&&(!this.isNotEqual("restartPageNumbering",e,t,i,10)&&(!this.isNotEqual("pageStartingNumber",e,t,i,10)&&(!this.isNotEqual("endnoteNumberFormat",e,t,i,10)&&(!this.isNotEqual("endnotePosition",e,t,i,10)&&(!this.isNotEqual("footNoteNumberFormat",e,t,i,10)&&(!this.isNotEqual("footnotePosition",e,t,i,10)&&(!this.isNotEqual("restartIndexForEndnotes",e,t,i,10)&&(!this.isNotEqual("restartIndexForFootnotes",e,t,i,10)&&(!this.isNotEqual("initialFootNoteNumber",e,t,i,10)&&(!this.isNotEqual("initialEndNoteNumber",e,t,i,10)&&!this.isNotEqual("pageNumberStyle",e,t,i,10)))))))))))))))))))))},e.prototype.cloneItems=function(t,i,n,r){for(var o=e.getPropertyType(r,i),s=t.propertiesHash.keys,a=0;a=0?i.timeout:0,this.customHeaders=i.headers),this.xmlHttpRequest.onreadystatechange=function(){n.stateChange(n)},this.xmlHttpRequest.onerror=function(){n.error(n)},this.mode?this.sendRequest(e,r):setTimeout(function(){n.sendRequest(e,r)})},e.prototype.sendRequest=function(e,t){this.xmlHttpRequest.open("POST",this.url,!0),this.xmlHttpRequest.timeout=t,this.contentType&&this.xmlHttpRequest.setRequestHeader("Content-Type",this.contentType),this.setCustomAjaxHeaders(),this.responseType&&(this.xmlHttpRequest.responseType=this.responseType);var i=e instanceof FormData?e:JSON.stringify(e);this.xmlHttpRequest.send(i)},e.prototype.stateChange=function(e){if(4===e.xmlHttpRequest.readyState&&200===e.xmlHttpRequest.status){var t=void 0,i={name:"onSuccess",data:t=this.responseType?e.xmlHttpRequest.response:e.xmlHttpRequest.responseText,readyState:e.xmlHttpRequest.readyState,status:e.xmlHttpRequest.status};e.successHandler(i)}else if(4===e.xmlHttpRequest.readyState&&200!==e.xmlHttpRequest.status){i={name:"onFailure",status:e.xmlHttpRequest.status,statusText:e.xmlHttpRequest.statusText,url:e.url};e.failureHandler(i)}},e.prototype.error=function(e){var t={name:"onError",status:this.xmlHttpRequest.status,statusText:this.xmlHttpRequest.statusText};e.errorHandler(t)},e.prototype.successHandler=function(e){return this.onSuccess&&this.onSuccess(e),e},e.prototype.failureHandler=function(e){return this.onFailure&&this.onFailure(e),e},e.prototype.errorHandler=function(e){return this.onError&&this.onError(e),e},e.prototype.setCustomAjaxHeaders=function(){for(var e=0;er&&(a="landscape"),-1!==i.indexOf("Chrome")||-1!==i.indexOf("Firefox")?(n.document.write(""),n.document.write("
      ")):n.document.write("
      "),n.document.write(s.innerHTML+"
      ');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n // eslint-disable-next-line\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n };\n /**\n * Generate Document Image.\n *\n * @param documentHelper\n * @param pageNumber\n * @param imageType\n * @private\n */\n Print.prototype.exportAsImage = function (documentHelper, pageNumber, imageType) {\n var image;\n if (!isNullOrUndefined(pageNumber) && pageNumber <= documentHelper.pages.length && pageNumber >= 1) {\n var printPage = documentHelper.pages[(pageNumber - 1)];\n var pgHeight = printPage.boundingRectangle.height;\n var pgWidth = printPage.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(printPage, 0, 0, 0, 0);\n //get the image data from the canvas\n var imageData = documentHelper.render.pageCanvas.toDataURL(imageType, 1);\n documentHelper.render.isPrinting = false;\n image = new Image();\n image.src = imageData;\n // tslint:disable-next-line:max-line-length\n image.setAttribute('style', 'margin:0px;display:block;width:' + pgWidth.toString() + 'px;height:' + pgHeight.toString() + 'px;');\n }\n return image;\n };\n /**\n * Generates print content.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @param {HTMLDivElement} element - Specifies the element.\n * @returns {void}\n */\n Print.prototype.generatePrintContent = function (documentHelper, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < documentHelper.pages.length; i++) {\n var page = documentHelper.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(page, 0, 0, 0, 0);\n var canvasURL = documentHelper.render.pageCanvas.toDataURL();\n documentHelper.render.isPrinting = false;\n htmlString += '

      ';\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page width.\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page height.\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n * @returns {void}\n */\n Print.prototype.destroy = function () {\n return;\n };\n return Print;\n}());\nexport { Print };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/* eslint-disable */\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartPageNumbering\", {\n get: function () {\n return this.getPropertyValue('restartPageNumbering');\n },\n set: function (value) {\n this.setPropertyValue('restartPageNumbering', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageStartingNumber\", {\n get: function () {\n return this.getPropertyValue('pageStartingNumber');\n },\n set: function (value) {\n this.setPropertyValue('pageStartingNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"endnoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('endnoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('endnoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForEndnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForEndnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForEndnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForFootnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForFootnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForFootnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footNoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('footNoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('footNoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialFootNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialFootNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialFootNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialEndNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialEndNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialEndNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageNumberStyle\", {\n get: function () {\n return this.getPropertyValue('pageNumberStyle');\n },\n set: function (value) {\n this.setPropertyValue('pageNumberStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n };\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n case 'bidi':\n value = false;\n break;\n case 'restartPageNumbering':\n value = false;\n break;\n case 'pageStartingNumber':\n value = 1;\n break;\n case 'footnotePosition':\n value = 'PrintAtBottomOfPage';\n break;\n case 'endnoteNumberFormat':\n value = 'LowerCaseRoman';\n break;\n case 'endnotePosition':\n value = 'DisplayEndOfDocument';\n break;\n case 'restartIndexForEndnotes':\n value = 'DoNotRestart';\n break;\n case 'restartIndexForFootnotes':\n value = 'DoNotRestart';\n break;\n case 'footNoteNumberFormat':\n value = 'Arabic';\n break;\n case 'initialFootNoteNumber':\n value = 1;\n break;\n case 'initialEndNoteNumber':\n value = 1;\n break;\n case 'pageNumberStyle':\n value = 'Arabic';\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bidi', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartPageNumbering', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageStartingNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footNoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForEndnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForFootnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialFootNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialEndNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageNumberStyle', property, propValue, uniqueSectionFormatTemp);\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n }\n else {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"isBorderDefined\", {\n get: function () {\n return (this.lineStyle !== 'None' ||\n (this.hasNoneStyle && this.hasValue('hasNoneStyle')));\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propValue = this.uniqueBorderFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n /* eslint-enable */\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* eslint-disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return this.lineWidth;\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return this.lineWidth;\n }\n return this.lineWidth;\n /* eslint-enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[i] >= 0) {\n borderLineArray[i] = borderLineArray[i] * lineWidth;\n }\n else {\n borderLineArray[i] = Math.abs(borderLineArray[i]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = numberOfLines * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap': //dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy': //wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap': //dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy': //wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValues = function () {\n return this.hasValue('color') || this.hasValue('lineStyle') || this.hasValue('lineWidth') || this.hasValue('shadow') || this.hasValue('space') || this.hasValue('hasNoneStyle');\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n WBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n /**\n * @private\n */\n WBorder.prototype.isEqualFormat = function (border, includeSpace) {\n var value = false;\n if (this.color === border.color && this.lineStyle === border.lineStyle && this.lineWidth === border.lineWidth && this.shadow == border.shadow) {\n value = true;\n }\n if (includeSpace) {\n value = (this.space == border.space);\n }\n return value;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n if (border.hasValue('color')) {\n this.color = border.color;\n }\n if (border.hasValue('lineStyle')) {\n this.lineStyle = border.lineStyle;\n }\n if (border.hasValue('lineWidth')) {\n this.lineWidth = border.lineWidth;\n }\n if (border.hasValue('shadow')) {\n this.shadow = border.shadow;\n }\n if (border.hasValue('space')) {\n this.space = border.space;\n }\n if (border.hasValue('hasNoneStyle')) {\n this.hasNoneStyle = border.hasNoneStyle;\n }\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WParagraphFormat } from './paragraph-format';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.isParsing = false;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('left');\n }\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('right');\n }\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('top');\n }\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('bottom');\n }\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('horizontal');\n }\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('vertical');\n }\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.getPropertyValue = function (property) {\n var border = this.getBorder(property);\n if (this.isParsing) {\n return border;\n }\n if (!border.hasValues()) {\n var baseStyle = this.ownerBase.baseStyle;\n if (!isNullOrUndefined(baseStyle)) {\n var currentFormat = this;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.ownerBase.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.borders.getBorder(property).hasValues()) {\n currentFormat = baseStyle.paragraphFormat.borders;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) &&\n (listParaFormat.borders.getBorder(property).hasValues())) {\n currentFormat = listParaFormat.borders;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n return currentFormat.getBorder(property);\n }\n }\n }\n else {\n return border;\n }\n return this.getDefaultValue(property);\n };\n WBorders.prototype.getDefaultValue = function (property) {\n var docParagraphFormat = this.documentParagraphFormat();\n var border;\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.borders)) {\n border = docParagraphFormat.borders.getBorder(property);\n }\n return border;\n };\n WBorders.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (this.ownerBase instanceof WParagraphFormat) {\n docParagraphFormat = this.ownerBase.getDocumentParagraphFormat();\n }\n return docParagraphFormat;\n };\n WBorders.prototype.getBorder = function (property) {\n var value = undefined;\n switch (property) {\n case 'left':\n return this.leftIn;\n case 'right':\n return this.rightIn;\n case 'top':\n return this.topIn;\n case 'bottom':\n return this.bottomIn;\n case 'vertical':\n return this.verticalIn;\n case 'horizontal':\n return this.horizontalIn;\n }\n return value;\n };\n /* eslint-enable */\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n }\n if (!isNullOrUndefined(this.bottomIn)) {\n this.bottomIn.destroy();\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.topIn) ? undefined : this.topIn.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottomIn) ? undefined : this.bottomIn.cloneFormat();\n borders.left = isNullOrUndefined(this.leftIn) ? undefined : this.leftIn.cloneFormat();\n borders.right = isNullOrUndefined(this.rightIn) ? undefined : this.rightIn.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontalIn) ? undefined : this.horizontalIn.cloneFormat();\n borders.vertical = isNullOrUndefined(this.verticalIn) ? undefined : this.verticalIn.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.getBorder('left')) && borders.getBorder('left') instanceof WBorder) {\n var left = new WBorder(this);\n left.copyFormat(borders.getBorder('left'));\n this.left = left;\n }\n if (!isNullOrUndefined(borders.getBorder('right')) && borders.getBorder('right') instanceof WBorder) {\n var right = new WBorder(this);\n right.copyFormat(borders.getBorder('right'));\n this.right = right;\n }\n if (!isNullOrUndefined(borders.getBorder('top')) && borders.getBorder('top') instanceof WBorder) {\n var top_1 = new WBorder(this);\n top_1.copyFormat(borders.getBorder('top'));\n this.top = top_1;\n }\n if (!isNullOrUndefined(borders.getBorder('bottom')) && borders.getBorder('bottom') instanceof WBorder) {\n var bottom = new WBorder(this);\n bottom.copyFormat(borders.getBorder('bottom'));\n this.bottom = bottom;\n }\n if (!isNullOrUndefined(borders.getBorder('horizontal')) && borders.getBorder('horizontal') instanceof WBorder) {\n var horizontal = new WBorder(this);\n horizontal.copyFormat(borders.getBorder('horizontal'));\n this.horizontal = horizontal;\n }\n if (!isNullOrUndefined(borders.getBorder('vertical')) && borders.getBorder('vertical') instanceof WBorder) {\n var vertical = new WBorder(this);\n vertical.copyFormat(borders.getBorder('vertical'));\n this.vertical = vertical;\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n WLevelOverride.prototype.clone = function () {\n var levelOverride = new WLevelOverride();\n levelOverride.startAt = this.startAt;\n levelOverride.levelNumber = this.levelNumber;\n if (!isNullOrUndefined(this.overrideListLevel)) {\n levelOverride.overrideListLevel = this.overrideListLevel.clone(levelOverride);\n }\n return levelOverride;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[levelNumber];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[i] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[i];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n this.levelOverrides = [];\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n this.levelOverrides = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n WList.prototype.clone = function () {\n var list = new WList();\n for (var i = 0; i < this.levelOverrides.length; i++) {\n list.levelOverrides.push(this.levelOverrides[i].clone());\n }\n return list;\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/* eslint-disable */\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n if (listId >= 0) {\n if (!isNullOrUndefined(this.ownerBase)) {\n var helper = this.ownerBase.getDocumentHelperObject();\n if (!isNullOrUndefined(helper)) {\n this.list = helper.getListById(listId);\n }\n }\n }\n else if (!isNullOrUndefined(this.list) && listId < 0) {\n this.list = undefined;\n }\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle) && baseListStyle instanceof WParagraphStyle) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.prototype.cloneListFormat = function () {\n var format = new WListFormat(undefined);\n format.list = this.list;\n format.listId = this.listId;\n format.baseStyle = this.baseStyle;\n format.listLevelNumber = this.listLevelNumber;\n format.uniqueListFormat = this.uniqueListFormat;\n return format;\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WBorders } from './borders';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { ParagraphWidget, BodyWidget, TableCellWidget } from '../viewer/page';\nimport { WParagraphStyle } from './style';\n/* eslint-disable */\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.borders = new WBorders(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n var tabStops = new Dictionary();\n var tabsInListFormat = this.getTabStopsFromListFormat();\n for (var _i = 0, tabsInListFormat_1 = tabsInListFormat; _i < tabsInListFormat_1.length; _i++) {\n var tabStop = tabsInListFormat_1[_i];\n if (!tabStops.containsKey(tabStop.position)) {\n tabStops.add(tabStop.position, tabStop);\n }\n }\n if (!isNullOrUndefined(this.baseStyle) && this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n for (var _a = 0, _b = baseStyle.paragraphFormat.tabs; _a < _b.length; _a++) {\n var tab = _b[_a];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _c = 0, _d = tabStops.keys; _c < _d.length; _c++) {\n var key = _d[_c];\n if (!this.hasTabStop(parseFloat(key.toFixed(4)))) {\n inTabs.push(tabStops.get(key));\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n }\n return inTabs;\n };\n WParagraphFormat.prototype.getTabStopsFromListFormat = function () {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n if (level && level.paragraphFormat) {\n return level.paragraphFormat.tabs;\n }\n }\n return [];\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (parseFloat(this.tabs[i].position.toFixed(4)) === position ||\n parseFloat(this.tabs[i].deletePosition.toFixed(4)) === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceBeforeAuto\", {\n get: function () {\n return this.getPropertyValue('spaceBeforeAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceBeforeAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceAfterAuto\", {\n get: function () {\n return this.getPropertyValue('spaceAfterAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceAfterAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n var value = this.getPropertyValue('textAlignment');\n if (this.bidi) {\n if (value === 'Left') {\n value = 'Right';\n }\n else if (value === 'Right') {\n value = 'Left';\n }\n }\n return value;\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepWithNext\", {\n get: function () {\n return this.getPropertyValue('keepWithNext');\n },\n set: function (value) {\n this.setPropertyValue('keepWithNext', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepLinesTogether\", {\n get: function () {\n return this.getPropertyValue('keepLinesTogether');\n },\n set: function (value) {\n this.setPropertyValue('keepLinesTogether', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"widowControl\", {\n get: function () {\n return this.getPropertyValue('widowControl');\n },\n set: function (value) {\n this.setPropertyValue('widowControl', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"contextualSpacing\", {\n get: function () {\n return this.getPropertyValue('contextualSpacing');\n },\n set: function (value) {\n this.setPropertyValue('contextualSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n var paragraphFormat = this.getListPargaraphFormat(property);\n if (!isNullOrUndefined(paragraphFormat)) {\n return paragraphFormat.uniqueParagraphFormat.propertiesHash.get(WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property));\n }\n return undefined;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getListPargaraphFormat = function (property) {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) &&\n level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var formatInList = this.getListFormatParagraphFormat(property);\n if (this.baseStyle instanceof WParagraphStyle) {\n var currentFormat = this;\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.hasValue(property)) {\n currentFormat = baseStyle.paragraphFormat;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) && listParaFormat.hasValue(property)) {\n currentFormat = listParaFormat;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n if (!isNullOrUndefined(formatInList) && this.listFormat.listId !== -1\n && currentFormat.listFormat.listId === -1 && currentFormat.listFormat.listLevelNumber <= 1\n || !isNullOrUndefined(formatInList) && this.listFormat.listId !== currentFormat.listFormat.listId\n && currentFormat.listFormat.listLevelNumber <= 1) {\n return formatInList;\n }\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return currentFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n if (!isNullOrUndefined(formatInList)) {\n return formatInList;\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.getDocumentParagraphFormat();\n var isInsideBodyWidget = true;\n if (this.ownerBase && this.ownerBase instanceof ParagraphWidget) {\n isInsideBodyWidget = this.ownerBase.containerWidget instanceof BodyWidget ||\n this.ownerBase.containerWidget instanceof TableCellWidget;\n }\n var isPaste = !isNullOrUndefined(this.ownerBase) && !isNullOrUndefined(this.ownerBase.bodyWidget)\n && this.ownerBase.bodyWidget.page && !isNullOrUndefined(this.ownerBase.bodyWidget.page.documentHelper) && this.ownerBase.bodyWidget.page.documentHelper.owner.editor\n && this.ownerBase.bodyWidget.page.documentHelper.owner.editor.isPaste;\n if (isInsideBodyWidget && !isPaste\n && !isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat)) {\n var propValue = docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n return WParagraphFormat.getPropertyDefaultValue(property);\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n var documentHelper = this.getDocumentHelperObject();\n if (!isNullOrUndefined(documentHelper)) {\n docParagraphFormat = documentHelper.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentHelperObject = function () {\n var documentHelper;\n if (this.ownerBase instanceof ParagraphWidget) {\n var bodyWidget = this.ownerBase.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.documentHelper)) {\n documentHelper = bodyWidget.page.documentHelper;\n }\n }\n return documentHelper;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value, clearProperty) {\n if (isNullOrUndefined(value) || value === '' && !clearProperty) {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceBeforeAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceAfterAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('bidi', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('contextualSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepWithNext', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepLinesTogether', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('widowControl', property, propValue, uniqueParaFormatTemp);\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'spaceBeforeAuto':\n value = false;\n break;\n case 'spaceAfterAuto':\n value = false;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n case 'bidi':\n value = false;\n break;\n case 'contextualSpacing':\n value = false;\n break;\n case 'keepWithNext':\n value = false;\n break;\n case 'keepLinesTogether':\n value = false;\n break;\n case 'widowControl':\n value = true;\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearIndent = function () {\n this.clearPropertyValue('leftIndent');\n this.clearPropertyValue('firstLineIndent');\n };\n WParagraphFormat.prototype.clearPropertyValue = function (property) {\n this.setPropertyValue(property, undefined, true);\n if (!isNullOrUndefined(this.uniqueParagraphFormat)) {\n var key = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(key)) {\n this.uniqueParagraphFormat.propertiesHash.remove(key);\n }\n }\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n this.baseStyle = undefined;\n };\n WParagraphFormat.prototype.destroy = function () {\n this.clearFormat();\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs !== undefined) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = undefined;\n }\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n this.borders = undefined;\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.borders)) {\n //this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = this.listFormat.cloneListFormat();\n format.listFormat.ownerBase = format;\n }\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n return format;\n };\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.applyStyle(this.baseStyle);\n };\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WParagraphFormat.prototype.mergeFormat = function (format, isStyle) {\n isStyle = isNullOrUndefined(isStyle) ? false : isStyle;\n if (isNullOrUndefined(this.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('spaceBeforeAuto'))) {\n this.spaceBeforeAuto = format.getValue('spaceBeforeAuto');\n }\n if (isNullOrUndefined(this.getValue('spaceAfterAuto'))) {\n this.spaceAfterAuto = format.getValue('spaceAfterAuto');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (!isStyle && isNullOrUndefined(this.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('contextualSpacing'))) {\n this.contextualSpacing = format.getValue('contextualSpacing');\n }\n if (isNullOrUndefined(this.getValue('keepWithNext'))) {\n this.keepWithNext = format.getValue('keepWithNext');\n }\n if (isNullOrUndefined(this.getValue('keepLinesTogether'))) {\n this.keepLinesTogether = format.getValue('keepLinesTogether');\n }\n if (isNullOrUndefined(this.getValue('widowControl'))) {\n this.widowControl = format.getValue('widowControl');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.removedIds = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('rightMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('topMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('bottomMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftIndent', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'leftIndent':\n value = 0;\n break;\n }\n return value;\n };\n WRowFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.leftIndent = this.leftIndent;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WRowFormat } from '../format/row-format';\n/**\n * The revision class which holds the information related to changes made in the document\n */\nvar Revision = /** @class */ (function () {\n function Revision(documentHelper, author, date) {\n /**\n * Gets or sets the author name who made the change\n *\n * @private\n */\n this.author = null;\n /**\n * Indicates when the track changes made\n *\n * @private\n */\n this.date = null;\n /**\n * Holds the reference of the items which are under this revision.\n *\n * @private\n */\n this.range = [];\n /**\n * @private\n */\n this.revisionID = '';\n /**\n * Used to update cursor position by ensuring items were removed or not\n */\n this.isContentRemoved = false;\n this.isTableRevision = false;\n /**\n * Indicates whether to skip unlinking ranges for table elements.\n */\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n this.author = author;\n this.date = date;\n this.owner = documentHelper;\n }\n Revision.prototype.handleAcceptReject = function (isFromAccept) {\n this.owner.selection.selectRevision(this);\n var selection = this.owner.selection;\n var startPos = selection.start;\n var endPos = selection.end;\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n var blockInfo = selection.getParagraphInfo(startPos);\n this.owner.editor.initHistory(isFromAccept ? 'Accept Change' : 'Reject Change');\n if (this.revisionType === 'Deletion') {\n blockInfo = selection.getParagraphInfo(this.owner.selection.start);\n selection.editPosition = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n selection.editPosition = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.owner.editor.updateInsertPosition();\n this.isContentRemoved = false;\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n // Implement to accept/reject the revision\n if (this.revisionType === 'Insertion' || this.revisionType === 'Deletion' || this.revisionType === 'MoveFrom' || this.revisionType === 'MoveTo') {\n var rangeIndex = 0;\n while (this.range.length > 0) {\n if (this.range[rangeIndex] instanceof ElementBox || this.range[rangeIndex] instanceof WCharacterFormat || this.range[rangeIndex] instanceof WRowFormat) {\n var moveToNextItem = this.unlinkRangeItem(this.range[rangeIndex], this, isFromAccept);\n if (moveToNextItem) {\n rangeIndex++;\n }\n else {\n rangeIndex = 0;\n }\n }\n else {\n break;\n }\n }\n }\n this.isTableRevision = false;\n if (this.isContentRemoved) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selection.selectContent(textPosition, true);\n this.owner.editor.updateEndPosition();\n }\n else {\n selection.selectRange(startPos, endPos);\n this.owner.editor.updateHistoryPosition(endPos, false);\n }\n if (this.owner.editorHistory && this.owner.editorHistory.currentBaseHistoryInfo.action !== 'BackSpace') {\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.reverse();\n }\n if (this.owner.editorHistory) {\n if (this.owner.trackChangesPane.isTrackingPageBreak) {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'TrackingPageBreak';\n }\n var editorHistory = this.owner.editorHistory;\n if (editorHistory.currentHistoryInfo && (editorHistory.currentHistoryInfo.action === 'Accept All' || editorHistory.currentHistoryInfo.action === 'Reject All')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n editorHistory.updateHistory();\n }\n this.owner.editor.reLayout(this.owner.selection);\n if (blockInfo.paragraph.isInHeaderFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n Revision.prototype.handleGroupAcceptReject = function (isAccept) {\n if (this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.owner.editor.initComplexHistory(isAccept ? 'Accept All' : 'Reject All');\n var groupingAcceptReject = this.owner.trackChangesPane.tableRevisions.get(this);\n for (var i = 0; i < groupingAcceptReject.length; i++) {\n if (isAccept) {\n groupingAcceptReject[i].handleAcceptReject(true);\n }\n else {\n groupingAcceptReject[i].handleAcceptReject(false);\n }\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n /**\n * Method which accepts the selected revision, revision marks will be removed and changes will be included in the viewer.\n *\n * @returns {void}\n */\n Revision.prototype.accept = function () {\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(true);\n }\n else {\n this.handleAcceptReject(true);\n }\n }\n };\n /**\n * Method which rejects the selected revision, revision marks will be removed leaving the original content.\n */\n Revision.prototype.reject = function () {\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(false);\n }\n else {\n this.handleAcceptReject(false);\n }\n }\n };\n /**\n * Unlinks revision and its assosiated range\n * @private\n * @param item\n * @param revision\n * @param isFromAccept\n */\n /* eslint-disable */\n Revision.prototype.unlinkRangeItem = function (item, revision, isFromAccept) {\n if (this.isTableRevision) {\n this.removeRangeRevisionForItem(item);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n }\n var removeChanges = (!isNullOrUndefined(isFromAccept)) && ((revision.revisionType === 'MoveFrom' || revision.revisionType === 'Deletion') && isFromAccept) || ((revision.revisionType === 'Insertion' || revision.revisionType === 'MoveTo') && !isFromAccept);\n if (this.owner.selection.isTOC()) {\n if (removeChanges) {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n this.isContentRemoved = true;\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'BackSpace';\n }\n else {\n while (this.range.length > 0) {\n var currentElement = this.range[0];\n this.removeRangeRevisionForItem(currentElement);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n }\n this.owner.editor.addRemovedNodes(this.revisionID);\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'AcceptTOC';\n }\n return false;\n }\n if (item instanceof ElementBox && !this.canSkipTableItems) {\n if (removeChanges) {\n if (!this.skipeElementRemoval(item)) {\n this.owner.editor.addRemovedNodes(item.clone());\n }\n else {\n this.skipUnLinkElement = true;\n return true;\n }\n }\n else {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n }\n }\n else if (!this.canSkipTableItems && (item instanceof WCharacterFormat) && (!removeChanges)) {\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n }\n else if (item instanceof WRowFormat && !removeChanges) {\n this.isTableRevision = true;\n var tableWidget = item.ownerBase.ownerTable;\n var currentRow = item.ownerBase;\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n this.owner.editor.cloneTableToHistoryInfo(tableWidget);\n }\n removeChanges = removeChanges && !this.canSkipTableItems;\n if (item instanceof ElementBox && removeChanges) {\n var currentPara = item.line.paragraph;\n this.removeRevisionItemsFromRange(item);\n this.removeItem(item);\n this.isContentRemoved = true;\n this.owner.documentHelper.layout.reLayoutParagraph(currentPara, 0, 0);\n }\n else if (item instanceof WCharacterFormat && removeChanges) {\n this.isContentRemoved = true;\n this.skipUnLinkElement = false;\n this.removeRevisionItemsFromRange(item);\n if (revision.range.length === 1) {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n }\n else {\n this.owner.editor.deleteSelectedContents(this.owner.selection, true);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n }\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'BackSpace';\n }\n else if (item instanceof WRowFormat && removeChanges) {\n var tableWidget = item.ownerBase.ownerTable;\n var currentRow = item.ownerBase;\n this.removeRevisionItemsFromRange(item);\n this.owner.editorHistory.currentBaseHistoryInfo.action = 'DeleteCells';\n this.owner.editor.cloneTableToHistoryInfo(tableWidget);\n this.owner.editor.removeDeletedCellRevision(currentRow);\n this.isContentRemoved = true;\n tableWidget.removeChild(tableWidget.childWidgets.indexOf(currentRow));\n this.canSkipTableItems = true;\n // Before destroying the table row widget, delete the bookmark element from the row.\n this.owner.editor.removeFieldInBlock(currentRow, true);\n // Before destroying the table row widget, delete the content control element from the row.\n this.owner.editor.removeFieldInBlock(currentRow, undefined, true);\n currentRow.destroy();\n if (tableWidget.childWidgets.length === 0) {\n this.owner.selection.editPosition = this.owner.selection.getHierarchicalIndex(tableWidget, '0');\n this.owner.editor.removeBlock(tableWidget);\n tableWidget.destroy();\n }\n else {\n this.owner.editor.updateTable(tableWidget);\n }\n }\n // if the range is of row format, we will remove the row and for history preservation we use whole table to be cloned, hence skipping this part\n if (!(item instanceof WRowFormat) || !removeChanges) {\n if (!this.skipUnLinkElement) {\n this.removeRangeRevisionForItem(item);\n }\n }\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n };\n Revision.prototype.updateRevisionID = function () {\n this.owner.editor.addRemovedNodes(this.revisionID);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRevisionItemsFromRange = function (item) {\n if (item.revisions.length > 0) {\n for (var revisionIndex = 0; revisionIndex < item.revisions.length; revisionIndex++) {\n var currentRevision = item.revisions[revisionIndex];\n if (this.revisionID !== currentRevision.revisionID) {\n var rangeIndex = currentRevision.range.indexOf(item);\n item.revisions[revisionIndex].range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n };\n /**\n * Method to clear linked ranges in revision\n *\n * @private\n * @param {any} item - Specifies the item\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRangeRevisionForItem = function (item) {\n var revisionIndex = item.revisions.indexOf(this);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = this.range.indexOf(item);\n this.range.splice(rangeIndex, 1);\n }\n };\n /**\n * @private\n * @param {Element} element - Specifies the element.\n * @returns {boolean} Resturs skip element removal\n */\n Revision.prototype.skipeElementRemoval = function (element) {\n var elementPara = element.paragraph;\n if (elementPara.characterFormat.revisions.length > 0) {\n for (var i = 0; i < elementPara.characterFormat.revisions.length; i++) {\n var currentRevision = elementPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(element);\n if (rangeIndex >= 0) {\n return true;\n }\n }\n }\n return false;\n };\n Revision.prototype.removeRevisionFromRow = function (row) {\n this.owner.editor.unlinkRangeFromRevision(row.rowFormat);\n //this.owner.editor.addRemovedRevisionInfo(row.rowFormat, undefined);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n this.owner.editor.removeRevisionForCell(cellWidget, false);\n }\n };\n Revision.prototype.removeItem = function (element) {\n var paraWidget = element.line.paragraph;\n this.owner.editor.unLinkFieldCharacter(element);\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n this.owner.editor.removeEmptyLine(paraWidget);\n };\n Revision.prototype.canSkipCloning = function () {\n if (!isNullOrUndefined(this.owner) && this.owner.editorHistory && this.owner.editorHistory.currentBaseHistoryInfo) {\n var baseHistoryInfo = this.owner.editorHistory.currentBaseHistoryInfo;\n if (baseHistoryInfo.action === 'DeleteCells') {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {Revision} - Returns revision\n */\n Revision.prototype.clone = function () {\n if (this.canSkipCloning()) {\n return this;\n }\n var revision = new Revision(undefined, this.author, this.date);\n revision.revisionID = this.revisionID;\n revision.revisionType = this.revisionType;\n return revision;\n };\n /**\n * Method to clone the revisions for the element\n *\n * @param {Revision[]} revisions - revision array.\n * @returns {string[]} - returns clones revisions.\n */\n Revision.cloneRevisions = function (revisions) {\n var clonedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n clonedRevisions.push(revisions[i].revisionID);\n }\n return clonedRevisions;\n };\n return Revision;\n}());\nexport { Revision };\n/**\n * Represents the revision collections in the document.\n */\nvar RevisionCollection = /** @class */ (function () {\n function RevisionCollection(owner) {\n /**\n * @private\n */\n this.changes = [];\n /**\n * @private\n */\n this.skipGroupAcceptReject = false;\n this.owner = owner;\n }\n /**\n * @private\n */\n RevisionCollection.prototype.get = function (index) {\n if (index >= this.changes.length || index < 0) {\n throw new ReferenceError('Provided index is not within the range');\n }\n return this.changes[index];\n };\n Object.defineProperty(RevisionCollection.prototype, \"length\", {\n get: function () {\n return this.changes.length;\n },\n enumerable: true,\n configurable: true\n });\n RevisionCollection.prototype.remove = function (revision) {\n if (isNullOrUndefined(revision) || this.changes.indexOf(revision) < 0) {\n return;\n }\n this.changes.splice(this.changes.indexOf(revision), 1);\n };\n /**\n * Method which accepts all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.acceptAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(true);\n }\n };\n /**\n * Method which rejects all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.rejectAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(false);\n }\n };\n /**\n * @private\n * @param {boolean} isfromAcceptAll - Specifies the is accept all.\n * @param {Revision[]} changes - Specifies the revisions.\n * @returns {void}\n */\n RevisionCollection.prototype.handleRevisionCollection = function (isfromAcceptAll, changes) {\n this.skipGroupAcceptReject = true;\n var selection = this.owner.selection;\n var startPos = selection.start;\n var endPos = selection.end;\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n startPos = startPos.clone();\n endPos = endPos.clone();\n if (isfromAcceptAll) {\n this.owner.editor.initComplexHistory('Accept All');\n }\n else {\n this.owner.editor.initComplexHistory('Reject All');\n }\n var revisionCollec = changes ? changes : this.changes;\n while (revisionCollec.length > 0) {\n if (isfromAcceptAll) {\n revisionCollec[0].accept();\n }\n else {\n revisionCollec[0].reject();\n }\n if (changes) {\n revisionCollec.splice(0, 1);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n }\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selection.selectContent(textPosition, true);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n this.owner.editor.reLayout(this.owner.selection, false);\n this.skipGroupAcceptReject = false;\n };\n RevisionCollection.prototype.destroy = function () {\n this.changes = [];\n this.owner = undefined;\n };\n return RevisionCollection;\n}());\nexport { RevisionCollection };\n","import { TextElementBox, ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.revisions = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"localeIdBidi\", {\n get: function () {\n return this.getPropertyValue('localeIdBidi');\n },\n set: function (value) {\n this.setPropertyValue('localeIdBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bdo\", {\n get: function () {\n return this.getPropertyValue('bdo');\n },\n set: function (value) {\n this.setPropertyValue('bdo', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"boldBidi\", {\n get: function () {\n return this.getPropertyValue('boldBidi');\n },\n set: function (value) {\n this.setPropertyValue('boldBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italicBidi\", {\n get: function () {\n return this.getPropertyValue('italicBidi');\n },\n set: function (value) {\n this.setPropertyValue('italicBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSizeBidi\", {\n get: function () {\n return this.getPropertyValue('fontSizeBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontSizeBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyBidi\", {\n get: function () {\n return this.getPropertyValue('fontFamilyBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"allCaps\", {\n get: function () {\n return this.getPropertyValue('allCaps');\n },\n set: function (value) {\n this.setPropertyValue('allCaps', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n if (!isNullOrUndefined(this.baseCharStyle)) {\n var paragraph = this.ownerBase.paragraph;\n var line = this.ownerBase.line;\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(line)) {\n var length_1 = line.children.length;\n for (var i = 0; i < length_1; i++) {\n var element = this.ownerBase.line.children[i];\n if (element instanceof TextElementBox) {\n var text = element.text;\n if (text.startsWith('HYPERLINK')) {\n var index = text.indexOf('_Toc');\n if (index !== -1) {\n this.baseCharStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n }\n }\n }\n }\n }\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph) && !isNullOrUndefined(this.ownerBase.paragraph.bodyWidget)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.documentHelper.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.documentHelper.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bdo', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSizeBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('boldBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italicBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('allCaps', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('localeIdBidi', property, propValue, uniqueCharFormatTemp);\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#00000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n case 'bidi':\n value = false;\n break;\n case 'bdo':\n value = 'None';\n break;\n case 'boldBidi':\n value = false;\n break;\n case 'italicBidi':\n value = false;\n break;\n case 'fontSizeBidi':\n value = 11;\n break;\n case 'fontFamilyBidi':\n value = 'Calibri';\n break;\n case 'allCaps':\n value = false;\n break;\n case 'localeIdBidi':\n value = 0;\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor && this.bidi === format.bidi\n && this.bdo === format.bdo)\n && this.allCaps === format.allCaps\n && this.localeIdBidi === format.localeIdBidi;\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.applyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic'))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n if (isNullOrUndefined(this.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('bdo'))) {\n this.bdo = format.getValue('bdo');\n }\n if (isNullOrUndefined(this.getValue('allCaps'))) {\n this.allCaps = format.getValue('allCaps');\n }\n if (isNullOrUndefined(this.getValue('localeIdBidi'))) {\n this.localeIdBidi = format.getValue('localeIdBidi');\n }\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined, Internationalization } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n *\n * @private\n * @param {string} spanText - Specifies the span text.\n * @param {number} index - Specifies the index\n * @param {string} text - Specifies the text\n * @returns {string} - Returns modified string\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * Removes text from specified index in string.\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {number} index - Specifies the index\n * @returns {string} - Returns modified string\n */\n HelperMethods.remove = function (text, index) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[j]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[i] === wordSplitCharacter[j]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Convert ARGB to RGB\n * @private\n * @param {string} color\n * @returns {string}\n */\n HelperMethods.convertArgbToRgb = function (color) {\n if (color.length >= 8) {\n return color.substr(0, 6);\n }\n return color;\n };\n HelperMethods.convertRgbToHex = function (val) {\n var hex = Number(val).toString(16);\n if (hex.length < 2) {\n hex = '0' + hex;\n }\n return hex;\n };\n HelperMethods.convertHexToRgb = function (colorCode) {\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n var r = (colCodeNo >> 16) & 255;\n var g = (colCodeNo >> 8) & 255;\n var b = colCodeNo & 255;\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n HelperMethods.isVeryDark = function (backColor) {\n var backgroundColor = backColor.substring(1);\n var r = parseInt(backgroundColor.substr(0, 2), 16);\n var g = parseInt(backgroundColor.substr(2, 2), 16);\n var b = parseInt(backgroundColor.substr(4, 2), 16);\n var contrast = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n return contrast <= 60;\n };\n HelperMethods.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n HelperMethods.convertPointToPixel = function (point) {\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n *\n * @private\n * @param {string} text - Specifies the text.\n * @returns {boolean} - Returns true if text ends with specified text.\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n HelperMethods.addSpace = function (length) {\n var str = '';\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n str += ' ';\n }\n }\n return str;\n };\n /* eslint-disable */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format) {\n characterFormat.bold = isInline ? format.bold : format.getValue('bold');\n characterFormat.italic = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSize = isInline ? this.toWriteInline(format, 'fontSize') : format.getValue('fontSize');\n characterFormat.fontFamily = isInline ? this.toWriteInline(format, 'fontFamily') : format.getValue('fontFamily');\n characterFormat.underline = isInline ? format.underline : format.getValue('underline');\n characterFormat.strikethrough = isInline ? format.strikethrough : format.getValue('strikethrough');\n characterFormat.baselineAlignment = isInline ? format.baselineAlignment : format.getValue('baselineAlignment');\n characterFormat.highlightColor = isInline ? format.highlightColor : format.getValue('highlightColor');\n characterFormat.fontColor = isInline ? this.toWriteInline(format, 'fontColor') : format.getValue('fontColor');\n characterFormat.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n characterFormat.bidi = isInline ? format.bidi : format.getValue('bidi');\n characterFormat.bdo = isInline ? format.bdo : format.getValue('bdo');\n characterFormat.boldBidi = isInline ? format.boldBidi : format.getValue('boldBidi');\n characterFormat.italicBidi = isInline ? format.italicBidi : format.getValue('italicBidi');\n characterFormat.fontSizeBidi = isInline ? format.fontSizeBidi : format.getValue('fontSizeBidi');\n characterFormat.fontFamilyBidi = isInline ? format.fontFamilyBidi : format.getValue('fontFamilyBidi');\n characterFormat.allCaps = isInline ? format.allCaps : format.getValue('allCaps');\n characterFormat.localeIdBidi = isInline ? format.localeIdBidi : format.getValue('localeIdBidi');\n };\n HelperMethods.toWriteInline = function (format, propertyName) {\n if (!isNullOrUndefined(format.ownerBase) && (format.ownerBase instanceof ElementBox)) {\n return format.hasValue(propertyName) ? format[propertyName] : format.getValue(propertyName);\n }\n else {\n return format[propertyName];\n }\n };\n /* eslint-enable */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n HelperMethods.reverseString = function (text) {\n if (!isNullOrUndefined(text) && text !== '') {\n // return a new array\n var splitString = text.split('');\n // reverse the new created array\n var reverseString = splitString.reverse();\n // join all elements of the array into a string\n text = reverseString.join('');\n }\n return text;\n };\n HelperMethods.formatClippedString = function (base64ImageString) {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/svg+xml;base64,')) {\n extension = '.svg';\n formatClippedString = base64ImageString.replace('data:image/svg+xml;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n return { 'extension': extension, 'formatClippedString': formatClippedString };\n };\n HelperMethods.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n HelperMethods.formatText = function (format, value) {\n var text = value;\n switch (format.toLowerCase()) {\n case 'uppercase':\n text = value.toUpperCase();\n break;\n case 'lowercase':\n text = value.toLowerCase();\n break;\n case 'firstlower':\n text = this.lowerFirstChar(value);\n break;\n case 'firstcapital':\n text = this.capitaliseFirst(value, 'FirstCapital');\n break;\n case 'titlecase':\n text = this.capitaliseFirst(value, 'Titlecase');\n break;\n }\n return text;\n };\n HelperMethods.formatNumber = function (format, value) {\n var intl = new Internationalization();\n var dotData = value.split('.');\n value = dotData[0];\n var numberValue = intl.parseNumber(value);\n if (value.toString() === 'NaN') {\n return '';\n }\n if (format === '') {\n format = '0';\n }\n var numberFormat = { format: format };\n return intl.formatNumber(numberValue, numberFormat);\n };\n HelperMethods.formatDate = function (format, value) {\n var intl = new Internationalization();\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return '';\n }\n if (format === '') {\n return value;\n }\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n var dateFormat = { 'format': format };\n return intl.formatDate(date, dateFormat);\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n HelperMethods.capitaliseFirst = function (value, type, splitBy) {\n var text = '';\n if (type === 'Titlecase') {\n var valArry = splitBy ? value.split(splitBy) : value.split(' ');\n for (var i = 0; i < valArry.length; i++) {\n /* eslint-disable-next-line max-len */\n text += splitBy ? valArry[i].charAt(0).toUpperCase() + valArry[i].slice(1, valArry[i].length) : this.capitaliseFirstInternal(valArry[i]);\n if (valArry.length >= 0 && !splitBy) {\n text += ' ';\n }\n }\n if (!splitBy) {\n text = this.capitaliseFirst(text, 'Titlecase', '\\r');\n }\n }\n else if (type === 'FirstCapital') {\n text = this.capitaliseFirstInternal(value);\n }\n return text;\n };\n HelperMethods.lowerFirstChar = function (value) {\n return (value.charAt(0).toLowerCase() + value.slice(1, value.length));\n };\n HelperMethods.capitaliseFirstInternal = function (value) {\n return (value.charAt(0).toUpperCase() + value.slice(1, value.length).toLowerCase());\n };\n HelperMethods.getModifiedDate = function (date) {\n var modifiedDate = HelperMethods.getLocaleDate(date);\n var dateString = modifiedDate.toLocaleDateString([], { year: 'numeric', month: 'long', day: 'numeric' });\n var time = modifiedDate.toLocaleTimeString([], { hour: 'numeric', minute: 'numeric' });\n var dateTime = dateString + ' ' + time;\n return dateTime;\n };\n HelperMethods.getUtcDate = function () {\n var now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();\n };\n HelperMethods.getLocaleDate = function (date) {\n var dt = new Date(date);\n return new Date(dt.getTime() + dt.getTimezoneOffset() * 60000);\n };\n HelperMethods.getCompatibilityModeValue = function (compatibilityMode) {\n var compatValue;\n switch (compatibilityMode) {\n case 'Word2003':\n compatValue = '11';\n break;\n case 'Word2007':\n compatValue = '12';\n break;\n case 'Word2010':\n compatValue = '14';\n break;\n default:\n compatValue = '15';\n break;\n }\n return compatValue;\n };\n /**\n * @private\n * @returns {string} - Returns the unique id for document editor.\n */\n HelperMethods.getUniqueElementId = function () {\n return 'de_element' + Date.now().toString(36) + Math.random().toString(36).substring(2);\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”', ' ', '،', '؟', '؛', '’', '‘'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n *\n * @returns {void}\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n/**\n * @private\n */\nvar Base64 = /** @class */ (function () {\n function Base64() {\n this.keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n }\n // public method for encoding\n Base64.prototype.encodeString = function (input) {\n var output = '';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n input = this.unicodeEncode(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n }\n else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output +\n this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +\n this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4);\n }\n return output;\n };\n // private method for UTF-8 encoding\n Base64.prototype.unicodeEncode = function (input) {\n var tempInput = input.replace(/\\r\\n/g, '\\n');\n var utftext = '';\n for (var n = 0; n < tempInput.length; n++) {\n var c = tempInput.charCodeAt(n);\n if (c < 128) {\n utftext += String.fromCharCode(c);\n }\n else if ((c > 127) && (c < 2048)) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n return utftext;\n };\n Base64.prototype.decodeString = function (input) {\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9+/=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = this.keyStr.indexOf(input.charAt(i++));\n enc2 = this.keyStr.indexOf(input.charAt(i++));\n enc3 = this.keyStr.indexOf(input.charAt(i++));\n enc4 = this.keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n /**\n * @private\n * @returns {void}\n */\n Base64.prototype.destroy = function () {\n this.keyStr = undefined;\n };\n return Base64;\n}());\nexport { Base64 };\n/**\n * @private\n */\nvar WrapPosition = /** @class */ (function () {\n function WrapPosition(x, width) {\n this.x = 0;\n this.width = 0;\n this.x = x;\n this.width = width;\n }\n Object.defineProperty(WrapPosition.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n return WrapPosition;\n}());\nexport { WrapPosition };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WParagraphStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n this.paragraphFormat.destroy();\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WCharacterStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[index];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n while (this.collection.length > 0) {\n this.collection.pop();\n }\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type) && value.type === type) {\n returnStyle = value;\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a.name;\n });\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a;\n });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/* eslint-disable */\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = 'empty';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = undefined;\n this._styleName = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"allowAutoFit\", {\n get: function () {\n return this.getPropertyValue('allowAutoFit');\n },\n set: function (value) {\n this.setPropertyValue('allowAutoFit', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPositionAbs\", {\n get: function () {\n return this.getPropertyValue('horizontalPositionAbs');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPositionAbs', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPosition\", {\n get: function () {\n return this.getPropertyValue('horizontalPosition');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPosition', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"styleName\", {\n get: function () {\n return this._styleName;\n },\n set: function (value) {\n this._styleName = value;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('allowAutoFit', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bidi', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPositionAbs', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPosition', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowAutoFit':\n value = false;\n break;\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n case 'bidi':\n value = false;\n break;\n case 'horizontalPositionAbs':\n value = null;\n break;\n case 'horizontalPosition':\n value = 0;\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.horizontalPositionAbs = this.horizontalPositionAbs;\n tableFormat.horizontalPosition = this.horizontalPosition;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n tableFormat.bidi = this.bidi;\n tableFormat.allowAutoFit = this.allowAutoFit;\n tableFormat.styleName = this.styleName;\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n this.allowAutoFit = format.allowAutoFit;\n this.horizontalPosition = format.horizontalPosition;\n this.horizontalPositionAbs = format.horizontalPositionAbs;\n this.styleName = format.styleName;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[i];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n WAbstractList.prototype.clone = function () {\n var absList = new WAbstractList();\n for (var i = 0; i < this.levels.length; i++) {\n absList.levels.push(this.levels[i].clone(absList));\n }\n return absList;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n /* eslint-disable */\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n }\n return value;\n /* eslint-enable */\n };\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n }\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.prototype.clone = function (node) {\n var listLevel = new WListLevel(node);\n listLevel.paragraphFormat = this.paragraphFormat.cloneFormat();\n listLevel.characterFormat = this.characterFormat.cloneFormat();\n if (this.uniqueListLevel) {\n listLevel.uniqueListLevel = this.uniqueListLevel;\n listLevel.uniqueListLevel.referenceCount++;\n }\n return listLevel;\n };\n WListLevel.dotBullet = String.fromCharCode(61623);\n WListLevel.squareBullet = String.fromCharCode(61607); //Symbol font \\u25aa.\n WListLevel.arrowBullet = String.fromCharCode(10148);\n WListLevel.circleBullet = String.fromCharCode(61551) + String.fromCharCode(32);\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { CharacterRangeType } from '../../base/types';\nimport { HelperMethods, Point, WrapPosition } from '../editor/editor-helper';\nimport { WBorder, WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WListLevel } from '../list/list-level';\nimport { BlockContainer, BlockWidget, BodyWidget, BookmarkElementBox, EditRangeEndElementBox, EditRangeStartElementBox, ElementBox, FieldElementBox, FieldTextElementBox, HeaderFooterWidget, ImageElementBox, LineWidget, ListTextElementBox, Margin, ParagraphWidget, Rect, TabElementBox, TableCellWidget, TableRowWidget, TableWidget, TextElementBox, Widget, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase, CommentCharacterElementBox } from './page';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\n// Check box character is rendered smaller when compared to MS Word\n// So, mutiplied the font side by below factor to render check box character large.\nvar CHECK_BOX_FACTOR = 1.4;\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n function Layout(documentHelper) {\n /**\n * @private\n */\n this.islayoutFootnote = false;\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isfootMove = false;\n /**\n * @private\n */\n this.footnoteHeight = 0;\n /**\n * @private\n */\n this.isRelayout = false;\n /**\n * @private\n */\n this.isRelayoutneed = false;\n /**\n * @private\n */\n this.isOverlapFloatTable = false;\n this.isInitialLoad = true;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.isRTLLayout = false;\n this.currentCell = undefined;\n this.isFootnoteContentChanged = false;\n this.isEndnoteContentChanged = false;\n this.keepWithNext = false;\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n this.isLayoutWhole = false;\n /**\n * @private\n */\n this.isBidiReLayout = false;\n /**\n * @private\n */\n this.defaultTabWidthPixel = 48;\n /**\n * @private\n */\n this.isRelayoutFootnote = false;\n this.isRelayoutOverlap = false;\n this.isWrapText = false;\n this.isYPositionUpdated = false;\n this.isXPositionUpdated = false;\n this.hasFloatingElement = false;\n this.isFootNoteLayoutStart = false;\n this.wrapPosition = [];\n this.shiftedFloatingItemsFromTable = [];\n this.isDocumentContainsRtl = false;\n this.documentHelper = documentHelper;\n }\n Layout.prototype.isSameStyle = function (currentParagraph, isAfterSpacing) {\n var nextOrPrevSibling = undefined;\n if (isAfterSpacing) {\n if (currentParagraph.nextWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.nextWidget;\n }\n }\n else {\n if (currentParagraph.previousWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.previousWidget;\n }\n }\n if (isNullOrUndefined(nextOrPrevSibling)) {\n return false;\n }\n if (currentParagraph.paragraphFormat.baseStyle === nextOrPrevSibling.paragraphFormat.baseStyle) {\n if (currentParagraph.paragraphFormat.listFormat.listId >= 0 && nextOrPrevSibling.paragraphFormat.listFormat.listId >= 0) {\n if (!currentParagraph.paragraphFormat.contextualSpacing) {\n if (isAfterSpacing && currentParagraph.paragraphFormat.spaceAfterAuto) {\n return true;\n }\n else if (!isAfterSpacing && currentParagraph.paragraphFormat.spaceBeforeAuto) {\n return true;\n }\n }\n }\n return currentParagraph.paragraphFormat.contextualSpacing;\n }\n return false;\n };\n Object.defineProperty(Layout.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n //const page: Page = this.documentHelper.pages[0];\n //const body: BodyWidget = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n *\n * @returns {void}\n */\n Layout.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isFieldCode = undefined;\n this.footnoteHeight = undefined;\n };\n Layout.prototype.layoutItems = function (sections, isReLayout) {\n var _this = this;\n var page;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var lastpage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n /* eslint-disable-next-line max-len */\n if (i > 0 && sections[i - 1].lastChild.isEndsWithPageBreak && lastpage.bodyWidgets[0].childWidgets.length === 0) {\n this.documentHelper.pages.splice(this.documentHelper.pages.length - 1, 1);\n }\n page = this.viewer.createNewPage(section);\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.documentHelper.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.documentHelper.pages.length; i_1++) {\n var prevPage = this.documentHelper.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.documentHelper.pages.length - 1) {\n this.documentHelper.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0);\n }\n if (!isReLayout) {\n this.layoutComments(this.documentHelper.comments);\n }\n this.updateFieldElements();\n if (this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutEndNoteElement();\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (_this.documentHelper) {\n _this.documentHelper.isScrollHandler = true;\n if (_this.documentHelper.owner.isSpellCheck && _this.documentHelper.owner.spellChecker.enableOptimizedSpellCheck) {\n _this.documentHelper.triggerElementsOnLoading = true;\n }\n _this.documentHelper.clearContent();\n _this.viewer.updateScrollBars();\n _this.documentHelper.isScrollHandler = false;\n _this.isInitialLoad = false;\n }\n }, 50);\n };\n /**\n * @private\n */\n Layout.prototype.layoutComments = function (comments) {\n if (!isNullOrUndefined(comments)) {\n this.viewer.owner.commentReviewPane.layoutComments();\n }\n };\n Layout.prototype.layoutSection = function (section, index) {\n var block = section.firstChild;\n var nextBlock;\n do {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit) {\n block.calculateGrid();\n }\n this.viewer.updateClientAreaForBlock(block, true);\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n } while (block);\n block = section.firstChild;\n var page;\n if (block && block.bodyWidget && block.bodyWidget.page) {\n page = block.bodyWidget.page;\n }\n while (page) {\n if (page.footnoteWidget) {\n // if (page.bodyWidgets[0].lastChild instanceof TableWidget && (page.footnoteWidget.y < (page.bodyWidgets[0].lastChild as TableWidget).y + (page.bodyWidgets[0].lastChild as TableWidget).height)) {\n // this.reLayoutTable(page.bodyWidgets[0].lastChild as TableWidget, true);\n // }\n this.layoutfootNote(page.footnoteWidget);\n page = page.nextPage;\n }\n else {\n page = page.nextPage;\n }\n }\n page = undefined;\n block = undefined;\n };\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n if (headerFooterWidget.page) {\n var parentHeader = headerFooterWidget;\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n }\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var header = headerFooterWidget;\n header.page = page;\n header.height = 0;\n this.updateRevisionsToHeaderFooter(header, page);\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n //this.updateHeaderFooterToParent(header);\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n if (headerFooterWidget.page) {\n var parentHeader = headerFooterWidget;\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n }\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var footer = headerFooterWidget;\n footer.page = page;\n footer.height = 0;\n viewer.updateHFClientArea(section.sectionFormat, false);\n this.updateRevisionsToHeaderFooter(footer, page);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n }\n };\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.documentHelper.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Layout.prototype.updateRevisionsToHeaderFooter = function (clone, page) {\n var childWidge = clone.childWidgets;\n if (clone instanceof HeaderFooterWidget && childWidge.length > 0) {\n for (var i = 0; i < childWidge.length; i++) {\n if (childWidge[i].childWidgets.length > 0) {\n var lineWidge = childWidge[i].childWidgets;\n for (var j = 0; j < lineWidge.length; j++) {\n var childrens = lineWidge[j].children;\n if (childrens) {\n for (var k = 0; k < childrens.length; k++) {\n if (childrens[k].removedIds.length > 0) {\n var removeId = childrens[k].removedIds;\n for (var l = 0; l < removeId.length; l++) {\n var revision = this.documentHelper.revisionsInternal.get(removeId[l]);\n childrens[k].revisions[l] = revision;\n this.updateRevisionRange(revision, page);\n }\n }\n }\n }\n }\n }\n }\n }\n };\n Layout.prototype.updateRevisionRange = function (revision, page) {\n for (var i = 0; i < revision.range.length; i++) {\n var inline = revision.range[i];\n if (!inline.line.paragraph.bodyWidget.page) {\n inline.line.paragraph.bodyWidget.page = page;\n }\n }\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n /* eslint-disable no-cond-assign */\n } while (firstChild = firstChild.nextWidget);\n };\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && (element.fieldType !== 0 || (element.fieldType === 0 &&\n this.documentHelper.fields.indexOf(element) === -1))) {\n element.linkFieldCharacter(this.documentHelper);\n }\n if (element instanceof FieldTextElementBox &&\n element.fieldBegin !== element.previousElement.fieldBegin) {\n element.fieldBegin = element.previousElement.fieldBegin;\n }\n if (element instanceof ShapeElementBox) {\n var firstBlock = element.textFrame.firstChild;\n do {\n if (firstBlock instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstBlock);\n }\n else {\n this.linkFieldInTable(firstBlock);\n }\n /* eslint-disable no-cond-assign */\n } while (firstBlock = firstBlock.nextWidget);\n }\n else if (element instanceof CommentCharacterElementBox) {\n var comment = this.getCommentById(element.commentId);\n if (!isNullOrUndefined(comment)) {\n if (element.commentType === 0) {\n comment.commentStart = element;\n }\n else {\n comment.commentEnd = element;\n }\n element.comment = comment;\n }\n }\n }\n }\n };\n Layout.prototype.getCommentById = function (commentId) {\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n var comment = this.documentHelper.comments[i];\n if (comment.commentId === commentId) {\n return comment;\n }\n }\n return undefined;\n };\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit && !block.isGridUpdated) {\n block.calculateGrid();\n }\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n var widgetTop = bodyWidget.y + shiftTop;\n var footerMaxHeight = bodyWidget.page.boundingRectangle.height - (bodyWidget.page.boundingRectangle.height / 100) * 40;\n widgetTop = Math.max(widgetTop, footerMaxHeight);\n shiftTop = widgetTop - bodyWidget.y;\n var childTop = bodyWidget.y = widgetTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n var widget = childWidget.childWidgets[0];\n childWidget.x = childWidget.x;\n childWidget.y = i === 0 ? childWidget.y + shiftTop : childTop;\n childTop += childWidget.height;\n for (var j = 0; j < widget.children.length; j++) {\n var element = widget.children[j];\n if (element instanceof ShapeElementBox) {\n element.y = childWidget.y + element.verticalPosition;\n }\n }\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n childTop += childWidget.height;\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n Layout.prototype.layoutBlock = function (block, index) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n block.splitLtrAndRtlText(0);\n block.combineconsecutiveRTL(0);\n nextBlock = this.layoutParagraph(block, index);\n var nextBlockToLayout = this.checkAndRelayoutPreviousOverlappingBlock(block);\n if (nextBlockToLayout) {\n nextBlock = nextBlockToLayout;\n }\n }\n else {\n nextBlock = this.layoutTable(block, index);\n this.checkAndRelayoutPreviousOverlappingBlock(block);\n this.updateTableYPositionBasedonTextWrap(nextBlock);\n }\n return nextBlock.nextRenderedWidget;\n };\n Layout.prototype.updateTableYPositionBasedonTextWrap = function (table) {\n var _this = this;\n if (!isNullOrUndefined(table.bodyWidget)) {\n var tableY_1 = table.y;\n var tableRect_1 = new Rect(table.x, table.y, table.width, table.height);\n table.bodyWidget.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeElementBox && !shape.paragraph.isInsideTable) {\n var shapeRect = new Rect(shape.x, shape.y, shape.width, shape.height);\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom' || shape.textWrappingStyle === 'Square');\n if (considerShape && tableRect_1.isIntersecting(shapeRect)) {\n table.y = shape.y + shape.height + shape.distanceBottom;\n _this.updateChildLocationForTable(table.y, table);\n var height = table.y - tableY_1;\n _this.viewer.cutFromTop(_this.viewer.clientActiveArea.y + height);\n }\n }\n });\n }\n };\n Layout.prototype.checkAndRelayoutPreviousOverlappingBlock = function (block) {\n if (!(block.containerWidget instanceof TextFrame) && !this.isRelayoutOverlap) {\n var preivousBlock = block.previousWidget;\n if (block instanceof ParagraphWidget) {\n if (block.floatingElements.length > 0) {\n for (var i = 0; i < block.floatingElements.length; i++) {\n var element = block.floatingElements[i];\n if (element.textWrappingStyle === 'InFrontOfText' || element.textWrappingStyle === 'Behind') {\n continue;\n }\n var shapeRect = new Rect(element.x, element.y, element.width, element.height);\n while (preivousBlock) {\n if (preivousBlock instanceof ParagraphWidget) {\n /* eslint-disable-next-line max-len */\n var paraRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (shapeRect.isIntersecting(paraRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n }\n else {\n var widget = block.getSplitWidgets();\n if (widget) {\n return widget[widget.length - 1];\n }\n }\n }\n else {\n var table = block;\n if (!table.wrapTextAround) {\n return table;\n }\n var tableRect = new Rect(table.x, table.y, table.getTableCellWidth(), table.height);\n while (preivousBlock) {\n if (preivousBlock instanceof ParagraphWidget) {\n var blockRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (tableRect.isIntersecting(blockRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n if (this.startOverlapWidget) {\n this.isRelayoutOverlap = true;\n this.layoutStartEndBlocks(this.startOverlapWidget, block);\n this.isRelayoutOverlap = false;\n }\n this.startOverlapWidget = undefined;\n this.endOverlapWidget = undefined;\n }\n return block;\n };\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n // const ownerParaWidget: ParagraphWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right') &&\n paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n // const top: number = 0;\n // const bottom: number = 0;\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(paragraphWidget.characterFormat);\n var left = area.x;\n if (paragraphWidget.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraphWidget.width = width;\n paragraphWidget.x = left;\n paragraphWidget.y = area.y;\n }\n else {\n if (this.viewer.clientActiveArea.width <= 0 && this.viewer instanceof WebLayoutViewer) {\n paragraphWidget.x = this.previousPara;\n }\n else {\n paragraphWidget.x = area.x;\n this.previousPara = paragraphWidget.x;\n }\n paragraphWidget.width = area.width;\n paragraphWidget.y = area.y;\n }\n return paragraphWidget;\n };\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n Layout.prototype.isFirstElementWithPageBreak = function (paragraphWidget) {\n var isPageBreak = false;\n if (this.viewer instanceof PageLayoutViewer) {\n var lineWidget = paragraphWidget.childWidgets[0];\n if (lineWidget) {\n var element = lineWidget.children[0];\n while (element) {\n if (element instanceof BookmarkElementBox && element.name.indexOf('_') >= 0) {\n element = element.nextElement;\n continue;\n }\n if (element instanceof TextElementBox && element.text === '\\f') {\n isPageBreak = true;\n }\n break;\n }\n }\n }\n return isPageBreak;\n };\n /**\n * Layouts specified paragraph.\n *\n * @private\n * @param footnote\n */\n Layout.prototype.layoutfootNote = function (footnote) {\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var clientArea = this.viewer.clientArea.clone();\n if (footnote.footNoteType === 'Footnote') {\n this.viewer.updateFootnoteClientArea(footnote.sectionFormat, footnote);\n }\n footnote.height = 0;\n var block = void 0;\n var height = 0;\n this.isRelayoutFootnote = false;\n var index = 0;\n // this.isfoot = true;\n /* eslint-disable-next-line max-len */\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n if (i === 0) {\n var newPara = new ParagraphWidget();\n newPara.characterFormat = new WCharacterFormat();\n newPara.paragraphFormat = new WParagraphFormat();\n newPara.index = 0;\n var lineWidget = new LineWidget(newPara);\n newPara.childWidgets.push(lineWidget);\n // let body: BlockContainer= new BodyWidget();\n // body.childWidgets.push(newParagraph);\n // footnote.bodyWidgets.push(body);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newPara.characterFormat).Height;\n footnote.height += height;\n footnote.y = this.viewer.clientActiveArea.y;\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + height);\n footnote.margin = new Margin(0, height, 0, 0);\n }\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n block = footnote.bodyWidgets[i].childWidgets[j];\n block.index = index;\n index++;\n block.containerWidget = footnote.bodyWidgets[i];\n block.containerWidget.page = footnote.page;\n block.containerWidget.containerWidget = footnote;\n // paragraph.index = i > 1 ? i - 1 : 0;\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true, true);\n this.isRelayoutFootnote = true;\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.layoutBlock(block, 0);\n if (footnote.footNoteType === 'Footnote') {\n footnote.height += block.height;\n }\n this.viewer.updateClientAreaForBlock(block, false);\n }\n }\n if (footnote.footNoteType === 'Footnote') {\n this.shiftChildWidgetInFootnote(footnote);\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n if (!this.islayoutFootnote) {\n if (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height > footnote.y) {\n this.viewer.clientActiveArea.height -= footnote.height;\n var sub = (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - footnote.y);\n this.viewer.clientActiveArea.height -= sub;\n }\n }\n }\n return footnote;\n };\n Layout.prototype.shiftChildWidgetInFootnote = function (footnote) {\n var page = footnote.page;\n var yPosition = footnote.y - footnote.height;\n if (page.bodyWidgets[0].childWidgets.length === 1 && page.bodyWidgets[0].firstChild) {\n var startY = page.bodyWidgets[0].firstChild.y;\n var bodyWidgetHeight = this.getBodyWidgetHeight(page.bodyWidgets[0]);\n if (yPosition < startY + bodyWidgetHeight) {\n yPosition = startY + bodyWidgetHeight;\n }\n }\n footnote.y = yPosition;\n yPosition += footnote.margin.top;\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnote.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.y = yPosition;\n yPosition += childWidget.height;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, yPosition - childWidget.y);\n yPosition += childWidget.height;\n }\n }\n }\n };\n Layout.prototype.getBodyWidgetHeight = function (bodyWidget) {\n var height = 0;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n height += bodyWidget.childWidgets[i].height;\n }\n return height;\n };\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n var isListLayout = true;\n var isFirstElmIsparagraph = this.isFirstElementWithPageBreak(paragraph);\n if (!isFirstElmIsparagraph) {\n this.layoutListItems(paragraph);\n isListLayout = false;\n }\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n if (!this.isRelayoutOverlap && !(paragraph.containerWidget instanceof TextFrame)) {\n this.layoutFloatElements(paragraph);\n }\n while (line instanceof LineWidget) {\n if (paragraph !== line.paragraph && line.indexInOwner === 0 && isListLayout) {\n this.layoutListItems(line.paragraph);\n }\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line.marginTop = 0;\n // if (!this.isInitialLoad && !this.isBidiReLayout && this.isContainsRtl(line)) {\n // this.reArrangeElementsForRtl(line, paragraph.paragraphFormat.bidi);\n // }\n line = this.layoutLine(line, 0);\n paragraph = line.paragraph;\n line = line.nextLine;\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n paragraph.isLayouted = true;\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.layoutFloatElements = function (paragraph) {\n var _this = this;\n paragraph.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeBase) {\n if (!_this.isRelayoutOverlap) {\n _this.layoutShape(shape);\n }\n }\n });\n };\n Layout.prototype.layoutShape = function (element) {\n if (element.textWrappingStyle !== 'Inline') {\n var position = this.getFloatingItemPoints(element);\n element.x = position.x;\n element.y = position.y;\n var bodyWidget = element.paragraph.bodyWidget;\n if (bodyWidget.floatingElements.indexOf(element) === -1) {\n bodyWidget.floatingElements.push(element);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n if (element.paragraph.floatingElements.indexOf(element) === -1) {\n element.paragraph.floatingElements.push(element);\n }\n }\n else {\n if (element.width === 0 && element.widthScale !== 0) {\n var containerWidth = HelperMethods.convertPointToPixel(element.line.paragraph.getContainerWidth());\n element.width = (containerWidth / 100) * element.widthScale;\n }\n }\n var clientArea = this.viewer.clientArea;\n var clientActiveArea = this.viewer.clientActiveArea;\n if (element instanceof ShapeElementBox) {\n var blocks = element.textFrame.childWidgets;\n this.viewer.updateClientAreaForTextBoxShape(element, true);\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n this.viewer.updateClientAreaForBlock(block, false);\n }\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.paragraph.childWidgets.splice(nextLine.paragraph.childWidgets.indexOf(nextLine), 1);\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n var isNotEmptyField = true;\n if (element instanceof FieldElementBox && line.children[line.children.length - 1] instanceof FieldElementBox) {\n isNotEmptyField = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i].fieldType == 2 && line.children[i].nextElement != undefined && !(line.children[i].nextElement instanceof FieldElementBox)) {\n isNotEmptyField = true;\n break;\n }\n }\n }\n this.clearLineMeasures();\n line.marginTop = 0;\n while (element instanceof ElementBox) {\n element.padding.left = 0;\n if (!isNotEmptyField) {\n this.layoutElement(element, paragraph, true);\n isNotEmptyField = true;\n }\n else {\n this.layoutElement(element, paragraph);\n }\n line = element.line;\n if (element instanceof TextElementBox) {\n var textElement = element;\n if (!isNullOrUndefined(textElement.errorCollection) && textElement.errorCollection.length > 0) {\n textElement.ischangeDetected = true;\n }\n }\n if (!this.isRTLLayout) {\n if (this.hasFloatingElement) {\n this.hasFloatingElement = false;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n if (lineIndex > 0 && paragraph.bodyWidget.floatingElements.length > 0 && element instanceof TextElementBox && !(paragraph.containerWidget instanceof TableCellWidget)) {\n element = paragraph.childWidgets[lineIndex].children[0];\n }\n }\n else {\n if (this.is2013Justification && !isNullOrUndefined(this.nextElementToLayout)) {\n element = this.nextElementToLayout;\n }\n else {\n element = element.nextElement;\n if (element instanceof TextElementBox && element.text.indexOf(\" \") == 0 && element.text.length > 2) {\n if (isNullOrUndefined(element.nextElement) && element.text.trim().length > 0) {\n element.text = element.text.substring(1, element.text.length);\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n var textElement = new TextElementBox();\n textElement.text = \" \";\n textElement.line = element.line;\n element.line.children.splice(elementIndex, 0, textElement);\n element.line.children.splice(elementIndex + 1, 0, element);\n element = textElement;\n }\n }\n }\n this.nextElementToLayout = undefined;\n }\n }\n else {\n element = undefined;\n this.isRTLLayout = false;\n }\n }\n return line;\n };\n /* eslint-disable */\n Layout.prototype.layoutElement = function (element, paragraph, isEmptyField) {\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(element) === -1) {\n this.documentHelper.fields.push(element);\n }\n if (!isNullOrUndefined(element.formFieldData) &&\n this.documentHelper.formFields.indexOf(element) === -1) {\n this.documentHelper.formFields.push(element);\n }\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (element.fieldType !== 2 && isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (element.fieldType !== 2 && isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && !isNullOrUndefined(line.nextLine) &&\n this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n else if (isEmptyField) {\n var textHelper = this.documentHelper.textHelper.getHeight(paragraph.characterFormat);\n element.height = textHelper.Height;\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox ||\n element instanceof EditRangeEndElementBox || element instanceof EditRangeStartElementBox\n || element instanceof ContentControl ||\n (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (element instanceof BookmarkElementBox) {\n if (element.bookmarkType === 0 && !this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.add(element.name, element);\n }\n else if (element.bookmarkType === 1 && this.documentHelper.bookmarks.containsKey(element.name)) {\n var bookmrkElement = this.documentHelper.bookmarks.get(element.name);\n if (isNullOrUndefined(bookmrkElement.reference) || isNullOrUndefined(bookmrkElement.reference.paragraph.bodyWidget)) {\n bookmrkElement.reference = element;\n element.reference = bookmrkElement;\n }\n }\n else if (element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n if (isNullOrUndefined(element.reference)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n }\n }\n if (element instanceof ContentControl && this.documentHelper.contentControlCollection.indexOf(element) === -1) {\n if (element.type === 0) {\n this.documentHelper.contentControlCollection.push(element);\n }\n else if (element.type === 1) {\n var endPage = element.paragraph.bodyWidget.page;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var cCStart = this.documentHelper.contentControlCollection[i];\n var isInHeaderFooter = cCStart.line.paragraph.isInHeaderFooter;\n // Link content control present in same header.\n if (isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties\n && endPage === cCStart.line.paragraph.bodyWidget.page) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n else if (!isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n }\n }\n }\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n if (this.hasValidElement(line.paragraph) && !paragraph.isContainsShapeAlone()) {\n this.moveToNextLine(line);\n }\n else if (!this.isInitialLoad && !this.hasValidElement(line.paragraph) && line.paragraph.paragraphFormat.bidi && line.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.moveToNextLine(line);\n }\n else {\n this.layoutEmptyLineWidget(line.paragraph, false, line, false);\n }\n }\n return;\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox && !this.isTocField(element.fieldBegin)) {\n text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof FootnoteElementBox) {\n text = this.startAt(element, text);\n if (text !== '') {\n element.text = text;\n }\n }\n else if (element instanceof TextElementBox) {\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n //TODO: Need to update revision\n // if (element.text.length > 1 && element.line.paragraph.bidi) {\n // let splittedText: string[] = this.splitTextByConsecutiveLtrAndRtl(element);\n // this.updateSplittedText(element, splittedText);\n // }\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n // if (this.isRelayout) {\n width = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n /*} else {\n width = element.trimEndWidth;\n }*/\n if (element.text === '\\t') {\n width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n element.width = width;\n }\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(element instanceof ShapeElementBox) && !(paragraph.containerWidget instanceof TextFrame)) {\n this.adjustPosition(element, element.line.paragraph.bodyWidget);\n }\n if (this.viewer instanceof PageLayoutViewer &&\n ((element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') || !(element instanceof ShapeElementBox))\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n if ((element instanceof TextElementBox && element.text !== '\\f') || !(element instanceof TextElementBox)) {\n this.moveToNextPage(this.viewer, line);\n }\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') {\n this.layoutShape(element);\n }\n // tslint:disable-next-line:max-line-length\n if (element instanceof FootnoteElementBox && (!element.isLayout || this.isLayoutWhole) && this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutFootEndNoteElement(element);\n }\n if (element instanceof FootnoteElementBox) {\n if (this.isfootMove) {\n this.moveToNextPage(this.viewer, element.line);\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n this.isfootMove = false;\n }\n if (paragraph.paragraphFormat.keepWithNext && paragraph.paragraphFormat.keepLinesTogether && !(!element.isLayout || this.isLayoutWhole)) {\n if (paragraph.bodyWidget.page.footnoteWidget.y !== 0 && paragraph.bodyWidget.page.footnoteWidget.y < this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height) {\n var findDiff = this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - paragraph.bodyWidget.page.footnoteWidget.y;\n this.viewer.clientActiveArea.height -= findDiff;\n }\n }\n }\n if (parseFloat(width.toFixed(4)) <= parseFloat(this.viewer.clientActiveArea.width.toFixed(4)) || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n // Added the condition to check While the tab element width is greater then clientActiveArea width and while it was first element of line should not move to next line\n if (element.indexInOwner !== 0 && element instanceof TabElementBox) {\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element) - 1);\n }\n this.moveToNextLine(currentLine);\n this.nextElementToLayout = element;\n if (currentLine.paragraph.bodyWidget.floatingElements.length > 0) {\n this.hasFloatingElement = true;\n return;\n }\n else {\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, element.line, element);\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0\n && !element.line.isLastLine()) {\n this.moveElementFromNextLine(element.line);\n }\n }\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n //Added the condition to skip line split while layouting dropDownFormField \n if (!(element.previousElement instanceof FieldElementBox && element.previousElement.fieldType == 2\n && !isNullOrUndefined(element.previousElement.fieldBeginInternal)\n && element.previousElement.fieldBeginInternal.formFieldData instanceof DropDownFormField)) {\n this.splitTextForClientArea(line, element, element.text, element.width, element.characterFormat);\n }\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.line !== line && !isNullOrUndefined(this.nextElementToLayout) && this.is2013Justification) {\n return;\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n var contentControl;\n if (!isNullOrUndefined(element.nextNode) && element.nextNode instanceof ContentControl) {\n contentControl = element.nextNode;\n }\n if ((text === '\\v' || text === '\\f') && !contentControl) {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v' || text === '\\f') {\n if (this.isXPositionUpdated) {\n this.isXPositionUpdated = false;\n return;\n }\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n else if (text === '\\f' && this.viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(element.nextNode) || element.nextNode instanceof ContentControl) {\n this.moveToNextPage(this.viewer, element.line, true);\n }\n else if (!isNullOrUndefined(element.line.nextLine)) {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n }\n }\n }\n this.isXPositionUpdated = false;\n };\n /**\n * @private\n */\n Layout.prototype.adjustPosition = function (element, bodyWidget) {\n var clientArea = this.viewer.clientActiveArea;\n var previousLeft = this.viewer.clientActiveArea.x;\n var previousTop = this.viewer.clientActiveArea.y;\n var previousWidth = this.viewer.clientActiveArea.width;\n var adjustedRect = this.adjustClientAreaBasedOnTextWrap(element, new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height));\n this.viewer.clientActiveArea.width = adjustedRect.width;\n //Updated element padding for wrapping.\n // if (this.isWrapText) {\n var wrapDiff = this.viewer.clientActiveArea.x - previousLeft;\n // if (element.indexInOwner === 0 && element.line.isFirstLine()) {\n // wrapDiff -= HelperMethods.convertPointToPixel(element.line.paragraph.paragraphFormat.firstLineIndent);\n // }\n element.padding.left = wrapDiff;\n if (previousWidth !== this.viewer.clientActiveArea.width) {\n var wrapPos = new WrapPosition(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.width);\n this.updateWrapPosition(wrapPos);\n }\n //this.isWrapText = false;\n // }\n if (this.viewer.clientActiveArea.width === 0) {\n this.isWrapText = false;\n }\n if (this.isYPositionUpdated) {\n if (element.line.isFirstLine()) {\n element.line.paragraph.y = this.viewer.clientActiveArea.y;\n }\n else {\n element.line.marginTop += (this.viewer.clientActiveArea.y - previousTop);\n }\n if (element.line.paragraph.containerWidget instanceof HeaderFooterWidget) {\n element.line.paragraph.containerWidget.height += (this.viewer.clientActiveArea.y - previousTop);\n }\n this.isYPositionUpdated = false;\n }\n };\n Layout.prototype.updateWrapPosition = function (wrapPos) {\n for (var i = 0; i < this.wrapPosition.length; i++) {\n var previousWrapPos = this.wrapPosition[i];\n if (Math.abs(previousWrapPos.right - wrapPos.right) > 1) {\n continue;\n }\n else {\n return;\n }\n }\n this.wrapPosition.push(wrapPos);\n };\n Layout.prototype.isFirstitemInPage = function (element, yposition) {\n if (!element.line.paragraph.isInHeaderFooter && Math.round(yposition) === this.viewer.clientArea.y) {\n return true;\n }\n return false;\n };\n Layout.prototype.isTextFitBelow = function (rect, top, element) {\n //TODO: After shape implementation.\n return false;\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThrough = function (bodyWidget, elementBox, wrapOwnerIndex, wrapItemIndex, textWrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingEntity, isTextRangeInTextBox, rect, width, height) {\n return (bodyWidget.floatingElements.length > 0\n && wrapOwnerIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex\n && textWrappingStyle !== 'Inline'\n && textWrappingStyle !== 'Behind'\n && textWrappingStyle !== 'TopAndBottom'\n && textWrappingStyle !== 'InFrontOfText'\n && (Math.round((rect.y + height)) > Math.round(textWrappingBounds.y) ||\n this.isTextFitBelow(textWrappingBounds, rect.y + height, floatingEntity))\n && Math.round(rect.y) < Math.round((textWrappingBounds.y + textWrappingBounds.height))\n && !(allowOverlap && (isTextRangeInTextBox || ((elementBox instanceof ImageElementBox)\n && elementBox.textWrappingStyle !== 'Inline' && elementBox.allowOverlap))));\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThroughForTable = function (container, table, wrapIndex, wrapItemIndex, wrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingElemnt, isInTextBox, rect, width, height) {\n return (container.floatingElements.length > 0 && wrapIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex && wrappingStyle !== 'Inline'\n && wrappingStyle !== 'Behind' && wrappingStyle !== 'TopAndBottom'\n && wrappingStyle !== 'InFrontOfText'\n && ((Math.round(rect.y + height) >= Math.round(textWrappingBounds.y)\n && Math.round(rect.y) < Math.round(textWrappingBounds.bottom))\n //Checks whether the bottom of the table intersects with floating item.\n || Math.round(rect.y + height) <= Math.round(textWrappingBounds.bottom)\n && Math.round(rect.y + height) >= Math.round(textWrappingBounds.y))\n && !(allowOverlap && (isInTextBox)));\n };\n Layout.prototype.isNeedToWrapLeafWidget = function (pargaraph, elementBox) {\n var IsNeedToWrap = true;\n return (pargaraph.bodyWidget.floatingElements.length > 0\n && (IsNeedToWrap || pargaraph.associatedCell)\n && !(elementBox instanceof ImageElementBox));\n };\n Layout.prototype.getMinWidth = function (currTextRange, width, height, rect) {\n var text = currTextRange.text;\n var split = text.split(' ');\n // Gets the minimum width from the text when it contains only empty space.\n if (text !== '' && text.trim() === ''\n && currTextRange && currTextRange.line.paragraph\n && currTextRange.previousNode && currTextRange.nextNode\n && currTextRange.line.paragraph.isEmpty) {\n split = [''];\n }\n // Initialized the text with additional empty string.\n // It avoids the minimum width calculation from next sibling (GetNextTextRangeWidth).\n var minwidth = this.documentHelper.textHelper.measureText(split[0], currTextRange.characterFormat).Width;\n //Need to layout the unicode characters (chinese) character by character.\n // if (DrawingContext.IsUnicodeText(text)) {\n // minwidth = DrawingContext.MeasureTextRange(currTextRange, text[0].ToString()).Width;\n // }\n var nextSibling = this.getNextSibling(currTextRange);\n if (split.length === 1 && nextSibling) {\n var nextSiblingText = nextSibling.text;\n minwidth += this.getNextTextRangeWidth(nextSibling, nextSiblingText, width, height, rect);\n } // Add the minimum character width of that paragraph, if this text range is para mark\n return minwidth;\n };\n Layout.prototype.getNextTextRangeWidth = function (nextSiblingTextRange, nextSiblingText, width, height, rect) {\n var nextsibling = nextSiblingTextRange;\n // if (nextSiblingTextRange instanceof WFootnote)\n // nextsibling = ((nextSiblingTextRange as IWidget).LayoutInfo as LayoutFootnoteInfoImpl).TextRange;\n var sizeNext = new Rect(0, 0, 0, 0);\n var isNextSiblingSizeNeedToBeMeasure = this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextSiblingTextRange, rect, width, height);\n while (isNextSiblingSizeNeedToBeMeasure\n && this.isLeafWidgetNextSiblingIsTextRange(nextsibling)\n && width + sizeNext.width < rect.width) {\n nextsibling = this.getNextSibling(nextsibling);\n if (!this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextsibling, rect, width, height)) {\n break;\n }\n nextSiblingText += nextsibling.text;\n }\n return sizeNext.width;\n };\n Layout.prototype.isLeafWidgetNextSiblingIsTextRange = function (textRange) {\n var nextSiblingTextRange = this.getNextSibling(textRange);\n if (nextSiblingTextRange && nextSiblingTextRange instanceof TextElementBox) {\n return true;\n }\n return false;\n };\n Layout.prototype.isNextSibligSizeNeedToBeMeasure = function (sizeNext, nextSiblingwidget, rect, width, height) {\n var text = null;\n var nextSiblingTextRange = nextSiblingwidget;\n if (nextSiblingTextRange) {\n text = nextSiblingTextRange.text;\n if (text.indexOf(' ') !== -1 || (text.indexOf('-') !== -1 || (text.indexOf('_') !== -1)\n && ((width + sizeNext.width + (this.documentHelper.textHelper.measureText(text.split('-')[0], nextSiblingTextRange.characterFormat)).Width) < rect.width))\n || ((nextSiblingTextRange).text === '\\t')) {\n var elementWidth = nextSiblingTextRange.width;\n if (text !== text.split(' ')[0]) {\n elementWidth = this.documentHelper.textHelper.measureText(text.split(' ')[0], nextSiblingTextRange.characterFormat).Width;\n }\n if ((width + sizeNext.width + elementWidth) > rect.width && text.indexOf('-')) {\n if (text !== text.split('-')[0] + '-') {\n elementWidth = this.documentHelper.textHelper.measureText(text.split('-')[0] + '-', nextSiblingTextRange.characterFormat).Width;\n }\n }\n sizeNext.width += elementWidth;\n return false;\n }\n else {\n if (nextSiblingTextRange.text.length > 0) {\n var textInfo = this.documentHelper.textHelper.measureText(nextSiblingTextRange.text, nextSiblingTextRange.characterFormat);\n sizeNext.height += textInfo.Height;\n sizeNext.width += textInfo.Width;\n }\n }\n }\n return true;\n };\n Layout.prototype.isNeedDoIntermediateWrapping = function (remainingClientWidth, textWrappingStyle, rect, width, paragraph, textWrappingBounds, leafWidget, minwidth, minimumWidthRequired) {\n return (((remainingClientWidth > minimumWidthRequired)\n && (((Math.round(rect.width) <= Math.round(minwidth)\n || (rect.width < width && leafWidget.paragraph.isInsideTable))\n && textWrappingStyle !== 'Left' // Skip to update width when the wrap type as left\n && textWrappingStyle !== 'Largest')\n || textWrappingStyle === 'Right' //To layout right side when the wrap type as right\n || (rect.width < remainingClientWidth && textWrappingStyle === 'Largest'))) // Check whether the right side width is greater than the left side when the wrap type as largest\n || ((Math.round(textWrappingBounds.x - paragraph.x + paragraph.leftIndent) < minimumWidthRequired // Check whether the left side of text wrap object is have minimum width to layout or not\n || (leafWidget instanceof TextElementBox && this.isFloatingItemOnLeft(rect, minwidth, textWrappingBounds)))\n && (textWrappingStyle !== 'Left' || remainingClientWidth < minimumWidthRequired)));\n };\n Layout.prototype.isFloatingItemOnLeft = function (rect, minWidth, bounds) {\n return false;\n };\n Layout.prototype.getNextSibling = function (currentElementBox) {\n var nextSibling = currentElementBox.nextNode;\n var isFieldCode = false;\n while (nextSibling) {\n if ((nextSibling instanceof FieldElementBox) || (nextSibling instanceof BookmarkElementBox) || isFieldCode || nextSibling instanceof ListTextElementBox) {\n if (nextSibling instanceof FieldElementBox) {\n if (nextSibling.fieldType === 0) {\n isFieldCode = true;\n }\n else if (nextSibling.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (nextSibling instanceof TextElementBox) {\n break;\n }\n nextSibling = nextSibling.nextNode;\n }\n return nextSibling;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrap = function (elementBox, rect) {\n var ownerPara = elementBox.line.paragraph;\n var bodyWidget = ownerPara.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = this.isFirstitemInPage(elementBox, yposition);\n if (isFirstItem) {\n yValue = yposition;\n }\n isFirstItem = isNullOrUndefined(ownerPara.previousWidget);\n //Update Layout area based on text wrap\n if (this.isNeedToWrapLeafWidget(ownerPara, elementBox)) {\n var clientLayoutArea = layouter.clientArea;\n //Need to handle sorting floating items.\n // Sort based on Y position\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n // Sort based on X position\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingItem = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingItem instanceof ShapeBase) {\n allowOverlap = floatingItem.allowOverlap;\n }\n else {\n allowOverlap = floatingItem.positioning.allowOverlap;\n }\n if (ownerPara.isInsideTable) {\n if (floatingItem instanceof TableWidget && !floatingItem.isInsideTable) {\n continue;\n }\n }\n if (this.isRelayout && !this.isRelayoutOverlap &&\n this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, elementBox.line.paragraph)\n || this.isRelayout && this.isRelayoutOverlap && this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, this.endOverlapWidget)) {\n continue;\n }\n // if (ownerPara.isInsideTable && allowOverlap\n // && (ownerPara.associatedCell.ownerTable.positioning.allowOverlap))\n // {\n // WParagraph ownerParagraph = (m_lcOperator as Layouter).FloatingItems[i].OwnerParagraph;\n // if (!(ownerParagraph !== null\n // && ownerParagraph.IsInCell\n // && ownerPara.GetOwnerEntity() === ownerParagraph.GetOwnerEntity()))\n // {\n // continue;\n // }\n // }\n var xPosition = floatingItem.x;\n var distanceLeft = 0;\n var distanceTop = 0;\n var distanceRight = 0;\n var distanceBottom = 0;\n var width = 0;\n if (floatingItem instanceof ShapeBase) {\n distanceLeft = floatingItem.distanceLeft;\n distanceTop = floatingItem.distanceTop;\n distanceRight = floatingItem.distanceRight;\n distanceBottom = floatingItem.distanceBottom;\n width = floatingItem.width;\n }\n else {\n width = floatingItem.getTableCellWidth();\n distanceLeft = floatingItem.positioning.distanceLeft;\n distanceTop = floatingItem.positioning.distanceTop;\n distanceRight = floatingItem.positioning.distanceRight;\n distanceBottom = floatingItem.positioning.distanceBottom;\n }\n var textWrappingBounds = new Rect(floatingItem.x - distanceLeft, floatingItem.y - distanceTop, width + distanceLeft + distanceRight, floatingItem.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var textWrappingType = floatingItem instanceof TableWidget ? 'Both' : floatingItem.textWrappingType;\n // //Need to skip the wrapping for line break when it is first item of corresponding paragraph and that paragraph contains First line indent as per Word 2010 and its lower version behavior.\n // if (IsLineBreakIntersectOnFloatingItem(leafWidget, textWrappingStyle, textWrappingBounds, rect, size, ownerPara))\n // continue;\n var minimumWidthRequired = 24;\n var bottom = layouter.clientArea.y + floatingItem.height;\n // if (this.isNeedToWrapParaMarkToRightSide(elementBox, ownerPara, textWrappingBounds, bottom, layouter, this.viewer.clientArea, textWrappingType, minimumWidthRequired)) {\n // if (lineBreakPosition !== 0) {\n // this.viewer.clientArea.y = lineBreakPosition;\n // //m_layoutArea.UpdateBoundsBasedOnTextWrap(lineBreakPosition);\n // }\n // this.viewer.clientArea.x += textWrappingBounds.width;\n // //(LeafWidget as IWidget).LayoutInfo.IsLineBreak = false;\n // elementBox.height = 0;\n // elementBox.width = textWrappingBounds.width;\n // return;\n // }\n if (!(clientLayoutArea.x > (textWrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < textWrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThrough(bodyWidget, elementBox, -1, -1, textWrappingStyle, textWrappingBounds, allowOverlap, 1, floatingItem, false, rect, elementBox.width, elementBox.height)) {\n var rightIndent = 0;\n var leftIndent = 0;\n var listLeftIndent = 0;\n var firstLineIndent = HelperMethods.convertPointToPixel(elementBox.paragraph.paragraphFormat.firstLineIndent);\n var paragraphLeftIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.leftIndent);\n var paragarphRightIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.rightIndent);\n firstLineIndent = ((elementBox.indexInOwner === 0 && elementBox.line.isFirstLine()) && firstLineIndent > 0) ? firstLineIndent : 0;\n var currTextRange = elementBox;\n var containerWidget = floatingItem instanceof TableWidget ? floatingItem.containerWidget : floatingItem.line.paragraph.containerWidget;\n var isnewline = false;\n if (elementBox.line.paragraph) {\n //Right indent is considered only if the rect.X greater than the floating item's X position and\n //Text wrapping style should not be left\n if (rect.x >= textWrappingBounds.x && textWrappingType !== 'Left') {\n rightIndent = paragarphRightIndent;\n }\n //Left indent is considered only if the rect.X less than the floating item's X position and\n //Text wrapping style should not be right\n if (rect.x < textWrappingBounds.x && textWrappingType !== 'Right') {\n leftIndent = paragraphLeftIndent;\n }\n var listFormat = ownerPara.paragraphFormat.listFormat;\n var listLevel = this.getListLevel(listFormat.list, listFormat.listLevelNumber);\n if (rect.x === (clientLayoutArea.x + paragraphLeftIndent)\n && listFormat && listFormat.baseStyle\n && listLevel && listLevel.paragraphFormat.leftIndent !== 0) {\n listLeftIndent = paragraphLeftIndent;\n isnewline = true; // to denote the current line is new line of the paragraph\n }\n }\n // if (this.isXPositionUpdated && textWrappingType === 'Both' && this.layoutState === 'Splitted') {\n // rect.width = bodyWidget.width - this.viewer.clientActiveArea.x;\n // rect.x = textWrappingBounds.right;\n // this.viewer.updateClientAreaForTextWrap(rect);\n // return rect;\n // }\n if (textWrappingStyle === 'Square') {\n //If the floating item intersects the Horizontal line shape, then we fit the shape in the remaining area\n if (elementBox instanceof ShapeBase &&\n elementBox.textWrappingStyle === 'Inline') {\n if (textWrappingBounds.x - rect.x > 24) {\n floatingItem.width = textWrappingBounds.x - rect.x;\n }\n else {\n floatingItem.width = floatingItem.width - (textWrappingBounds.right - rect.x) - rightIndent;\n }\n }\n }\n /* Since the Microsoft Word has different behavior to calculate minimum width required to fit a word to a side of Table,\n the minimum width required changes based upon table border value and table alignment.\n And this value even differ for different word version, such that 2013, will have different minimum required value, where all other version shares the same logic to calculate minimum width required */\n var border = 0;\n var isBorderValueZero = false;\n var table = void 0;\n var borderThickness = 0;\n var tableHorizontalPosition = void 0;\n if (floatingItem instanceof TableWidget) {\n table = floatingItem;\n tableHorizontalPosition = floatingItem.positioning.horizontalAlignment;\n border = this.getMaximumRightCellBorderWidth(floatingItem);\n isBorderValueZero = this.getDefaultBorderSpacingValue(border, isBorderValueZero, tableHorizontalPosition);\n borderThickness = floatingItem.tableFormat.borders.left.lineWidth / 2;\n }\n // Skip to update when the wrap type as left\n if (rect.x + borderThickness >= textWrappingBounds.x && rect.x < textWrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (textWrappingBounds.right - rect.x) - rightIndent;\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (table !== null) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n //checks minimum width\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < elementBox.width && elementBox.text === '\\t')\n || (textWrappingBounds.x < ownerPara.x + paragraphLeftIndent)) // check whether the TextWrap X position is less than the paragraph X position\n {\n //TODO\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0);\n //checks minimum width of the single word\n var minwidth = 0;\n if (currTextRange) {\n minwidth = this.getMinWidth(elementBox, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (textWrappingBounds.x - (ownerPara.x + ownerPara.leftIndent)) > minimumWidthRequired\n && (this.viewer.clientArea.right - textWrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n //layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var isPositionsUpdated = false;\n //Check whether left side of current floating item has enoush place to fit current widget.\n //If it has, need to fit left side of the floating item, instead of moving to bottom.\n // if (layouter.clientArea.x + elementBox.width < floatingItem.x) {\n // //Current item should preserve below to the floating item,which preserved left side of the floating item.\n // //If left side has multiple items or none of items this may fail, need to handle this cases.\n // let tempBounds: Rect = GetIntersectingItemBounds(floatingItem, yposition);\n // if (tempBounds.bottom !== 0 && tempBounds.bottom <= textWrappingBounds.bottom) {\n // rect.x = clientLayoutArea.x;\n // rect.width = clientLayoutArea.width;\n // rect.y = tempBounds.bottom + topMarginValue;\n // rect.height = clientLayoutArea.bottom - tempBounds.bottom;\n // this.isYPositionUpdated = true;\n // isPositionsUpdated = true;\n // }\n // }\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width -= firstLineIndent;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n else {\n // this.isXPositionUpdated = true;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // if (leafWidget != null)\n // tabsInfo = (leafWidget as ILeafWidget).LayoutInfo as TabsLayoutInfo;\n //if (tabsInfo == null) {\n //this.isWrapText = true;\n //this.viewer.updateClientAreaForTextWrap(rect);//\n // if (layouter.FloatingItems[i].FloatingEntity is WTable)\n // layouter.FloatingTableBottom = textWrappingBounds.Bottom;\n //}\n }\n }\n else {\n //Check whether the RightPositionOfTabStopInterSectingFloattingItems have the value or not.\n //if contains value means continue the layouting even x position exceeds the page right position.\n var xposition = rect.x;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0) - firstLineIndent;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n //else\n // this.isXPositionUpdated = true;\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // //Microsoft Word 2013 doesn't split text character by character, when current line has floating item.\n // if (ownerPara != null && ownerPara.Document.Settings.CompatibilityMode == CompatibilityMode.Word2013)\n // layouter.m_canSplitbyCharacter = false;\n this.isWrapText = true;\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else if (textWrappingBounds.x >= rect.x && rect.right > textWrappingBounds.x) {\n rect.width = textWrappingBounds.x - rect.x - rightIndent;\n //Remaining right side width\n var remainingClientWidth = this.viewer.clientArea.right - textWrappingBounds.right;\n remainingClientWidth = remainingClientWidth > 0 ? remainingClientWidth : 0;\n this.isWrapText = true;\n //checks minimum width\n var minwidth = 0;\n if (currTextRange) {\n minwidth = this.getMinWidth(currTextRange, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (table !== null) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n if (this.isNeedDoIntermediateWrapping(remainingClientWidth, textWrappingType, rect, elementBox.width, elementBox.paragraph, textWrappingBounds, elementBox, minwidth, minimumWidthRequired)) {\n var leftMinimumWidthRequired = 24;\n rect.width = remainingClientWidth;\n this.isWrapText = true;\n if (rect.x + minwidth > textWrappingBounds.x || textWrappingType === 'Right' || clientLayoutArea.x > textWrappingBounds.x - leftMinimumWidthRequired) //Update X position when the wrap type as largest or right or the minimum width + rect.X > wrap x position\n {\n rect.x = textWrappingBounds.right;\n // let listFormat: WListFormat = null;\n // let listLevel: WListLevel = null;\n // if (elementBox.line.isFirstLine\n // && (listFormat = ownerPara.GetListFormatValue()) != null\n // && listFormat.CurrentListStyle != null\n // && (listLevel = ownerPara.GetListLevel(listFormat)) != null\n // && listLevel.ParagraphFormat.LeftIndent != 0)\n // {\n // float x = 0;\n // float width = rect.Width;\n // //Updates the paragraph firstline horizontal positions, such as first line indent and listtab value\n // UpdateParaFirstLineHorizontalPositions(paragraphLayoutInfo, ownerPara, ref x, ref width);\n // rect.X += (x + (float)paragraphLayoutInfo.Margins.Left);\n // rect.Width -= (x + (float)paragraphLayoutInfo.Margins.Left);\n // }\n // this.isXPositionUpdated = true;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && layouter.FloatingItems[i].IsDoesNotDenotesRectangle) {\n // UpdateXposition(textWrappingBounds, i, ref rect, size, minwidth);\n // }\n if (rect.width > minwidth || textWrappingType === 'Right') {\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n if ((rect.width < minimumWidthRequired && !(minwidth < remainingClientWidth && ('Tight' === textWrappingStyle)))\n || (rect.width < minwidth && Math.round(rect.right) === Math.round(this.viewer.clientArea.right)\n && textWrappingType === 'Both')) {\n var rect1 = textWrappingBounds;\n if (Math.round(rect.x) === Math.round(bodyWidget.sectionFormat.leftMargin + ownerPara.paragraphFormat.leftIndent)) {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n // Reset the rectangle position when the rectangle right position is equialent to layout area right position\n else if (Math.round(rect.right) >= Math.round(this.viewer.clientArea.right) && textWrappingType === 'Both') {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n // topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n rect.x = this.viewer.clientArea.x + leftIndent;\n this.viewer.updateClientAreaForTextWrap(rect);\n // this.isXPositionUpdated = true;\n this.isYPositionUpdated = true;\n this.isWrapText = false;\n }\n else {\n rect.width = 0;\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n }\n else {\n //While text intersecting with SQUARE type floating item and there is no space\n //available to fit this text in current line then move the text to bottom\n //of the floating item and this behavior is applicable only for Word 2013.\n //Lower versions split the text character by character.\n if ((elementBox.line.isFirstLine() && elementBox.indexInOwner === 0) && textWrappingStyle === 'Square'\n && Math.round(rect.width) <= Math.round(minwidth)\n && ownerPara.containerWidget === containerWidget) {\n rect.x = clientLayoutArea.x;\n rect.y = textWrappingBounds.bottom;\n rect.width = clientLayoutArea.width;\n rect.height -= (textWrappingBounds.bottom - rect.y);\n this.isYPositionUpdated = true;\n }\n else if (Math.round(rect.width) <= Math.round(minwidth) && Math.round(rect.x - leftIndent) !== Math.round(this.viewer.clientArea.x)) {\n rect.width = 0;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n if (textWrappingType !== 'Both') {\n this.isWrapText = false;\n }\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrapForTable = function (table, rect) {\n //let ownerPara: ParagraphWidget = elementBox.line.paragraph;\n if (isNullOrUndefined(table.containerWidget) || isNullOrUndefined(table.bodyWidget)) {\n return rect;\n }\n var bodyWidget = table.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = isNullOrUndefined(table.previousWidget);\n if (isFirstItem) {\n yValue = yposition;\n }\n if (bodyWidget.floatingElements.length > 0) {\n var clientLayoutArea = layouter.clientActiveArea;\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingElement = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingElement instanceof ShapeBase) {\n allowOverlap = floatingElement.allowOverlap;\n }\n else {\n allowOverlap = floatingElement.positioning.allowOverlap;\n }\n if (table.isInsideTable) {\n if (floatingElement instanceof TableWidget && !floatingElement.isInsideTable) {\n continue;\n }\n }\n if (floatingElement instanceof TableWidget && floatingElement.wrapTextAround && floatingElement.positioning.allowOverlap) {\n if (table.wrapTextAround && table.positioning.allowOverlap) {\n continue;\n }\n }\n var tableWidth = table.getTableCellWidth();\n var isShape = floatingElement instanceof ShapeBase;\n var distanceLeft = isShape ? floatingElement.distanceLeft : floatingElement.positioning.distanceLeft;\n var distanceTop = isShape ? floatingElement.distanceTop : floatingElement.positioning.distanceTop;\n var distanceRight = isShape ? floatingElement.distanceRight : floatingElement.positioning.distanceRight;\n var distanceBottom = isShape ? floatingElement.distanceBottom : floatingElement.positioning.distanceBottom;\n var width = isShape ? floatingElement.width : floatingElement.getTableCellWidth();\n var wrappingBounds = new Rect(floatingElement.x - distanceLeft, floatingElement.y - distanceTop, width + distanceLeft + distanceRight, floatingElement.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingElement instanceof TableWidget ? 'Square' : floatingElement.textWrappingStyle;\n var textWrappingType = floatingElement instanceof TableWidget ? 'Both' : floatingElement.textWrappingType;\n var minimumWidthRequired = 24;\n var tableHeight = table.childWidgets.length > 0 ? table.childWidgets[0].rowFormat.height : 0;\n if (!(clientLayoutArea.x > (wrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < wrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThroughForTable(bodyWidget, table, -1, -1, textWrappingStyle, wrappingBounds, allowOverlap, 1, floatingElement, false, rect, tableWidth, tableHeight)) {\n // Skip to update when the wrap type as left\n if (rect.x >= wrappingBounds.x && rect.x < wrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (wrappingBounds.right - rect.x);\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < tableWidth)\n || (wrappingBounds.x < table.x)) // check whether the TextWrap X position is less than the paragraph X position\n {\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n var minwidth = tableWidth;\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (wrappingBounds.x - (table.x)) > minimumWidthRequired\n && (this.viewer.clientArea.right - wrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n var isPositionsUpdated = false;\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var marginTop = 0;\n this.isYPositionUpdated = true;\n rect.height -= (wrappingBounds.bottom + marginTop - rect.y);\n rect.width = this.viewer.clientArea.width;\n rect.y = wrappingBounds.bottom + marginTop;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else {\n var xposition = rect.x;\n rect.x = wrappingBounds.right + table.firstChild.firstChild.leftMargin;\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.startAt = function (element, text) {\n if (element.footnoteType === 'Footnote') {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialFootNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.footNoteNumberFormat, this.documentHelper.footnoteCollection.indexOf(element) + this.startat);\n }\n else {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialEndNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.endnoteNumberFormat, this.documentHelper.endnoteCollection.indexOf(element) + this.startat);\n }\n return text;\n };\n Layout.prototype.layoutFootEndNoteElement = function (element) {\n this.isFootnoteContentChanged = true;\n var footnote;\n var positionchanged = false;\n var footIndex = this.documentHelper.footnoteCollection.indexOf(element);\n var insertIndex = 1;\n this.islayoutFootnote = true;\n var isFitted;\n var clientArea = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientActiveArea = new Rect(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.y, this.viewer.clientActiveArea.width, this.viewer.clientActiveArea.height);\n var bodyWidget = element.paragraph.bodyWidget;\n var isCreated = false;\n var height = 0;\n if (bodyWidget.page.footnoteWidget) {\n for (var j = 0; j < bodyWidget.page.footnoteWidget.bodyWidgets.length; j++) {\n insertIndex = bodyWidget.page.footnoteWidget.bodyWidgets.length;\n var currentIndex = this.documentHelper.footnoteCollection.indexOf((bodyWidget.page.footnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n element.isLayout = true;\n if (element.footnoteType === 'Footnote') {\n if (bodyWidget.page.footnoteWidget && bodyWidget.page.footnoteWidget instanceof FootNoteWidget) {\n footnote = bodyWidget.page.footnoteWidget;\n }\n else {\n isCreated = true;\n footnote = new FootNoteWidget();\n footnote.footNoteType = 'Footnote';\n footnote.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnote.margin = new Margin(0, height, 0, 0);\n }\n this.isFootNoteLayoutStart = true;\n if (isCreated) {\n bodyWidget.page.footnoteWidget = footnote;\n }\n var body = element.bodyWidget;\n this.viewer.updateClientArea(footnote.sectionFormat, footnote.page);\n this.viewer.clientArea.y = clientArea.y;\n this.viewer.clientActiveArea.y = clientActiveArea.y;\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n var block = element.bodyWidget.childWidgets[i];\n //TODO: Ensure this case.\n if (this.isLayoutWhole) {\n block.containerWidget = undefined;\n }\n else {\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = footnote.sectionFormat;\n block.containerWidget.containerWidget = footnote;\n }\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n height += block.height;\n block.y = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n body.height += block.height;\n }\n this.isFootNoteLayoutStart = false;\n isFitted = false;\n if (!element.paragraph.isInsideTable) {\n if (height >= clientActiveArea.height) {\n this.isfootMove = true;\n }\n if (positionchanged) {\n footnote.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n footnote.bodyWidgets.push(body);\n }\n footnote.height += height;\n }\n else {\n this.footnoteHeight += height;\n }\n isFitted = true;\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientActiveArea.height -= height;\n this.viewer.clientArea = clientArea;\n }\n return isFitted;\n };\n Layout.prototype.layoutEndNoteElement = function () {\n var lastpage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var foot = void 0;\n var endNote = void 0;\n var isCreated = void 0;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n foot = this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endNote = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endNote = new FootNoteWidget();\n endNote.footNoteType = 'Endnote';\n endNote.page = bodyWidget.page;\n }\n var body = foot.bodyWidget;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n block.containerWidget = body;\n }\n if (endNote.bodyWidgets.indexOf(body) === -1) {\n endNote.bodyWidgets.push(body);\n body.sectionFormat = endNote.sectionFormat;\n }\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endNote;\n }\n }\n this.layoutfootNote(endNote);\n }\n };\n Layout.prototype.hasValidElement = function (paragraph) {\n var line = paragraph.firstChild;\n if (line && !isNullOrUndefined(this.documentHelper.selection)) {\n var elementBox = line.children[0];\n while (elementBox) {\n if (elementBox instanceof FieldElementBox) {\n elementBox = this.documentHelper.selection.getNextValidElementForField(elementBox);\n if (!isNullOrUndefined(elementBox) && !elementBox.line.paragraph.equals(paragraph)) {\n return false;\n }\n }\n if (elementBox instanceof TextElementBox || elementBox instanceof ImageElementBox) {\n return true;\n }\n if (!isNullOrUndefined(elementBox)) {\n elementBox = elementBox.nextNode;\n }\n }\n }\n return false;\n };\n Layout.prototype.updateFieldText = function (element) {\n var text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && this.isOverlapFloatTable) {\n var table = void 0;\n if (element.line.paragraph.previousRenderedWidget instanceof TableWidget && element.line.paragraph.previousRenderedWidget.wrapTextAround) {\n table = element.line.paragraph.previousRenderedWidget;\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.viewer.clientActiveArea.x += line.paragraph.leftIndent;\n this.isOverlapFloatTable = false;\n }\n if (line !== element.line) {\n this.isRTLLayout = false;\n }\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v', '\\f'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')\n || (character === '\\f' && text !== '\\f')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n Layout.prototype.moveFromNextPage = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n var splittedParagraph = nextLine.paragraph;\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n if (splittedParagraph.childWidgets.length === 0) {\n splittedParagraph.destroy();\n }\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement) {\n if (this.is2013Justification) {\n return false;\n }\n this.clearLineMeasures();\n var line = currentElement.line;\n line.marginTop = 0;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n var paragarph = currentElement.line.paragraph;\n var bodyWidget = paragarph.bodyWidget;\n if (bodyWidget && bodyWidget.floatingElements.length > 0) {\n this.hasFloatingElement = true;\n this.isXPositionUpdated = true;\n return false;\n }\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!isNullOrUndefined(element.formFieldData) && this.isInitialLoad) {\n this.checkAndUpdateFieldData(element);\n }\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n if (this.documentHelper.fieldStacks.indexOf(element) === -1) {\n this.documentHelper.fieldStacks.push(element);\n }\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.documentHelper.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.documentHelper.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n Layout.prototype.checkAndUpdateFieldData = function (fieldBegin) {\n if (fieldBegin.hasFieldEnd && !isNullOrUndefined(fieldBegin.fieldEnd)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var seperator = new FieldElementBox(2);\n seperator.fieldBegin = fieldBegin;\n seperator.fieldEnd = fieldBegin.fieldEnd;\n seperator.line = fieldBegin.line;\n fieldBegin.line.children.splice(fieldBegin.fieldEnd.indexInOwner, 0, seperator);\n fieldBegin.fieldSeparator = seperator;\n fieldBegin.fieldEnd.fieldSeparator = seperator;\n }\n var previousNode = fieldBegin.fieldEnd.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 2) {\n var formFieldData = fieldBegin.formFieldData;\n if (formFieldData instanceof CheckBoxFormField) {\n var checkBoxTextElement = new TextElementBox();\n checkBoxTextElement.line = fieldBegin.line;\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, checkBoxTextElement);\n checkBoxTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n if (formFieldData.sizeType !== 'Auto') {\n checkBoxTextElement.characterFormat.fontSize = formFieldData.size * CHECK_BOX_FACTOR;\n }\n else {\n checkBoxTextElement.characterFormat.fontSize = checkBoxTextElement.characterFormat.fontSize * CHECK_BOX_FACTOR;\n }\n }\n else if (formFieldData instanceof DropDownFormField) {\n var dropDownTextElement = new TextElementBox();\n dropDownTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n dropDownTextElement.line = fieldBegin.line;\n if (formFieldData.dropdownItems.length > 0) {\n dropDownTextElement.text = formFieldData.dropdownItems[formFieldData.selectedIndex];\n }\n else {\n dropDownTextElement.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, dropDownTextElement);\n }\n }\n }\n };\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n var paraFormat = paragraph.paragraphFormat;\n var subWidth = 0;\n var whiteSpaceCount = 0;\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n var borders = paraFormat.borders;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = this.getBeforeSpacing(paragraph);\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n if ((paraFormat.bidi || this.isContainsRtl(lineWidget))) {\n this.shiftElementsForRTLLayouting(lineWidget, paraFormat.bidi);\n }\n var isParagraphStart = lineWidget.isFirstLine();\n var isParagraphEnd = lineWidget.isLastLine();\n var firstLineIndent = 0;\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n var textAlignment = paraFormat.textAlignment;\n if (textAlignment !== 'Left' && this.viewer.textWrap\n && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi))) {\n var getWidthAndSpace = this.getSubWidth(lineWidget, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n }\n }\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(paragraph.containerWidget instanceof TextFrame)) {\n var elementBox = new TextElementBox();\n elementBox.line = lineWidget;\n lineWidget.children.push(elementBox);\n elementBox.text = '¶';\n elementBox.characterFormat = paragraph.characterFormat;\n elementBox.width = this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n this.adjustPosition(elementBox, paragraph.bodyWidget);\n paragraph.x += elementBox.padding.left;\n if (isEmptyLine) {\n this.checkInbetweenShapeOverlap(lineWidget);\n }\n lineWidget.children.splice(elementBox.indexInOwner, 1);\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) &&\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y\n && !(lineWidget.isFirstLine() && isNullOrUndefined(lineWidget.paragraph.previousWidget))) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n //let maxDescent: number = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n //maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n if (borders.top.lineStyle != 'None') {\n if (lineWidget.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (lineWidget.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (i === 0 && element instanceof ListTextElementBox) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') { //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') { //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n }\n }\n lineWidget.margin = new Margin(0, topMargin, 0, bottomMargin);\n lineWidget.height = topMargin + height + bottomMargin;\n if (isNullOrUndefined(paragraph.nextRenderedWidget) && paragraph.isInsideTable\n && paragraph.previousRenderedWidget instanceof TableWidget && paragraph.isEmpty()\n && (!(paragraph.childWidgets[0].children.length > 0\n && paragraph.childWidgets[0].children[0] instanceof ListTextElementBox)\n || paragraph.childWidgets[0].children.length === 0)) {\n //Special behavior for empty cell mark after nested table, preserved with zero height by default.\n //Empty line is displayed in cell for the last empty paragraph (Cell mark - last paragraph in cell) after a nested table.\n lineWidget.height = 0;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n this.wrapPosition = [];\n //Clears the previous line elements from collection.\n };\n Layout.prototype.layoutListItems = function (paragraph) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.documentHelper);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n Layout.prototype.layoutList = function (paragraph, documentHelper) {\n var list = documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n this.viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n var currentListLevel = this.getListLevel(list, paragraph.paragraphFormat.listFormat.listLevelNumber);\n // if (isNullOrUndefined(currentListLevel)) {\n // return;\n // }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n if (this.documentHelper.isIosDevice) {\n var text = element.text;\n text = text === String.fromCharCode(61623) ? String.fromCharCode(9679) : text === String.fromCharCode(61551) + String.fromCharCode(32) ? String.fromCharCode(9675) : text;\n if (text !== element.text) {\n element.text = text;\n }\n }\n documentHelper.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n var tabWidth = this.getTabWidth(paragraph, this.viewer, index, lineWidget, element);\n documentHelper.textHelper.updateTextSize(element, paragraph);\n element.width = tabWidth;\n }\n else {\n element.text = ' ';\n documentHelper.textHelper.updateTextSize(element, paragraph);\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget);\n this.cutClientWidth(element);\n this.hasFloatingElement = false;\n this.isXPositionUpdated = false;\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n this.viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * @private\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? String.fromCharCode(61623) : val === 1 ? String.fromCharCode(61551) + String.fromCharCode(32) : String.fromCharCode(61607);\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === String.fromCharCode(61607) ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n if (this.isWrapText) {\n if (!isNullOrUndefined(splittedElementBox)) {\n lineWidget.children.splice(elementIndex + 1, 0, splittedElementBox);\n splittedElementBox.line = lineWidget;\n }\n return;\n }\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n //Move Next element box to temp collection\n for (var i = elementIndex + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n lineWidget.children.splice(elementIndex + 1, lineWidget.children.length - 1);\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n Layout.prototype.addElementToLine = function (paragraph, element) {\n if (!(element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (this.isWrapText) {\n this.isWrapText = false;\n this.viewer.clientActiveArea.width = this.viewer.clientArea.right - this.viewer.clientActiveArea.x;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n }\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n };\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n //const line: LineWidget = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.documentHelper.textHelper.getWidth(splittedElementBox.text, characterFormat);\n splittedElementBox.trimEndWidth = splittedElementBox.width;\n splittedElementBox.characterRange = elementBox.characterRange;\n //splittedElementBox.revisions = splittedElementBox.revisions;\n elementBox.text = elementBox.text.substr(0, index);\n elementBox.width -= splittedElementBox.width;\n elementBox.trimEndWidth = elementBox.width;\n if (elementBox.revisions.length > 0) {\n this.updateRevisionForSplittedElement(elementBox, splittedElementBox, true);\n splittedElementBox.isMarkedForRevision = elementBox.isMarkedForRevision;\n }\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.splitErrorCollection(elementBox, splittedElementBox);\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n Layout.prototype.splitErrorCollection = function (elementBox, splittedBox) {\n if (elementBox.errorCollection.length > 0) {\n var errorCollection = [];\n var ignoreItems = elementBox.ignoreOnceItems;\n for (var i = 0; i < elementBox.errorCollection.length; i++) {\n errorCollection.push(elementBox.errorCollection[i]);\n }\n for (var j = 0; j < elementBox.errorCollection.length; j++) {\n var index = elementBox.text.indexOf(elementBox.errorCollection[j].text);\n var textElement = elementBox.errorCollection[j];\n if (index < 0) {\n errorCollection.splice(0, 1);\n splittedBox.errorCollection.push(textElement);\n }\n else if (splittedBox.text.indexOf(textElement.text) > 0) {\n splittedBox.errorCollection.push(textElement);\n }\n }\n splittedBox.ignoreOnceItems = ignoreItems;\n elementBox.ignoreOnceItems = [];\n elementBox.errorCollection = errorCollection;\n }\n };\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat);\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.indexInOwner > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.indexInOwner - 1);\n return;\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n splittedElement.errorCollection = textElement.errorCollection;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, characterFormat);\n splittedElement.trimEndWidth = splittedElement.width;\n splittedElement.characterRange = textElement.characterRange;\n textElement.width -= splittedElement.width;\n textElement.trimEndWidth = textElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n this.addElementToLine(paragraph, textElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n Layout.prototype.updateRevisionForSplittedElement = function (item, splittedElement, isSplitted, isJustify) {\n if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (isSplitted) {\n splittedElement.revisions.push(currentRevision);\n var rangeIndex = currentRevision.range.indexOf(item);\n if (rangeIndex < 0) {\n currentRevision.range.push(splittedElement);\n }\n else {\n if (isJustify) {\n currentRevision.range.splice(rangeIndex, 0, splittedElement);\n }\n else {\n currentRevision.range.splice(rangeIndex + 1, 0, splittedElement);\n }\n }\n }\n else {\n currentRevision.range.splice(currentRevision.range.length - 1, 1);\n currentRevision.range.push(splittedElement);\n splittedElement.revisions.push(currentRevision);\n }\n }\n }\n };\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var startIndex = indexOf;\n var paddingLeft = textElement.padding.left;\n textElement.padding.left = 0;\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n //const fontSize: number = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length.\n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, format);\n splittedElement.trimEndWidth = splittedElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n splittedElement.characterRange = textElement.characterRange;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0, true);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n textElement.text = text;\n textElement.width -= splittedElement.width;\n textElement.trimEndWidth = textElement.width;\n if (textElement.width === 0 && lineWidget.children.indexOf(textElement) !== -1) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n lineWidget.children[startIndex].padding.left = paddingLeft;\n };\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var isSplitByCharacter = false;\n var index = -1;\n if (!(text.substring(0, 1) === ' ') && !(text.substring(0, 1) === '-')) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n if (characterUptoWS == 0) {\n characterUptoWS = HelperMethods.trimEnd(text).indexOf('-') + 1;\n if (characterUptoWS > 0) {\n isSplitByCharacter = true;\n }\n }\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat);\n }\n if (this.viewer.clientActiveArea.width < textWidth) {\n //Check and split the previous text elements to next line.\n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element), characterFormat);\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && !isSplitByCharacter && (index > 0 || text.indexOf(' ') !== -1 || text.indexOf('-') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n this.updateRevisionForSplittedElement(span, newSpan, true);\n newSpan.characterFormat.copyFormat(span.characterFormat);\n newSpan.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n this.updateRevisionForSplittedElement(span, newText, true);\n newText.characterFormat.copyFormat(span.characterFormat);\n newText.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /* eslint-disable */\n Layout.prototype.moveToNextLine = function (line) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n var borders = paraFormat.borders;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n var pageIndex = 0;\n var skip2013Justification = false;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n if (paragraph.bodyWidget && !(paragraph.bodyWidget instanceof HeaderFooterWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(paragraph.bodyWidget.page);\n }\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph, pageIndex);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n }\n if ((paraFormat.bidi || this.isContainsRtl(line))) {\n this.shiftElementsForRTLLayouting(line, paraFormat.bidi);\n // this.reArrangeElementsForRtl(line, paraFormat.bidi);\n this.isRTLLayout = true;\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.documentHelper.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if (paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var getWidthAndSpace;\n var textAlignment = paraFormat.textAlignment;\n var totalSpaceCount = 0;\n // calculates the sub width, for text alignments - Center, Right, Justify.\n // if the element is paragraph end and para bidi is true and text alignment is justify\n // we need to calculate subwidth and add it to the left margin of the element.\n if (textAlignment !== 'Left' && this.viewer.textWrap && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi) || (this.is2013Justification && isParagraphEnd))) {\n getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n totalSpaceCount = getWidthAndSpace[0].totalSpaceCount;\n skip2013Justification = line.isEndsWithPageBreak || line.isEndsWithLineBreak || line.paragraph.bidi || this.isRTLLayout;\n }\n if (!skip2013Justification && (getWidthAndSpace && getWidthAndSpace.length === 1) && this.viewer.clientActiveArea.width > 0 &&\n !isParagraphEnd && !this.is2013Justification && textAlignment === 'Justify' && this.documentHelper.compatibilityMode === 'Word2013') {\n var availableWidth = this.viewer.clientActiveArea.width;\n var totalSpaceWidth = this.getTotalSpaceWidth(line);\n var averageWidthOfSpace = totalSpaceWidth / totalSpaceCount;\n var avgAvailableLineWidthForSpace = (availableWidth) / totalSpaceCount;\n var diffFactor = (avgAvailableLineWidthForSpace / averageWidthOfSpace) * 100;\n var widthForAdjustment = 0;\n if (diffFactor <= 33) {\n widthForAdjustment = totalSpaceWidth / 8;\n }\n else {\n widthForAdjustment = totalSpaceWidth / 4;\n }\n this.viewer.clientActiveArea.x -= widthForAdjustment;\n this.viewer.clientActiveArea.width += widthForAdjustment;\n this.is2013Justification = true;\n this.moveElementFromNextLine(line);\n this.nextElementToLayout = line.children[line.children.length - 1];\n return;\n }\n else {\n if (this.is2013Justification && isParagraphEnd) {\n if (subWidth > 0) {\n subWidth = 0;\n whiteSpaceCount = 0;\n }\n }\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n }\n var addSubWidth = false;\n var wrapIndex = 0;\n var lineSpacingType = paraFormat.lineSpacingType;\n var isStarted = false;\n var children = line.renderedElements;\n for (var i = 0; i < children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = children[i];\n if (!isNullOrUndefined(getWidthAndSpace) && isStarted && elementBox.padding.left > 0 &&\n (getWidthAndSpace.length > wrapIndex + 1)) {\n var previousWidth = subWidth;\n if (textAlignment === \"Justify\") {\n previousWidth = subWidth * getWidthAndSpace[wrapIndex].spaceCount;\n }\n else if (textAlignment === \"Center\") {\n previousWidth = subWidth / 2;\n }\n elementBox.padding.left = elementBox.padding.left - previousWidth;\n var subWidthInfo = getWidthAndSpace[++wrapIndex];\n subWidth = subWidthInfo.subWidth;\n whiteSpaceCount = subWidthInfo.spaceCount;\n }\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n isStarted = true;\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === children.length - 1);\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0] && this.documentHelper.pages[pageIndex].sectionIndex === this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n topMargin += 0;\n }\n else {\n topMargin += beforeSpacing;\n }\n if (borders.top.lineStyle != 'None') {\n if (line.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (line.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n bottomMargin += afterSpacing;\n if (i === 0 || (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') &&\n elementBox.previousElement instanceof ShapeBase && elementBox.previousElement.textWrappingStyle !== 'Inline')\n || elementBox.padding.left > 0) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right' || (textAlignment === 'Justify' && paraFormat.bidi && isParagraphEnd)) {\n //Aligns the text as right justified and consider subwidth for bidirectional paragrph with justify.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n }\n if (!isNullOrUndefined(line.paragraph.bodyWidget) && !isNullOrUndefined(line.paragraph.bodyWidget.page.headerWidget)\n && line.paragraph.bodyWidget.page.headerWidget.floatingElements.length > 0\n && line.paragraph === line.paragraph.bodyWidget.childWidgets[0]\n && line.indexInOwner === 0) {\n //To check whether first para in the page overlaps with shape in Header.\n this.checkInbetweenShapeOverlap(line, line.paragraph.bodyWidget.page.headerWidget.floatingElements);\n }\n this.checkInbetweenShapeOverlap(line);\n if (line.isLastLine() && line.indexInOwner === 0 && line.paragraph.paragraphFormat.widowControl) {\n var previousSplitWidget = line.paragraph.previousSplitWidget;\n if (!isNullOrUndefined(previousSplitWidget) && !previousSplitWidget.isEndsWithPageBreak) {\n var startLineIndex = previousSplitWidget.childWidgets.length - 1;\n if (previousSplitWidget.childWidgets.length === 2) {\n startLineIndex = 0;\n }\n this.splitParagraph(previousSplitWidget, startLineIndex, line.paragraph);\n this.updateClientAreaForNextBlock(line, line.paragraph);\n }\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n this.wrapPosition = [];\n };\n //Checks Inbetween Overlap & Updates Line marginTop\n Layout.prototype.checkInbetweenShapeOverlap = function (line, floatingElements) {\n var _this = this;\n if (!(line.paragraph.containerWidget instanceof TextFrame) && line.paragraph.bodyWidget) {\n var overlapShape_1;\n var lineY_1 = this.getLineY(line);\n var isInsideTable_1 = line.paragraph.isInsideTable;\n if (isNullOrUndefined(floatingElements)) {\n floatingElements = line.paragraph.bodyWidget.floatingElements;\n }\n /* eslint:disable */\n floatingElements.sort(function (a, b) { return a.y - b.y; });\n floatingElements.forEach(function (shape) {\n if (isInsideTable_1 && shape.line && !shape.line.paragraph.isInsideTable || isNullOrUndefined(shape.line)) {\n return;\n }\n var lineRect;\n if (shape.textWrappingStyle === 'TopAndBottom' && shape instanceof ImageElementBox) {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.children[0].height);\n }\n else {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.height);\n }\n var shapeRect = new Rect(shape.x, shape.y - shape.distanceTop, shape.width, shape.height);\n if (shape.line && _this.isRelayout && !_this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, line.paragraph)\n || _this.isRelayout && _this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, _this.endOverlapWidget)) {\n return;\n }\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom');\n if (overlapShape_1 && considerShape &&\n overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom + line.height > shape.y - shape.distanceTop &&\n overlapShape_1.y - overlapShape_1.distanceTop < shape.y - shape.distanceTop &&\n shape.y + shape.height + shape.distanceBottom > overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom) {\n overlapShape_1 = shape;\n line.marginTop = ((shape.y + shape.height + shape.distanceBottom) - lineY_1);\n }\n else if (considerShape && !overlapShape_1 && lineRect.isIntersecting(shapeRect)) {\n overlapShape_1 = shape;\n line.marginTop = ((shape.y + shape.height + shape.distanceBottom) - lineY_1);\n }\n });\n if (overlapShape_1) {\n this.viewer.cutFromTop(overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom);\n }\n else if (this.isRelayoutOverlap) {\n line.marginTop = 0;\n }\n }\n };\n Layout.prototype.getLineY = function (line) {\n var para = line.paragraph;\n var lineY = para.y;\n if (!para.isEmpty()) {\n var lineWidget = para.firstChild;\n while (lineWidget !== line) {\n lineY = lineY + lineWidget.height + lineWidget.marginTop;\n lineWidget = lineWidget.nextLine;\n }\n }\n return lineY;\n };\n Layout.prototype.updateLineWidget = function (line) {\n var spaceHeight = 0;\n var spaceBaseline = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element instanceof TextElementBox && element.text.replace(/\\s+/g, '').length === 0) {\n if (spaceHeight < element.height) {\n spaceHeight = element.height;\n spaceBaseline = element.baselineOffset;\n }\n continue;\n }\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var elementHeight = element.height;\n var baselineOffset = element.baselineOffset;\n //We have increased the checkbox form field font size using a constant factor `CHECK_BOX_FACTOR`\n //To match the MS Word check box rendering size.\n //Due to it line height also get increased. So, handled adjusting height while updating line height.\n if (element instanceof TextElementBox && element.isCheckBoxElement) {\n elementHeight = elementHeight / CHECK_BOX_FACTOR;\n baselineOffset = baselineOffset / CHECK_BOX_FACTOR;\n }\n if (this.maxTextHeight < elementHeight) {\n this.maxTextHeight = elementHeight;\n this.maxTextBaseline = baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n }\n }\n if (this.maxTextHeight === 0 && spaceHeight !== 0) {\n if (line.isLastLine() && this.documentHelper.selection) {\n var paragraphMarkSize = this.documentHelper.selection.getParagraphMarkSize(line.paragraph, 0, 0);\n this.maxTextHeight = paragraphMarkSize.height;\n this.maxTextBaseline = spaceBaseline;\n }\n else {\n this.maxTextHeight = spaceHeight;\n this.maxTextBaseline = spaceBaseline;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n };\n Layout.prototype.moveToNextPage = function (viewer, line, isPageBreak) {\n if (this.isFootNoteLayoutStart) {\n return;\n }\n var paragraphWidget = line.paragraph;\n var startBlock;\n var startIndex = 0;\n var keepLinesTogether = false;\n var keepWithNext = false;\n if (paragraphWidget && !(!isNullOrUndefined(paragraphWidget.containerWidget) && !isNullOrUndefined(paragraphWidget.containerWidget.containerWidget) && paragraphWidget.containerWidget.containerWidget instanceof FootNoteWidget)) {\n var index = 0;\n if (paragraphWidget instanceof FootNoteWidget) {\n return;\n }\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index !== 0) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && !isNullOrUndefined(paragraphWidget.previousWidget)) {\n index = 0;\n keepLinesTogether = true;\n }\n else if (index == 1 && !line.previousLine.isEndsWithPageBreak && paragraphWidget.paragraphFormat.widowControl &&\n !isNullOrUndefined(paragraphWidget.previousWidget)) {\n index = 0;\n keepLinesTogether = true;\n }\n }\n if (index > 0 || isPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n if (index === 0 && !paragraphWidget.isEndsWithPageBreak) {\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : blockInfo.node;\n startIndex = startBlock instanceof TableWidget ? 0 : parseInt(blockInfo.position.index, 10);\n paragraphWidget = startBlock;\n index = startIndex;\n keepLinesTogether = false;\n keepWithNext = true;\n }\n }\n }\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(paragraphWidget.bodyWidget) && !isNullOrUndefined(paragraphWidget.bodyWidget.containerWidget) && !(paragraphWidget.bodyWidget.containerWidget instanceof FootNoteWidget) && paragraphWidget.bodyWidget.page.footnoteWidget !== undefined) {\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, true);\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, false);\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget, index === 0);\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0 && paragraphWidget.floatingElements.length == 0) {\n if (line.isLastLine() && isPageBreak) {\n return;\n }\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n nextParagraph.index = paragraphWidget.index;\n var insertIndex = 0;\n for (var i = index; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = paragraphWidget.paragraphFormat;\n nextParagraph.characterFormat = paragraphWidget.characterFormat;\n paragraphWidget.childWidgets.splice(index);\n nextParagraph.containerWidget = nextBody;\n var footWidget = this.getFootNoteWidgetsOf(nextParagraph);\n this.moveFootNotesToPage(footWidget, paragraphWidget.bodyWidget, nextBody);\n paragraphWidget = nextParagraph;\n }\n else if (paragraphWidget instanceof ParagraphWidget && paragraphWidget.floatingElements.length > 0 && index > 0) {\n var body = paragraphWidget.containerWidget;\n body.childWidgets.splice(body.childWidgets.indexOf(paragraphWidget), 1);\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n for (var i = 0; i < paragraphWidget.floatingElements.length; i++) {\n if (body.floatingElements.indexOf(paragraphWidget.floatingElements[i]) != -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(paragraphWidget.floatingElements[i]), 1);\n nextBody.floatingElements.push(paragraphWidget.floatingElements[i]);\n }\n }\n paragraphWidget.containerWidget = nextBody;\n nextBody.height += paragraphWidget.height;\n }\n else if (!isPageBreak) {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n if (paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, paragraphWidget.containerWidget, false);\n }\n }\n if (!isPageBreak) {\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n if (paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, nextBody, true);\n }\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n if (keepLinesTogether || keepWithNext) {\n if (paragraphWidget.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n }\n if (line.paragraph !== paragraphWidget) {\n if (paragraphWidget instanceof TableWidget) {\n this.clearTableWidget(paragraphWidget, true, true, false);\n }\n this.layoutBlock(paragraphWidget, 0);\n viewer.updateClientAreaForBlock(paragraphWidget, false);\n }\n var lastBlock = line.paragraph;\n if (keepWithNext) {\n var nextBlock = paragraphWidget.nextWidget;\n if (!isNullOrUndefined(nextBlock)) {\n do {\n viewer.updateClientAreaForBlock(nextBlock, true);\n if (nextBlock !== lastBlock) {\n if (nextBlock instanceof TableWidget) {\n this.clearTableWidget(nextBlock, true, true, false);\n }\n this.layoutBlock(nextBlock, 0);\n viewer.updateClientAreaForBlock(nextBlock, false);\n }\n else {\n this.viewer.updateClientAreaLocation(nextBlock, this.viewer.clientActiveArea);\n break;\n }\n nextBlock = nextBlock.nextWidget;\n } while (nextBlock);\n }\n }\n this.updateClientAreaForNextBlock(line, lastBlock);\n }\n if (line.isFirstLine() && line.indexInOwner === 0 && !(line.children[0] instanceof ListTextElementBox)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(line.paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n }\n if (paragraphWidget instanceof ParagraphWidget &&\n paragraphWidget.floatingElements.length > 0 && !isPageBreak) {\n for (var m = 0; m < paragraphWidget.floatingElements.length; m++) {\n var shape = paragraphWidget.floatingElements[m];\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n if (shape instanceof ShapeElementBox)\n this.updateChildLocationForCellOrShape(shape.y, shape);\n }\n }\n if (this.isRelayoutOverlap && this.endOverlapWidget) {\n var block_1 = this.endOverlapWidget.previousRenderedWidget;\n var para = line.paragraph;\n this.startOverlapWidget = para;\n line = this.endOverlapWidget.childWidgets[0];\n para = line.paragraph;\n while (para) {\n para.floatingElements.forEach(function (shape) {\n if (block_1.bodyWidget.floatingElements.indexOf(shape) !== -1) {\n block_1.bodyWidget.floatingElements.splice(block_1.bodyWidget.floatingElements.indexOf(shape), 1);\n line.paragraph.bodyWidget.floatingElements.push(shape);\n }\n });\n para = para !== this.endOverlapWidget ? para.nextWidget : undefined;\n }\n this.layoutStartEndBlocks(this.startOverlapWidget, this.endOverlapWidget);\n this.startOverlapWidget = undefined;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - this.endOverlapWidget.y;\n this.viewer.clientActiveArea.y = this.endOverlapWidget.y;\n }\n };\n /**\n * @param {ParagraphWidget} paragarph - the paragraph\n * @param {BodyWidget} body - the bodyWidget\n * @param {boolean} add - to specify add or remove floating elements from body widget.\n */\n Layout.prototype.addRemoveFloatElementsFromBody = function (paragarph, body, add) {\n if (paragarph.floatingElements.length > 0) {\n for (var x = 0; x < paragarph.floatingElements.length; x++) {\n if (add) {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) === -1) {\n body.floatingElements.push(paragarph.floatingElements[x]);\n }\n }\n else {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) !== -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(paragarph.floatingElements[x]), 1);\n }\n }\n }\n }\n };\n /**\n * Align block based on keep with next and keep lines together property.\n */\n Layout.prototype.alignBlockElement = function (block) {\n if (block instanceof ParagraphWidget && block.isEndsWithPageBreak) {\n return { node: undefined, position: { index: '' } };\n }\n var startBlock;\n var startIndex = 0;\n // Check previous block has keep with next property.\n var previousBlock = this.getPreviousBlock(block);\n while (previousBlock) {\n if (previousBlock instanceof ParagraphWidget) {\n if (!previousBlock.paragraphFormat.keepWithNext || previousBlock.isEndsWithPageBreak) {\n break;\n }\n startBlock = previousBlock;\n if (previousBlock.paragraphFormat.keepLinesTogether) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startIndex = 0;\n }\n }\n else {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))\n && previousBlock.childWidgets.length === 1) {\n startBlock = undefined;\n }\n else {\n if (!previousBlock.paragraphFormat.widowControl) {\n startIndex = previousBlock.lastChild.indexInOwner;\n }\n else {\n startIndex = previousBlock.lastChild.indexInOwner - 1;\n if (startIndex === 1 || startIndex < 0) {\n // Move entire block to next page based on widow control.\n startIndex = 0;\n }\n if (startIndex !== 0) {\n break;\n }\n }\n }\n }\n }\n else if (previousBlock instanceof TableRowWidget) {\n var childWidget = previousBlock.childWidgets[0];\n if (childWidget.childWidgets.length > 0) {\n var firstBlock = this.documentHelper.selection.getFirstParagraphInCell(childWidget);\n if (!firstBlock.paragraphFormat.keepWithNext) {\n break;\n }\n if (firstBlock.paragraphFormat.keepWithNext) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startBlock = previousBlock;\n startIndex = startBlock.indexInOwner;\n }\n }\n }\n else {\n break;\n }\n // TODO: Table row splitting case\n }\n previousBlock = this.getPreviousBlock(previousBlock);\n }\n return { node: startBlock, position: { index: startIndex.toString() } };\n };\n Layout.prototype.getPreviousBlock = function (block) {\n var previousBlock;\n if (block instanceof ParagraphWidget) {\n previousBlock = block.previousWidget;\n }\n else if (block instanceof TableRowWidget) {\n previousBlock = block.previousWidget;\n if (isNullOrUndefined(previousBlock)) {\n previousBlock = block.ownerTable.previousWidget;\n }\n }\n if (previousBlock instanceof TableWidget) {\n previousBlock = previousBlock.lastChild;\n }\n return previousBlock;\n };\n Layout.prototype.splitRow = function (startRow) {\n var table = startRow.ownerTable;\n if (startRow.indexInOwner === 0) {\n return table;\n }\n var newTable = this.createTableWidget(table);\n for (var i = startRow.indexInOwner; i < table.childWidgets.length;) {\n var rowWidget = table.childWidgets.splice(i, 1)[0];\n newTable.childWidgets.push(rowWidget);\n rowWidget.containerWidget = newTable;\n table.height -= rowWidget.height;\n newTable.height += rowWidget.height;\n }\n table.containerWidget.childWidgets.splice(table.indexInOwner + 1, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n return newTable;\n };\n Layout.prototype.splitParagraph = function (paragarph, index, nextParagraph) {\n if (index === 0 && isNullOrUndefined(nextParagraph)) {\n return paragarph;\n }\n var isMoveCurrentBlock = false;\n if (isNullOrUndefined(nextParagraph)) {\n nextParagraph = new ParagraphWidget();\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner + 1, 0, nextParagraph);\n nextParagraph.paragraphFormat = paragarph.paragraphFormat;\n nextParagraph.characterFormat = paragarph.characterFormat;\n nextParagraph.index = paragarph.index;\n }\n else if (index === 0) {\n isMoveCurrentBlock = true;\n var temp = paragarph;\n paragarph = nextParagraph;\n nextParagraph = temp;\n }\n var insertIndex = 0;\n for (var i = index; i < paragarph.childWidgets.length; i++) {\n var lineWidget = paragarph.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n if (isMoveCurrentBlock) {\n nextParagraph.childWidgets.push(lineWidget);\n }\n else {\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n }\n nextParagraph.height += lineWidget.height;\n paragarph.height -= lineWidget.height;\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n if (isMoveCurrentBlock) {\n nextParagraph.containerWidget.childWidgets.splice(nextParagraph.indexInOwner, 1);\n nextParagraph.y = paragarph.y;\n nextParagraph.x = paragarph.x;\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.unshift(nextParagraph);\n }\n else {\n paragarph.childWidgets.splice(index);\n }\n if (paragarph.childWidgets.length === 0 || isMoveCurrentBlock) {\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner, 1);\n }\n return nextParagraph;\n };\n Layout.prototype.updateClientPositionForBlock = function (block, currentBlock) {\n var startBlock = (block instanceof TableRowWidget) ? block.ownerTable : block;\n var isClientAreaUpdated = false;\n do {\n this.viewer.updateClientAreaForBlock(startBlock, true);\n if (startBlock instanceof ParagraphWidget) {\n if (currentBlock instanceof ParagraphWidget && currentBlock.equals(startBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addParagraphWidget(this.viewer.clientActiveArea, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n else if (startBlock instanceof TableWidget) {\n this.addTableWidget(this.viewer.clientActiveArea, [startBlock]);\n var nextRow = startBlock.firstChild;\n if (currentBlock instanceof TableRowWidget && startBlock.equals(currentBlock.ownerTable) && !isNullOrUndefined(nextRow)) {\n do {\n if (nextRow.equals(currentBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addTableRowWidget(this.viewer.clientActiveArea, [nextRow]);\n this.updateChildLocationForRow(this.viewer.clientActiveArea.y, nextRow);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + nextRow.height);\n startBlock.height += nextRow.height;\n nextRow = nextRow.nextWidget;\n } while (nextRow);\n }\n else {\n this.updateChildLocationForTable(startBlock.y, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n }\n startBlock = startBlock.nextWidget;\n } while (startBlock && !isClientAreaUpdated);\n };\n Layout.prototype.updateClientAreaForNextBlock = function (line, paragraphWidget) {\n for (var m = 0; m < paragraphWidget.childWidgets.length; m++) {\n var child = paragraphWidget.childWidgets[m];\n if (line === child) {\n break;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + child.height);\n }\n };\n Layout.prototype.layoutStartEndBlocks = function (startBlock, endBlock) {\n var block = startBlock;\n this.isOverlapFloatTable = true;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - startBlock.y;\n this.viewer.clientActiveArea.y = startBlock.y;\n var startParagaraph;\n if (startBlock instanceof TableWidget) {\n startParagaraph = this.documentHelper.selection.getFirstParagraphInFirstCell(startBlock);\n }\n else {\n startParagaraph = startBlock;\n }\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(startParagaraph);\n }\n while (block) {\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.layoutParagraph(block, 0);\n }\n else {\n this.clearTableWidget(block, true, true, true);\n this.layoutTable(block, 0);\n }\n this.viewer.updateClientAreaForBlock(block, false);\n block = block !== endBlock ? block.nextWidget : undefined;\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element.width > 0 && (element instanceof TextElementBox || element instanceof ListTextElementBox)) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n if (!paragraphWidget.isEndsWithPageBreak || viewer instanceof WebLayoutViewer) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (this.isRelayoutFootnote && paragraphWidget.bodyWidget instanceof FootNoteWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n //this.isRelayoutFootnote = false;\n this.shiftFootnoteChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n if (viewer instanceof WebLayoutViewer && paragraphWidget.containerWidget instanceof BodyWidget) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n };\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_1;\n if (widget.y + widget.height > height) {\n top_1 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_1 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_1)) {\n top_1 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_1, widget);\n viewer.clientActiveArea.y += top_1;\n }\n }\n };\n Layout.prototype.shiftFootnoteChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var bottomMargin = widget.page.bodyWidgets[0].sectionFormat.bottomMargin;\n var height = HelperMethods.convertPointToPixel(pageHeight - bottomMargin);\n var top;\n if (widget.y + widget.height > height) {\n top = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top)) {\n top = height - (widget.y + widget.height);\n this.shiftChildLocation(top, widget);\n viewer.clientActiveArea.y += top;\n }\n };\n Layout.prototype.checkPreviousElement = function (line, index, characterFormat) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox && textElement.width > 0) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && (text[text.length - 1] === ' ' || text[text.length - 1] === '-')) {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t') {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.characterRange = textElement.characterRange;\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index_1 > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n textElement.text = text.substr(0, index_1);\n this.documentHelper.textHelper.getTextSize(splittedElement, characterFormat);\n textElement.width -= splittedElement.width;\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox || textElement instanceof FieldElementBox\n // to skip field code\n || textElement instanceof TextElementBox && textElement.width === 0)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n var is2013Justification = paragraph.paragraphFormat.textAlignment === 'Justify' &&\n this.documentHelper.compatibilityMode === 'Word2013';\n if (!is2013Justification) {\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n }\n return isSplitByWord;\n };\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = line.children.length - 1; i > 0; i--) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n }\n else {\n break;\n }\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearInvalidList = function (list) {\n if (list) {\n if (list.abstractListId === -1 && this.documentHelper.abstractLists.indexOf(list.abstractList) !== -1) {\n this.documentHelper.abstractLists.splice(this.documentHelper.abstractLists.indexOf(list.abstractList), 1);\n }\n if (list.listId === -1 && this.documentHelper.lists.indexOf(list) !== -1) {\n this.documentHelper.lists.splice(this.documentHelper.lists.indexOf(list), 1);\n }\n }\n };\n Layout.prototype.getListNumber = function (listFormat, isAutoList) {\n var list = this.documentHelper.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n if (!isNullOrUndefined(levelOverride) && this.documentHelper.renderedLevelOverrides.indexOf(levelOverride) === -1 && isNullOrUndefined(levelOverride.overrideListLevel)) {\n //Add List Override style\n this.documentHelper.renderedLevelOverrides.push(levelOverride);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (this.documentHelper.renderedLists.containsKey(abstractList)) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(levelNumber)) {\n levels.remove(levelNumber);\n this.ClearSubListLevelValues(list, abstractList, levelNumber);\n }\n }\n }\n if (isNullOrUndefined(isAutoList)) {\n this.updateListValues(list, levelNumber);\n }\n return this.getListText(list, levelNumber, listLevel);\n };\n Layout.prototype.ClearSubListLevelValues = function (list, abstractList, levelNumber) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n var levelNumberTemp = levelNumber + 1;\n while (levelNumberTemp < abstractList.levels.length) {\n var listLevel = this.getListLevel(list, levelNumberTemp);\n if (levels.containsKey(levelNumberTemp) && listLevel.restartLevel > levelNumber) {\n levels.remove(levelNumberTemp);\n }\n levelNumberTemp++;\n }\n };\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (!this.documentHelper.renderedLists.containsKey(abstractList)) {\n var startVal = new Dictionary();\n this.documentHelper.renderedLists.add(abstractList, startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.documentHelper.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && listLevel.restartLevel > listLevelNumber) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n if (this.documentHelper.renderedLists.containsKey(this.documentHelper.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.documentHelper.renderedLists.get(this.documentHelper.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n var listLevel = this.getListLevel(listAdv, levelNumber);\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber)));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n Layout.prototype.getListTextListLevel = function (listLevel, listValue) {\n switch (listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n return (listValue).toString();\n case 'Ordinal':\n return (listValue).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n Layout.prototype.getFootEndNote = function (numberFormat, value) {\n switch (numberFormat) {\n case 'UpperCaseRoman':\n return this.getAsRoman(value).toUpperCase();\n case 'LowerCaseRoman':\n return this.getAsRoman(value).toLowerCase();\n case 'UpperCaseLetter':\n return this.getAsLetter(value).toUpperCase();\n case 'LowerCaseLetter':\n return this.getAsLetter(value).toLowerCase();\n default:\n return (value).toString();\n }\n };\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined(((levelOverrideAdv = list.levelOverrides[listLevelNumber])))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fPosition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n var isList = false;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat)) {\n var listFormat = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat;\n if (paragraph.paragraphFormat.leftIndent !== listFormat.leftIndent) {\n isList = true;\n }\n }\n var clientWidth = 0;\n var clientActiveX = viewer.clientActiveArea.x;\n var firstLineIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent);\n if (!isNullOrUndefined(element) && lineWidget.isFirstLine()) {\n clientWidth = this.viewer.clientArea.x + firstLineIndent;\n if (isList) {\n clientActiveX = clientActiveX + firstLineIndent;\n }\n }\n else {\n clientWidth = this.viewer.clientArea.x;\n }\n if (clientActiveX < clientWidth) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n if (lineWidget.isFirstLine()\n && leftIndent > 0 && firstLineIndent < 0) {\n if ((viewer.clientArea.x - viewer.clientActiveArea.x) > 0) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n else if (tabs.length === 0 && paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listLevel) {\n tabs = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat.tabs;\n }\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n var defaultTabWidth = HelperMethods.convertPointToPixel(this.documentHelper.defaultTabWidth);\n if (tabs.length === 0 && (position > 0 && defaultTabWidth > Math.round(position) && isList ||\n defaultTabWidth === this.defaultTabWidthPixel && defaultTabWidth > Math.round(position))) {\n return defaultTabWidth - position;\n }\n else {\n var breaked = false;\n if (tabs.length > 0) {\n for (var i = tabs.length - 1; i > -1; i--) {\n var tabStop = tabs[i];\n var tabPosition = HelperMethods.convertPointToPixel(tabStop.position);\n if (!(parseFloat(tabPosition.toFixed(2)) > parseFloat(position.toFixed(2)))) {\n if (i > 0 && (HelperMethods.convertPointToPixel(tabs[i - 1].position) > parseFloat(position.toFixed(2)))) {\n continue;\n }\n if (i != tabs.length - 1) {\n var tabInfo = this.getJustificationTabWidth(tabs[i + 1], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabInfo.defaultTabWidth;\n fPosition = tabInfo.fPosition;\n position = tabInfo.position;\n isCustomTab = true;\n }\n breaked = true;\n break;\n }\n }\n if (!breaked) {\n var tabJustification = this.getJustificationTabWidth(tabs[0], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabJustification.defaultTabWidth;\n fPosition = tabJustification.fPosition;\n position = tabJustification.position;\n isCustomTab = true;\n }\n }\n if (!isCustomTab) {\n var diff = parseFloat(((position * 100) % (defaultTabWidth * 100) / 100).toFixed(2));\n var cnt = (position - diff) / defaultTabWidth;\n fPosition = (cnt + 1) * defaultTabWidth;\n }\n if (parseFloat(fPosition.toFixed(1)) === parseFloat(position.toFixed(1))) {\n return defaultTabWidth;\n }\n return (fPosition - position) > 0 ? fPosition - position : defaultTabWidth;\n }\n };\n Layout.prototype.getJustificationTabWidth = function (tab, element, lineWidget, paragraph, defaultTabWidth, position, fPosition) {\n var elementWidth = element ? this.documentHelper.textHelper.getTextSize(element, element.characterFormat) : 0;\n if (tab.tabJustification === 'Left' || tab.tabJustification === 'List') {\n fPosition = HelperMethods.convertPointToPixel(tab.position);\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n else {\n var tabWidth = HelperMethods.convertPointToPixel(tab.position) - position;\n var width = this.getRightTabWidth(element.indexInOwner + 1, lineWidget, paragraph);\n if (width < tabWidth && tab.tabJustification != 'Decimal') {\n if (tab.tabJustification === 'Right') {\n defaultTabWidth = tabWidth - width;\n var rightIndent = HelperMethods.convertPointToPixel(paragraph.rightIndent);\n var areaWidth = this.viewer.clientActiveArea.width + rightIndent - defaultTabWidth;\n this.viewer.clientActiveArea.width += rightIndent;\n if (areaWidth < 0) {\n defaultTabWidth += areaWidth - width;\n }\n else if (width > areaWidth) {\n defaultTabWidth -= width - areaWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth - width / 2;\n }\n }\n else if (tab.tabJustification === 'Center' && (width / 2) < tabWidth) {\n defaultTabWidth = tabWidth - width / 2;\n }\n else if (tab.tabJustification === 'Decimal') {\n if (!isNullOrUndefined(element.nextElement) && element.nextElement instanceof TextElementBox) {\n var nextElement = element.nextElement;\n if (nextElement.text.indexOf(\".\") != -1) {\n var index = nextElement.text.indexOf(\".\");\n var text = nextElement.text.substring(0, index);\n var textWidth = this.documentHelper.textHelper.getWidth(text, nextElement.characterFormat);\n defaultTabWidth = tabWidth - textWidth;\n }\n else if (width < tabWidth) {\n defaultTabWidth = tabWidth - width;\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tab.tabJustification === 'Right' ? 0 : elementWidth;\n }\n fPosition = position;\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n return {\n defaultTabWidth: defaultTabWidth,\n fPosition: fPosition,\n position: position\n };\n };\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n var elementBox = lineWidget.children[index];\n while (elementBox) {\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n if (elementBox instanceof FieldTextElementBox && !this.isTocField(elementBox.fieldBegin)) {\n var text = this.documentHelper.getFieldResult(elementBox.fieldBegin, elementBox.paragraph.bodyWidget.page);\n if (text !== '') {\n elementBox.text = text;\n }\n }\n if (elementBox instanceof TextElementBox) {\n this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n elementBox = elementBox.nextNode;\n }\n return width;\n };\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n return i;\n }\n }\n return 0;\n };\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n var trimmedSpaceWidth = 0;\n if (this.wrapPosition.length > 0) {\n var subWidths = this.getSubWidthBasedOnTextWrap(lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd);\n if (subWidths.length > 0) {\n return subWidths;\n }\n }\n var renderElementBox = lineWidget.renderedElements;\n for (var i = renderElementBox.length - 1; i >= 0; i--) {\n var element = renderElementBox[i];\n if (element.width > 0 && element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n var widthExcludeSpace = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat);\n width += widthExcludeSpace;\n // Trimmed space width can be found by subtracting the actual width and width exclude end space.\n trimmedSpaceWidth += element.width - widthExcludeSpace;\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n else {\n ////Add the width of the textelement which contains space alone and present at end of the line.\n trimmedSpaceWidth += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n else {\n width = width;\n }\n }\n var totalSpaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n if ((subWidth <= 0 && !this.is2013Justification) || (spaceCount === 0 && justify && !lineWidget.paragraph.paragraphFormat.bidi)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0 || (isParagraphEnd && this.is2013Justification && spaceCount > 0)) {\n subWidth = subWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n ////Generally, trailing space of line should get trimmed, if alignment type is Right or Left.\n ////But, if right-to-left rendering is enabled and it is last line of paragraph than the trailing space should be preserved.\n ////So, subtracted the trimmedSpaceWidth from subWidth.\n else if (trimmedSpaceWidth > 0 && lineWidget.paragraph.paragraphFormat.bidi && isParagraphEnd) {\n subWidth -= trimmedSpaceWidth;\n }\n // So set sub width to zero to layout the element in left alignment\n // Need to remove is once after implementing subwidth update separatly\n return [{ 'subWidth': subWidth, 'spaceCount': spaceCount, 'totalSpaceCount': totalSpaceCount }];\n };\n Layout.prototype.getSubWidthBasedOnTextWrap = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var subWidths = [];\n var width = 0;\n var lineContent = '';\n var wrapIndex = this.wrapPosition.length - 1;\n var trimSpace = true;\n for (var z = lineWidget.children.length - 1; z >= 0; z--) {\n var elementBox = lineWidget.children[z];\n if (elementBox.width > 0 && elementBox instanceof TextElementBox) {\n var elementText = elementBox.text;\n lineContent = elementText + lineContent;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, elementBox.characterFormat);\n }\n else {\n width += elementBox.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += elementBox.width;\n }\n }\n else {\n lineContent = 'a' + lineContent;\n trimSpace = false;\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n width += elementBox.width;\n }\n }\n if ((elementBox.padding.left > 0 || z === 0) && (wrapIndex >= 0)) {\n var wrapPosition = this.wrapPosition[wrapIndex--];\n while (wrapPosition.width <= 0 && (wrapIndex >= 0)) {\n wrapPosition = this.wrapPosition[wrapIndex--];\n }\n var info = this.getSubWidthInfo(lineWidget, wrapPosition.width, width, lineContent, spaceCount, justify, isParagraphEnd);\n if (!isNullOrUndefined(info)) {\n width = 0;\n lineContent = '';\n subWidths.unshift(info);\n }\n }\n }\n return subWidths;\n };\n /**\n * Returns the total space width in line widget.\n * @param {LineWidget} lineWidget - the line widget\n * @returns {number} the total space width.\n */\n Layout.prototype.getTotalSpaceWidth = function (lineWidget) {\n var totalSpaceWidth = 0;\n if (lineWidget) {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var currentWidget = lineWidget.children[i];\n if (currentWidget instanceof TextElementBox) {\n var spaceCount = currentWidget.text.length - HelperMethods.removeSpace(currentWidget.text).length;\n if (spaceCount > 0) {\n var spaceWidth = this.documentHelper.textHelper.getWidth(' ', currentWidget.characterFormat);\n totalSpaceWidth += spaceCount * spaceWidth;\n }\n }\n }\n }\n return totalSpaceWidth;\n };\n Layout.prototype.getSubWidthInfo = function (lineWidget, lastWrapPositionWidth, width, lineContent, spaceCount, justify, isParagraphEnd) {\n if (lastWrapPositionWidth > 0) {\n var wrappedSubWidth = lastWrapPositionWidth - width;\n lineContent = lineContent.trim();\n spaceCount = lineContent.length - HelperMethods.removeSpace(lineContent).length;\n // TODO: Consider first line indent.\n var totalSubWidth = wrappedSubWidth;\n if (totalSubWidth <= 0 || (spaceCount === 0 && justify && !lineWidget.paragraph.paragraphFormat.bidi)) {\n spaceCount = 0;\n totalSubWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0) {\n totalSubWidth = totalSubWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n return { 'subWidth': totalSubWidth, 'spaceCount': spaceCount, 'totalSpaceCount': spaceCount };\n }\n return undefined;\n };\n Layout.prototype.getBeforeSpacing = function (paragraph, pageIndex) {\n var beforeSpacing = 0;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing) {\n var previousBlock = paragraph.previousWidget;\n if (previousBlock instanceof ParagraphWidget) {\n var afterSpacing = this.getAfterSpacing(previousBlock);\n var before = paragraph.paragraphFormat.beforeSpacing;\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n before = 14;\n }\n if (afterSpacing < before) {\n beforeSpacing = before - afterSpacing;\n }\n }\n else if (previousBlock instanceof TableWidget) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n else {\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0]) {\n if (this.documentHelper.pages[pageIndex].sectionIndex !== this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n else {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 0;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n if (this.isSameStyle(paragraph, false)) {\n return 0;\n }\n else {\n return HelperMethods.convertPointToPixel(beforeSpacing);\n }\n };\n Layout.prototype.getAfterSpacing = function (paragraph) {\n var afterSpacing = paragraph.paragraphFormat.afterSpacing;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing && paragraph.paragraphFormat.spaceAfterAuto) {\n if (isNullOrUndefined(paragraph.nextWidget) && paragraph.isInsideTable) {\n afterSpacing = 0;\n }\n else {\n afterSpacing = 14;\n }\n }\n if (this.isSameStyle(paragraph, true)) {\n return 0;\n }\n else {\n return afterSpacing;\n }\n };\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight, alterLineSpacing) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.lineSpacing);\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n if (alterLineSpacing) {\n lineSpacing = lineSpacing - 1;\n }\n lineSpacing = lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n if (index == 0) {\n index = text.indexOf('-', startIndex) + 1;\n }\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, currentRow, moveFromNext) {\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n // if (!isNullOrUndefined(this.footNote) && this.footNote.length !== 0 && this.footNote[0].page.index !== this.footNote[0].footNoteReference.line.paragraph.bodyWidget.page.index) {\n // this.isTableFootNote = false;\n // this.moveFootNotesToPage(this.footNote, this.footNote[0].page.bodyWidgets[0], this.footNote[0].page.bodyWidgets[0].nextRenderedWidget);\n // this.footNote = undefined;\n // }\n };\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n if (cell.columnIndex === 0 && cell.ownerRow.rowFormat.hasValue('leftMargin')) {\n left = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.leftMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n }\n if (cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 &&\n cell.ownerRow.rowFormat.hasValue('rightMargin')) {\n right = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.rightMargin);\n }\n else {\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n var autofit = cell.ownerTable.tableFormat.allowAutoFit;\n var cellWidth = cell.cellFormat.cellWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent' && cell.cellFormat.preferredWidth !== 0 && cellWidth <= 0) {\n var width = HelperMethods.convertPointToPixel(cell.ownerTable.getTableClientWidth(cell.ownerTable.getContainerWidth()));\n cellWidth = cell.ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, width, cell);\n }\n // if (cellWidth > cell.cellFormat.preferredWidth && cell.cellFormat.preferredWidth !== 0 && cell.cellFormat.preferredWidthType !== 'Percent' && cell.ownerTable.tableFormat.preferredWidthType !== 'Percent' && isNullOrUndefined(cell.ownerTable.positioning) && (!cell.ownerTable.isContainInsideTable) && (!(cell.ownerTable.containerWidget instanceof TableCellWidget))) {\n // cellWidth = cell.cellFormat.preferredWidth;\n // }\n cell.width = HelperMethods.convertPointToPixel(cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n var leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n var rightBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellRightBorder(cell).getLineWidth());\n // update the margins values respect to layouting of borders.\n // for normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n var linestyle = false;\n cell.leftBorderWidth = !cell.ownerTable.isBidiTable ? leftBorderWidth : rightBorderWidth;\n var isLeftStyleNone = (cell.cellFormat.borders.left.lineStyle === 'None');\n var isRightStyleNone = (cell.cellFormat.borders.right.lineStyle === 'None');\n cell.x += (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n cell.width -= (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n var lastCell = !cell.ownerTable.isBidiTable ? cell.cellIndex === cell.ownerRow.childWidgets.length - 1\n : cell.cellIndex === 0;\n if (cellspace > 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 ||\n (cell.columnIndex === cell.containerWidget.childWidgets.length - 1 && cell.cellFormat.columnSpan > 1)) {\n cell.rightBorderWidth = !cell.ownerTable.isBidiTable ? rightBorderWidth : leftBorderWidth;\n if (!cell.ownerTable.tableFormat.allowAutoFit) {\n cell.width -= cell.rightBorderWidth;\n }\n if (!this.isInsertTable()) {\n linestyle = this.checkPreviousMargins(cell.ownerTable);\n }\n }\n //Add the border widths to respective margin side.\n //cell.margin.left += (isLeftStyleNone) ? 0 : (cell.leftBorderWidth);\n cell.margin.right += (isRightStyleNone && !linestyle) ? 0 : (cell.rightBorderWidth);\n //cell.ownerWidget = owner;\n if (cell.width < cell.sizeInfo.minimumWidth / 2 && this.documentHelper.owner.editor.tableResize.checkCellMinWidth) {\n cell.width = cell.sizeInfo.minimumWidth / 2;\n }\n return cell;\n };\n Layout.prototype.checkPreviousMargins = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (cell.cellFormat.borders.right.lineStyle !== 'None') {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, endRowWidget, isInitialLayout) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n var footnoteWidgets = [];\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget &&\n row.previousRenderedWidget.ownerTable.equals(row.ownerTable)) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n }\n if (!isNullOrUndefined(row)) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n for (var k = 0; k < row.childWidgets[j].childWidgets.length; k++) {\n var footnoteCollection = this.getFootNoteWidgetsOf(row.childWidgets[j].childWidgets[k]);\n for (var l = 0; l < footnoteCollection.length; l++) {\n footnoteWidgets.splice(footnoteWidgets.length, 0, footnoteCollection[l]);\n }\n }\n }\n }\n row.containerWidget = tableWidget;\n if (!isNullOrUndefined(footnoteWidgets) && footnoteWidgets.length !== 0 && row.bodyWidget.previousRenderedWidget !== undefined) {\n var footnoteNoteHeight = 0;\n if (isNullOrUndefined(row.bodyWidget.page.footnoteWidget)) {\n this.addEmptyFootNoteToBody(row.bodyWidget);\n }\n if (row.bodyWidget.page.footnoteWidget) {\n for (var l = 0; l < footnoteWidgets.length; l++) {\n row.bodyWidget.page.footnoteWidget.bodyWidgets.push(footnoteWidgets[l]);\n for (var j = 0; j < footnoteWidgets[l].childWidgets.length; j++) {\n footnoteNoteHeight += footnoteWidgets[l].childWidgets[j].height;\n }\n }\n this.layoutfootNote(row.bodyWidget.page.footnoteWidget);\n this.footnoteHeight -= footnoteNoteHeight;\n }\n //this.moveFootNotesToPage(footnoteWidgets, (row.bodyWidget.previousRenderedWidget as BodyWidget), row.bodyWidget);\n }\n tableWidget.height = tableWidget.height + row.height;\n if (this.viewer instanceof PageLayoutViewer) {\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget, isInitialLayout);\n viewer.cutFromTop(row.y + row.height);\n };\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if ((row.rowFormat.heightType !== 'Exactly' || (row.rowFormat.heightType === 'Exactly' && row.rowFormat.height > mergedCellHeight)) && row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row, cellWidget) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget, isLastRow) {\n if (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget);\n if (this.documentHelper.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n if (isLastRow) {\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n if (cell.rowIndex !== splittedWidget.index) {\n splittedWidget.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n this.isRelayoutneed = false;\n var issplit = false;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n tableRowWidget.height -= splittedCell.height;\n if (i === 0 || tableRowWidget.height < cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n // splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n else {\n if (tableRowWidget.rowFormat.heightType === 'Exactly' || (tableRowWidget.rowFormat.heightType === 'AtLeast' &&\n splittedWidget.height < tableRowWidget.rowFormat.height)) {\n //Sets the height for row widget if height type is exact or at least.\n splittedWidget.height = tableRowWidget.rowFormat.height;\n }\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n this.isRelayoutneed = true;\n var count = i;\n while (count > 0 && !issplit) {\n var cellWidget_1 = tableRowWidget.childWidgets[count - 1];\n splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget_1);\n splittedWidget.childWidgets.splice(0, 0, splittedCell);\n splittedCell.containerWidget = splittedWidget;\n count--;\n }\n issplit = true;\n }\n }\n return splittedWidget;\n };\n Layout.prototype.getfootNoteHeight = function (line) {\n var height = 0;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FootnoteElementBox) {\n var foot = line.children[i].bodyWidget;\n for (var j = 0; j < foot.childWidgets.length; j++) {\n height += foot.childWidgets[j].height;\n }\n }\n }\n if (line.paragraph.bodyWidget.page.footnoteWidget) {\n height += line.paragraph.bodyWidget.page.footnoteWidget.height;\n }\n return height;\n };\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row) {\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var headerRow = undefined;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n var isInitialLayout = row.ownerTable.isInsideTable;\n var isLastRow = false;\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (this.isRowSpanEnd(row, viewer) && row.rowFormat.heightType === 'Exactly' && this.documentHelper.splittedCellWidgets.length === 1) {\n this.documentHelper.splittedCellWidgets = [];\n }\n if (row.ownerTable.isInsideTable || (this.documentHelper.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing + this.footnoteHeight <= viewer.clientArea.bottom)) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.index - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, undefined, isInitialLayout);\n if (this.documentHelper.splittedCellWidgets.length > 0 && isNullOrUndefined(rowWidgets[rowWidgets.length - 1].nextRow)) {\n count--;\n isLastRow = true;\n }\n isInitialLayout = false;\n }\n else {\n isInitialLayout = false;\n //Split widget for next page\n if (this.documentHelper.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height + this.footnoteHeight <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (rowHeight + tableRowWidget.y + (this.isInitialLoad ? this.footnoteHeight : 0) > viewer.clientArea.bottom) {\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && (isAllowBreakAcrossPages || row.indexInOwner === 0)) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n }\n }\n // if (heightType === 'AtLeast' && row.ownerTable.spannedRowCollection.keys.length > 0) {\n // splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // }\n // if (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientActiveArea.height && isAllowBreakAcrossPages && tableRowWidget.ownerTable.tableHolder.columns.length > this.getTotalColumnSpan(tableRowWidget)) {\n // tableRowWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // splittedWidget = tableRowWidget;\n // }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n if (viewer instanceof PageLayoutViewer) {\n pages = this.documentHelper.pages;\n }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n }\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)))) {\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n else {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n if (isNullOrUndefined(splittedWidget)) {\n isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight);\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n count--;\n continue;\n }\n }\n }\n }\n else if (isLastRow && !isAllowBreakAcrossPages) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget) && !this.documentHelper.owner.editor.isTableInsert && !(splittedWidget.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, tableRowWidget.nextRow);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var prevBodyWidget = undefined;\n if (tableWidgets.length > 1) {\n //Get Previous Splitted Widget container\n prevBodyWidget = tableWidgets[tableWidgets.length - 2].containerWidget;\n }\n else {\n var previousBlock = row.ownerTable.previousRenderedWidget;\n prevBodyWidget = previousBlock.containerWidget;\n }\n var pageIndex = 0;\n if (!isNullOrUndefined(prevBodyWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(prevBodyWidget.page);\n }\n var rowToMove = row;\n var keepNext = false;\n var index = row.ownerTable.containerWidget.index;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n var removeTable = true;\n //Move Next RowWidge to next page\n if (moveRowToNextTable && rowWidgets.length === 1) {\n var prev = this.alignBlockElement(row);\n if (!isNullOrUndefined(prev.node)) {\n var previousRow = prev.node;\n if (previousRow instanceof TableRowWidget\n && previousRow.indexInOwner === 0) {\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n tableWidget.height = 0;\n }\n }\n else if (prev.node instanceof ParagraphWidget) {\n var previousWidget = this.splitParagraph(prev.node, parseInt(prev.position.index, 10));\n block = previousWidget;\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n }\n removeTable = false;\n }\n if (previousRow instanceof TableRowWidget) {\n rowToMove = previousRow;\n if (!rowToMove.ownerTable.equals(row.ownerTable)) {\n removeTable = false;\n }\n }\n keepNext = true;\n }\n }\n bodyWidget = this.moveBlocksToNextPage(block instanceof ParagraphWidget ? block.previousWidget : block, false);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable && removeTable) {\n if (rowToMove.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n if (removeTable) {\n if (bodyWidget.childWidgets.indexOf(curretTable) !== -1) {\n bodyWidget.childWidgets.splice(bodyWidget.childWidgets.indexOf(curretTable), 1);\n }\n bodyWidget.childWidgets.unshift(curretTable);\n this.shiftFloatingItemsFromTable(curretTable, bodyWidget);\n }\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && rowToMove.index > 0 || rowWidgets.length > 1) {\n var currentRow = !moveRowToNextTable ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n if (keepNext) {\n currentRow = rowToMove;\n }\n this.moveNextWidgetsToTable(tableWidgets, currentRow, !moveRowToNextTable);\n rowToMove = row;\n }\n if (keepNext) {\n this.updateClientPositionForBlock(removeTable ? curretTable : block, row);\n }\n moveRowToNextTable = false;\n if (rowToMove.ownerTable.header && tableRowWidget.height < viewer.clientArea.bottom && !keepNext) {\n if (viewer instanceof PageLayoutViewer) {\n viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + rowToMove.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + rowToMove.ownerTable.headerHeight - cellspace, splittedWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget);\n }\n if (removeTable && this.shiftedFloatingItemsFromTable.length > 0) {\n for (var i = 0; i < this.shiftedFloatingItemsFromTable.length; i++) {\n var floatingItem = this.shiftedFloatingItemsFromTable[i];\n var position = this.getFloatingItemPoints(floatingItem);\n floatingItem.y = position.y;\n floatingItem.x = position.x;\n if (floatingItem instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatingItem.y, floatingItem);\n }\n }\n this.shiftedFloatingItemsFromTable = [];\n }\n }\n isLastRow = false;\n }\n if (isHeader) {\n if (row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n headerRow = this.getHeader(row.ownerTable);\n if (!isNullOrUndefined(headerRow) && row.index === headerRow.index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = this.documentHelper.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + row_1.height;\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n Layout.prototype.updateWidgetToRow = function (cell) {\n //const viewer: LayoutViewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n // let cellLeft: number = rowWidget.x;\n // if (rowWidget.childWidgets.length > 0) {\n // const lastWidget: TableCellWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1] as TableCellWidget;\n // cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n // }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = void 0;\n if (rowWidget.rowFormat.heightType === 'Exactly') {\n cellHeight = cell.height + cell.margin.bottom;\n }\n else {\n cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n }\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget, isInitialLayout) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (!isInitialLayout && (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) && (rowCollection.length === 1\n || rowCollection.length >= 1 && rowWidget === rowCollection[rowCollection.length - 1])) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n /* eslint-disable-next-line max-len */\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n if (spanEndRowWidget.rowFormat.heightType !== 'Exactly' || (spanEndRowWidget.rowFormat.heightType === 'Exactly' && spanEndRowWidget.rowFormat.height > cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y)) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n }\n else {\n cellWidget.height = (spanEndRowWidget.y - cellWidget.y) + spanEndRowWidget.height;\n }\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page.\n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n /* eslint-disable-next-line max-len */\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, cellWidget.ownerTable.isInsideTable);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n /* eslint-disable-next-line max-len */\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n this.documentHelper.splittedCellWidgets.push(splittedCell);\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n if (!isNullOrUndefined(rowWidget)) {\n var left = rowWidget.x;\n var tableWidth = 0;\n var cellIndex = 0;\n tableWidth = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableHolder.tableWidth);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n if (i === cellIndex) {\n break;\n }\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n cellIndex++;\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets.\n /* eslint-disable-next-line max-len */\n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && this.documentHelper.splittedCellWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.splittedCellWidgets.length; j++) {\n var widget = this.documentHelper.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (this.documentHelper.splittedCellWidgets.length > 0) {\n this.documentHelper.splittedCellWidgets = [];\n }\n }\n };\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n if (splittedCell.height > rowWidget.height) {\n rowWidget.height = splittedCell.height;\n }\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n this.documentHelper.splittedCellWidgets.splice(i, 1);\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n var previousRow;\n for (var j = tableCollection.length - 1; j >= 0; j--) {\n var table = tableCollection[j];\n for (var z = table.childWidgets.length - 1; z >= 0; z--) {\n var row = table.childWidgets[z];\n if (row.index === previousRowIndex) {\n previousRow = row;\n break;\n }\n }\n }\n if (previousRow) {\n tableWidget = previousRow.ownerTable;\n previousRowIndex = previousRow.indexInOwner;\n }\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1) {\n //if (!isNullOrUndefined(currentRow.childWidgets[index])) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n //if (emptyCellWidget.x < (currentRow.childWidgets[index] as TableCellWidget).x) {\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n this.updateChildLocationForRow(currentRow.y, currentRow);\n return;\n //}\n //}\n }\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget) {\n var splittedWidget = undefined;\n if (cellWidget.y + cellWidget.height > bottom - (this.isInitialLoad ? this.footnoteHeight : 0) - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget);\n if (!isNullOrUndefined(splittedPara)) {\n if (i === 0 && splittedPara === paragraphWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n /* eslint-disable-next-line max-len */\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget);\n if (isNullOrUndefined(splittedTable) &&\n !(tableWidget.childWidgets[0].rowFormat.allowBreakAcrossPages)) {\n splittedTable = tableWidget;\n }\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget && this.isRelayoutneed) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'LowLetter';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'UpRoman';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = cell.leftBorderWidth;\n cellWidget.rightBorderWidth = cell.rightBorderWidth;\n return cellWidget;\n };\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n newTable.headerHeight = table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.isGridUpdated = table.isGridUpdated;\n newTable.wrapTextAround = table.wrapTextAround;\n newTable.positioning = table.positioning;\n newTable.isContainInsideTable = table.isContainInsideTable;\n newTable.isBidiTable = table.isBidiTable;\n return newTable;\n };\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n var moveEntireBlock = false;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n if (bottom < lineBottom + (this.isInitialLoad ? this.getfootNoteHeight(lineWidget) : 0) + lineWidget.height) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && (paragraphWidget.index !== 0 ||\n (paragraphWidget.index === 0 && !isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.previousWidget)))) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n else if (paragraphWidget.paragraphFormat.widowControl) {\n if (i === 1) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n }\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget && !moveEntireBlock) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n lineBottom += lineWidget.height;\n }\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area.\n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n /* eslint-disable-next-line max-len */\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget) : rowWidget;\n }\n else {\n if ((isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)\n && this.isFirstLineFitForRow(bottom, rowWidget))\n || (tableWidget.isInsideTable\n && !(tableWidget.containerWidget.containerWidget.rowFormat.allowBreakAcrossPages))) {\n splittedRow = this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget);\n }\n else if (!isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)) {\n splittedRow = rowWidget;\n }\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var lineHeight = lineWidget.height + this.getfootNoteHeight(lineWidget);\n if (paraWidget.paragraphFormat.keepLinesTogether) {\n lineHeight = paraWidget.height;\n }\n var cellwidget = lineWidget.paragraph.containerWidget;\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.documentHelper.isFirstLineFitInShiftWidgets) {\n /* eslint-disable-next-line max-len */\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n }\n else {\n // For nested tables,\n if (cellwidget.ownerTable.isInsideTable) {\n // Gets the container cell widgets, consider it as client area for the cell widget.\n var containerCellWidget = undefined;\n if (cellwidget.containerWidget instanceof TableRowWidget &&\n cellwidget.containerWidget.containerWidget instanceof TableWidget\n && cellwidget.containerWidget.containerWidget.containerWidget instanceof TableCellWidget) {\n containerCellWidget = cellwidget.containerWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(containerCellWidget) && cellwidget.containerWidget.y === containerCellWidget.y\n && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n /* eslint-disable-next-line max-len */\n }\n else if (cellwidget.containerWidget.y === this.viewer.clientArea.y && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n }\n return (paraWidget.y + lineHeight <= bottom);\n };\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n //rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget);\n top += rowWidget.height;\n }\n };\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n //cellWidget.x = cellWidget.x;\n cellWidget.index = cellWidget.cellIndex;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCellOrShape(cellWidget.y, cellWidget);\n }\n };\n Layout.prototype.updateChildLocationForCellOrShape = function (top, widget) {\n var container = widget;\n if (widget instanceof ShapeElementBox) {\n container = widget.textFrame;\n }\n for (var i = 0; i < container.childWidgets.length; i++) {\n var skipHeight = false;\n if (container.childWidgets[i] instanceof TableWidget && container.childWidgets[i].wrapTextAround\n && !isNullOrUndefined(container.childWidgets[i + 1]) && container.childWidgets[i + 1].y > container.childWidgets[i].y\n && container.childWidgets[i + 1].y < (container.childWidgets[i].y + container.childWidgets[i].height)) {\n skipHeight = true;\n }\n container.childWidgets[i].x = container.childWidgets[i].x;\n container.childWidgets[i].y = top;\n if (container.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, container.childWidgets[i]);\n }\n if (container.childWidgets[i] instanceof ParagraphWidget) {\n var para = container.childWidgets[i];\n for (var i_2 = 0; i_2 < para.childWidgets.length; i_2++) {\n var line = para.childWidgets[0];\n for (var k = 0; k < line.children.length; k++) {\n var element = line.children[k];\n if (element instanceof FootnoteElementBox) {\n if (!isNullOrUndefined(para.bodyWidget.page.footnoteWidget)) {\n break;\n }\n else {\n var prevWidget = para.bodyWidget.previousRenderedWidget;\n var prevBodyWidget = para.bodyWidget.previousRenderedWidget;\n var newBodyWidget = para.bodyWidget;\n var footWidgets = this.getFootNoteWidgetsOf(para);\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footWidgets, prevBodyWidget, newBodyWidget);\n this.layoutfootNote(para.bodyWidget.page.footnoteWidget);\n }\n }\n }\n }\n }\n if (!skipHeight) {\n top += container.childWidgets[i].height;\n }\n }\n };\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n var containerWidget = cellWidget.ownerTable.containerWidget;\n if (containerWidget instanceof BlockContainer || containerWidget instanceof TextFrame || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n para.y = location;\n this.updateShapeInsideCell(para, displacement);\n }\n else {\n this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n Layout.prototype.updateShapeInsideCell = function (paragraph, displacement) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var floatElement = paragraph.floatingElements[i];\n floatElement.y += displacement;\n if (floatElement instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatElement.y, floatElement);\n }\n }\n };\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget, true);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n Layout.prototype.getCellContentHeight = function (cellWidget, isDisplacement) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n var cellY = cellWidget.y;\n var withShapeContentHeight = 0;\n var withShapeBottom = 0;\n var considerShapeHeight = false;\n var considerAsTop = false;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n contentHeight += cellWidget.childWidgets[i].height;\n for (var k = 0; k < para.floatingElements.length; k++) {\n considerShapeHeight = true;\n var floatElement = para.floatingElements[k];\n if ((cellWidget.y + cellWidget.containerWidget.height) > (floatElement.y + floatElement.height)\n && (floatElement.y + floatElement.height) > withShapeBottom) {\n withShapeContentHeight = Math.abs(cellY - (floatElement.y + floatElement.height));\n withShapeBottom = floatElement.y + floatElement.height;\n considerAsTop = false;\n }\n else {\n considerAsTop = true;\n }\n }\n }\n else {\n if (this.considerPositionTableHeight(cellWidget, cellWidget.childWidgets[i])) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n }\n if ((cellY + contentHeight) > withShapeBottom) {\n considerShapeHeight = false;\n }\n return (isDisplacement && considerShapeHeight) ? withShapeContentHeight :\n (isDisplacement && considerAsTop ? cellWidget.ownerRow.height : contentHeight);\n };\n Layout.prototype.considerPositionTableHeight = function (cellWidget, nestedWrapTable) {\n if (nestedWrapTable.isLayouted && nestedWrapTable.wrapTextAround) {\n var wrapTableBottom = nestedWrapTable.y + nestedWrapTable.height;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if ((cellWidget.childWidgets[i].y + cellWidget.childWidgets[i].height) > wrapTableBottom) {\n return false;\n }\n }\n }\n return true;\n };\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer, isFootnoteReLayout) {\n var sectionIndex = blockAdv.bodyWidget.sectionIndex;\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.sectionIndex === sectionIndex) {\n if (!isNullOrUndefined(isFootnoteReLayout) && isFootnoteReLayout && !nextBlock.isLayouted && this.isInitialLoad) {\n break;\n }\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(this.documentHelper.blockToShift)) {\n this.documentHelper.blockToShift = block;\n }\n else if (nextWidget.bodyWidget) {\n var floatingElementLength = nextWidget.bodyWidget.floatingElements.length;\n if (floatingElementLength > 0) {\n this.documentHelper.blockToShift = block;\n }\n }\n break;\n }\n updateNextBlockList = true;\n if (viewer.owner.isShiftingEnabled && this.documentHelper.fieldStacks.length === 0) {\n this.documentHelper.blockToShift = block;\n break;\n }\n else if (isNullOrUndefined(this.viewer.owner.editorModule) || !this.viewer.owner.editorModule.isInsertingTOC) {\n block = block.combineWidget(this.viewer);\n //let paragraph: ParagraphWidget;\n if (currentWidget.containerWidget !== block.containerWidget) {\n if (!(currentWidget instanceof ParagraphWidget) ||\n (currentWidget instanceof ParagraphWidget) && !currentWidget.isEndsWithPageBreak) {\n /* eslint-disable-next-line max-len */\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n //paragraph = this.documentHelper.selection.getFirstParagraphInFirstCell(block as TableWidget);\n }\n else {\n //paragraph = block as ParagraphWidget;\n }\n //if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n // this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n //}\n viewer.updateClientAreaForBlock(block, true);\n if (this.viewer instanceof WebLayoutViewer || block.bodyWidget instanceof HeaderFooterWidget) {\n block.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || (this.documentHelper.blockToShift !== block)) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * Update the client area for the line widget.\n *\n * @param {LineWidget} startLineWidget LineWidget instance.\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (startLineWidget) {\n startLineWidget.marginTop = 0;\n //Clears the line widget starting from current line.\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer || widget.containerWidget instanceof TextFrame) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex, isBidi, isSkip) {\n this.isRelayout = true;\n if (paragraphWidget.containerWidget instanceof TextFrame\n && paragraphWidget.containerWidget.containerShape.textWrappingStyle === 'Inline') {\n lineIndex = paragraphWidget.containerWidget.containerShape.line.indexInOwner;\n paragraphWidget = paragraphWidget.containerWidget.containerShape.paragraph;\n }\n isBidi = isNullOrUndefined(isBidi) ? false : isBidi;\n this.isRelayout = true;\n if (this.documentHelper.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n this.isBidiReLayout = true;\n }\n else {\n if (this.isBidiReLayout) {\n this.isBidiReLayout = false;\n }\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.isBidiReLayout = true;\n this.reLayoutTable(paragraphWidget);\n /* eslint-disable-next-line max-len */\n if (this.isFootnoteContentChanged && (!isNullOrUndefined(paragraphWidget.bodyWidget)) && !isNullOrUndefined(paragraphWidget.bodyWidget.page.footnoteWidget)) {\n var foot = paragraphWidget.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n this.isBidiReLayout = false;\n }\n else {\n // this.isRelayout = true;\n this.reLayoutLine(paragraphWidget, lineIndex, isBidi, isSkip);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n };\n Layout.prototype.getParentRow = function (block) {\n var cell = block;\n while (cell.ownerTable !== null && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell.ownerRow;\n };\n Layout.prototype.reLayoutRow = function (block) {\n if (block instanceof ParagraphWidget) {\n block = block.associatedCell;\n }\n var currentRow = this.getParentRow(block).getSplitWidgets()[0];\n if (!isNullOrUndefined(currentRow) && !currentRow.ownerTable.tableFormat.allowAutoFit) {\n var currentTable = currentRow.ownerTable.getSplitWidgets()[0].combineWidget(this.viewer);\n var startRow = currentRow;\n while (this.isVerticalMergedCellContinue(startRow)) {\n var previousRow = startRow.previousWidget;\n if (isNullOrUndefined(previousRow)) {\n break;\n }\n startRow = previousRow;\n }\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(currentTable.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(currentTable), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n /* eslint-disable-next-line max-len */\n var area = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientArea = new Rect(area.x, area.y, area.width, area.height);\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_2 = this.documentHelper.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_2);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n this.viewer.cutFromTop(startRow.y);\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //Clear Hieght for all the content\n currentTable.height = 0;\n do {\n this.clearRowWidget(currentRow, true, true, true);\n this.layoutRow([currentTable], currentRow, true);\n if (startRow === currentRow) {\n break;\n }\n startRow = startRow.nextRow;\n } while (startRow && startRow !== currentRow);\n this.updateChildLocationForTable(currentTable.y, currentTable);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height);\n this.viewer.updateClientAreaForBlock(currentTable, true);\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n this.viewer.cutFromTop(currentTable.y);\n this.shiftTableWidget(currentTable, this.viewer, true);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n }\n else {\n this.currentCell = block;\n this.reLayoutTable(block);\n this.currentCell = undefined;\n }\n };\n Layout.prototype.reLayoutTable = function (block, isFootnoteReLayout) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n //Combine splitted table in to single table\n var currentTable = table.combineWidget(this.viewer);\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(table.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(table), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n //Clear Hieght for all the content\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_3 = this.documentHelper.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_3);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n var yPos = this.getYPosition(currentTable);\n this.viewer.cutFromTop(yPos);\n this.clearTableWidget(currentTable, true, true, true);\n this.isBidiReLayout = true;\n this.layoutBlock(currentTable, 0);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n this.layoutNextItemsBlock(currentTable, this.viewer, isFootnoteReLayout);\n };\n Layout.prototype.getYPosition = function (table) {\n if (table.wrapTextAround) {\n var prevWidget = table.previousWidget;\n while (prevWidget) {\n if (prevWidget instanceof ParagraphWidget) {\n return prevWidget.y + prevWidget.height;\n }\n else if (prevWidget instanceof TableWidget) {\n if (prevWidget.wrapTextAround) {\n prevWidget = prevWidget.previousWidget;\n }\n else {\n return prevWidget.y + prevWidget.height;\n }\n }\n }\n return this.viewer.clientActiveArea.y;\n }\n return table.y;\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight, clearGrid) {\n table.height = 0;\n if (clearGrid) {\n table.isGridUpdated = false;\n }\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight, clearGrid) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight, clearGrid) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n this.clearBlockWidget(cell.childWidgets, clearPosition, clearHeight, clearGrid);\n };\n /**\n * @private\n */\n Layout.prototype.clearBlockWidget = function (blocks, clearPosition, clearHeight, clearGrid) {\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n if (block instanceof ParagraphWidget) {\n if (clearPosition) {\n block.y = 0;\n block.x = 0;\n }\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight, clearGrid);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget, isSkipShifting) {\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer || bodyWidget instanceof TextFrame) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (this.viewer instanceof WebLayoutViewer) {\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.isRelayoutFootnote = true;\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //curretBlock.containerWidget.height -= curretBlock.height;\n this.viewer.clientActiveArea.y = curretBlock.containerWidget.containerWidget.y;\n }\n else {\n this.viewer.cutFromTop(bodyWidget.containerWidget.y);\n this.layoutfootNote(bodyWidget.containerWidget);\n return;\n }\n // curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n if (!isNullOrUndefined(bodyWidget.page.footnoteWidget)) {\n if (bodyWidget.page.footnoteWidget.footNoteType === 'Footnote') {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n // if (bodyWidget.page.footnoteWidget) {\n // this.viewer.clientActiveArea.height -= bodyWidget.page.footnoteWidget.height;\n // this.viewer.clientArea.height -= bodyWidget.page.footnoteWidget.height;\n // }\n }\n if (blockIndex > 0) {\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n if (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (isNullOrUndefined(isSkipShifting) && curretBlock.containerWidget !== prevWidget.containerWidget) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = curretBlock.containerWidget;\n var newBodyWidget = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(curretBlock);\n this.updateContainerWidget(curretBlock, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footWidgets, prevBodyWidget, newBodyWidget);\n }\n }\n else if (prevWidget instanceof ParagraphWidget && prevWidget.isEndsWithPageBreak &&\n prevWidget.containerWidget === curretBlock.containerWidget) {\n this.moveBlocksToNextPage(prevWidget, false);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.documentHelper.selection.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true);\n this.documentHelper.layout.layoutBlock(curretBlock, 0);\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.layoutfootNote(bodyWidget.containerWidget);\n }\n }\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n /* eslint-disable-next-line max-len */\n var table = this.documentHelper.layout.getParentTable(bodyWidget.ownerTable).getSplitWidgets()[0];\n this.reLayoutTable(bodyWidget.ownerTable);\n this.layoutNextItemsBlock(table, this.viewer);\n }\n }\n this.isRelayoutFootnote = false;\n };\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n if (containerWidget instanceof TextFrame) {\n return containerWidget.childWidgets[blockIndex];\n }\n else {\n var sectionIndex = containerWidget.index;\n while (containerWidget && containerWidget.index === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n Layout.prototype.layoutTable = function (table, startIndex) {\n table.isBidiTable = table.bidi;\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n var wrapDiff = 0;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tableView, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n else {\n this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (this.isWrapText) {\n wrapDiff = this.viewer.clientActiveArea.x - this.viewer.clientArea.x;\n this.isWrapText = false;\n table.x = this.viewer.clientActiveArea.x;\n }\n }\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n if (table.childWidgets.length > 0) {\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n var index = tableView.length;\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n if (index !== tableView.length && tableView.length > 1) {\n if (tableView[0] && !isNullOrUndefined(tableView[0].bodyWidget.page.footnoteWidget)) {\n var foot = this.getFootNoteWidgetsOf(tableView[0]);\n var Index = tableView[0].bodyWidget.page.footnoteWidget.bodyWidgets.indexOf(foot[0]);\n if (Index === -1) {\n var prevBodyWidget1 = tableView[0].bodyWidget;\n var newBodyWidget = tableView[1].bodyWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(foot, newBodyWidget, prevBodyWidget1);\n }\n }\n if (tableView[tableView.length - 1] !== tableView[tableView.length - 2]) {\n var footNoteWidgets = this.getFootNoteWidgetsOf(tableView[tableView.length - 1]);\n var prevBodyWidget1 = tableView[tableView.length - 1].bodyWidget;\n var newBodyWidget = tableView[tableView.length - 2].bodyWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footNoteWidgets, newBodyWidget, prevBodyWidget1);\n }\n }\n if (this.documentHelper.viewer instanceof PageLayoutViewer && table.wrapTextAround && (table.positioning.verticalAlignment === 'Bottom' || table.positioning.verticalAlignment === 'Center' || table.positioning.verticalAlignment === 'Outside')) {\n this.updateTableFloatPoints(table);\n this.updateChildLocationForTable(table.y, table);\n }\n this.updateWidgetsToPage(tableView, [], table);\n if (wrapDiff > 0) {\n this.viewer.clientArea.x = this.viewer.clientArea.x - wrapDiff;\n }\n if (table.wrapTextAround && table.bodyWidget) {\n this.updateClientAreaForWrapTable(tableView, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n tableView[tableView.length - 1].isLayouted = true;\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable && !table.wrapTextAround) {\n this.viewer.clientArea.x = this.viewer.clientArea.x + HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n return tableView[tableView.length - 1];\n };\n Layout.prototype.updateClientAreaForWrapTable = function (tables, table, beforeLayout, clientActiveAreaForTableWrap, clientAreaForTableWrap) {\n if (beforeLayout) {\n if (table.wrapTextAround) {\n this.updateTableFloatPoints(table);\n var clienactare = this.viewer.clientActiveArea.clone();\n var rect = this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (clienactare.x !== rect.x) {\n table.x = this.viewer.clientActiveArea.x;\n }\n }\n }\n else {\n if (table.wrapTextAround && table.bodyWidget) {\n if (tables.length == 1) {\n if (table.bodyWidget.floatingElements.indexOf(table) === -1) {\n table.bodyWidget.floatingElements.push(table);\n }\n if (!isNullOrUndefined(table.previousWidget) || table.isInHeaderFooter || table.isInsideTable) {\n this.viewer.clientActiveArea = clientActiveAreaForTableWrap.clone();\n this.viewer.clientArea = clientAreaForTableWrap.clone();\n }\n else {\n this.viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n }\n }\n else {\n this.documentHelper.tableLefts.pop();\n this.viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n for (var z = 0; z < tables.length; z++) {\n var bodyWidget = tables[z].bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.indexOf(tables[z]) === -1) {\n bodyWidget.floatingElements.push(tables[z]);\n }\n }\n }\n }\n }\n };\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined.\n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n if (!tableWidget.isBidiTable) {\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n else { // Right to left direction table.\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n /* eslint-disable-next-line max-len */\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n for (var i = 0; i < tables.length; i++) {\n this.updateHeightForTableWidget(tables, rows, tables[i], endRowWidget);\n }\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n // Shift the widgets for Right to left directed table.\n if (table.isBidiTable) {\n for (var i = 0; i < tables.length; i++) {\n var layoutedTable = tables[i];\n for (var j = 0; j < layoutedTable.childWidgets.length; j++) {\n var layoutedRow = layoutedTable.childWidgets[j];\n layoutedRow.shiftWidgetForRtlTable();\n }\n }\n }\n if (table.tableFormat.cellSpacing > 0) {\n /* eslint-disable-next-line max-len */\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof WebLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour.\n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (this.viewer instanceof WebLayoutViewer) {\n table.containerWidget.height += table.height;\n }\n if (table.bodyWidget instanceof HeaderFooterWidget) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, true, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n Layout.prototype.layoutRow = function (tableWidget, row, isRowLayout) {\n var viewer = this.viewer;\n var rowWidgets = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n var topMargin = this.getMaxTopCellMargin(row);\n var bottomMargin = this.getMaxBottomCellMargin(row);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.layoutCell(cell, topMargin + row.topBorderWidth, bottomMargin + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n if (!isRowLayout) {\n this.updateWidgetsToTable(tableWidget, rows, row);\n if (!row.ownerTable.isInsideTable) {\n this.footnoteHeight = 0;\n }\n }\n return rows[rows.length - 1];\n };\n Layout.prototype.getAdjacentRowCell = function (cell, cellStartPos, cellEndPos, rowIndex) {\n var adjCells = [];\n var adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n var previouRow = false;\n if (adjRow) {\n if (adjRow.childWidgets[0].x > cell.x && rowIndex !== 0) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex - 1];\n previouRow = true;\n }\n for (var i = 0; i < adjRow.childWidgets.length; i++) {\n var adjCell = adjRow.childWidgets[i];\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n /* eslint-disable-next-line max-len */\n if ((HelperMethods.round(adjCellEndPos, 2) > HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2))\n /* eslint-disable-next-line max-len */\n || (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellStartPos, 2) < HelperMethods.round(cellEndPos, 2))\n /* eslint-disable-next-line max-len */\n || (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2))) {\n //Skipped adding the Horizontal merge start cell multiple times.\n if (adjCells.indexOf(adjCell) === -1) {\n adjCells.push(adjCell);\n }\n }\n if (HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n if (previouRow) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n previouRow = false;\n }\n else {\n break;\n }\n }\n if (i === adjRow.childWidgets.length - 1 && previouRow) {\n adjRow = cell.ownerRow.ownerTable.childWidgets[rowIndex];\n previouRow = false;\n }\n }\n }\n return adjCells;\n };\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n if ((rowWidget.rowFormat.beforeWidth !== 0 || rowWidget.rowFormat.gridBeforeWidth !== 0) && ((this.documentHelper.alignTablesRowByRow) ? rowWidget.ownerTable.tableFormat.tableAlignment === 'Left' : true)) {\n rowWidget.x += (rowWidget.rowFormat.beforeWidth !== 0) ? rowWidget.rowFormat.beforeWidth : rowWidget.rowFormat.gridBeforeWidth;\n }\n else {\n rowWidget.x = area.x;\n }\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var topBorderWidth = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (topBorderWidth > borderWidth) {\n borderWidth = topBorderWidth;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var bottomBorderWidth = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (bottomBorderWidth > borderWidth) {\n borderWidth = bottomBorderWidth;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n Layout.prototype.getMaxTopCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var topMargin = 0;\n if (cell.cellFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(cell.cellFormat.topMargin);\n }\n else if (row.rowFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(row.rowFormat.topMargin);\n }\n else {\n topMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.topMargin);\n }\n if (topMargin > value) {\n value = topMargin;\n }\n }\n return value;\n };\n Layout.prototype.getMaxBottomCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var bottomMargin = 0;\n if (cell.cellFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(cell.cellFormat.bottomMargin);\n }\n else if (row.rowFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(row.rowFormat.bottomMargin);\n }\n else {\n bottomMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.bottomMargin);\n }\n if (bottomMargin > value) {\n value = bottomMargin;\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n this.updateTopBorders(cell);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(paragraphWidget);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n }\n var footnoteWidgets = [];\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n for (var k = 0; k < block.childWidgets.length; k++) {\n if (block.childWidgets[k] instanceof LineWidget) {\n // eslint-disable-next-line\n var line = block.childWidgets[k];\n for (var j = 0; j < line.children.length; j++) {\n var child = line.children[j];\n if (child instanceof FootnoteElementBox) {\n var foot = child.line.paragraph.bodyWidget.page.footnoteWidget;\n var body = child.line.paragraph.bodyWidget;\n var findIndex = -1;\n if (!isNullOrUndefined(foot)) {\n for (var i_3 = 0; i_3 < foot.bodyWidgets.length; i_3++) {\n if ((foot.bodyWidgets[i_3]).footNoteReference === child) {\n findIndex = i_3;\n }\n }\n }\n if (findIndex === -1) {\n if (!isNullOrUndefined(body.nextRenderedWidget)) {\n var footNoteWidgets = this.getFootNoteWidgetsOf(child.paragraph);\n // if (child.bodyWidget.page.index !== footNoteWidgets[0].page.index) {\n var prevBodyWidget1 = body;\n var newBodyWidget = body.nextRenderedWidget;\n // this.updateContainerWidget(curretBlock as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n this.moveFootNotesToPage(footNoteWidgets, newBodyWidget, prevBodyWidget1);\n this.layoutfootNote(body.page.footnoteWidget);\n this.viewer.updateClientArea(body.page.footnoteWidget.sectionFormat, body.page, true);\n // }\n }\n }\n }\n // if (child instanceof FootnoteElementBox && !isNullOrUndefined(cell.bodyWidget.page.footnoteWidget)) {\n // //this.footHeight = cell.bodyWidget.page.footnoteWidget.height;\n // // let footnoteCollection: BodyWidget[] = this.getFootNoteWidgetsOf(child.paragraph);\n // // for (var l = 0; l < footnoteCollection.length; l++) {\n // // footnoteWidgets.splice(footnoteWidgets.length, 0, footnoteCollection[l]);\n // // }\n // // this.footNote = footnoteWidgets;\n // break;\n // } else {\n // this.footHeight = 0;\n // }\n }\n }\n }\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n Layout.prototype.isInsertTable = function () {\n if (this.documentHelper.owner.editorHistory && this.documentHelper.owner.editorHistory.currentBaseHistoryInfo && this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.action === 'InsertTable')\n return true;\n else\n return false;\n };\n Layout.prototype.updateTopBorders = function (cell) {\n cell.updatedTopBorders = [];\n if (cell.ownerTable.tableFormat.cellSpacing === 0) {\n var cellTopBorder = cell.cellFormat.borders.top;\n if (!cellTopBorder.isBorderDefined || (cellTopBorder.isBorderDefined\n && cellTopBorder.lineStyle === 'None' && cellTopBorder.lineWidth === 0 &&\n cellTopBorder.hasValue('color'))) {\n cellTopBorder = cell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!cellTopBorder.isBorderDefined) {\n cellTopBorder = cell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var cellStartPos = cell.x - cell.margin.left;\n var cellEndPos = cell.x + cell.width + cell.margin.right;\n var adjCells = this.getAdjacentRowCell(cell, cellStartPos, cellEndPos, cell.ownerRow.indexInOwner - 1);\n for (var j = 0; j < adjCells.length; j++) {\n var adjCell = adjCells[j];\n var prevCellBottomBorder = adjCell.cellFormat.borders.bottom;\n if (!prevCellBottomBorder.isBorderDefined || (prevCellBottomBorder.isBorderDefined\n && prevCellBottomBorder.lineStyle === 'None' && prevCellBottomBorder.lineWidth === 0 &&\n prevCellBottomBorder.hasValue('color'))) {\n prevCellBottomBorder = adjCell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!prevCellBottomBorder.isBorderDefined) {\n prevCellBottomBorder = adjCell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var border = void 0;\n if (cellTopBorder.lineStyle === 'None' || cellTopBorder.lineStyle === 'Cleared') {\n border = prevCellBottomBorder;\n }\n else if (prevCellBottomBorder.lineStyle === 'Cleared' || prevCellBottomBorder.lineStyle === 'None') {\n border = cellTopBorder;\n }\n else {\n border = cell.getBorderBasedOnPriority(cellTopBorder, prevCellBottomBorder);\n }\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n if (j === 0 && cellStartPos < adjCellStartPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (adjCellStartPos - cellStartPos) });\n }\n if (border) {\n var width = 0;\n /* eslint-disable-next-line max-len */\n if (HelperMethods.round(adjCellEndPos, 2) === HelperMethods.round(cellEndPos, 2) && HelperMethods.round(adjCellStartPos, 2) === HelperMethods.round(cellStartPos, 2)) {\n width = cellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - cellStartPos;\n }\n else {\n width = cellEndPos - cellStartPos;\n }\n if (width < 0) {\n width = 0;\n }\n cell.updatedTopBorders.push({ border: border, width: width });\n }\n if (j === (adjCells.length - 1) && cellEndPos > adjCellEndPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (cellEndPos - adjCellEndPos) });\n }\n }\n }\n };\n //endregion cell\n //#region Shifting\n Layout.prototype.shiftLayoutedItems = function (reLayout) {\n if (isNullOrUndefined(this.documentHelper.blockToShift) || isNullOrUndefined(this.documentHelper.blockToShift.containerWidget)) {\n this.documentHelper.blockToShift = undefined;\n this.checkAndShiftEndnote();\n return;\n }\n var block = this.documentHelper.blockToShift;\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.index === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n if (!isNullOrUndefined(currentWidget.floatingElements)) {\n //this.shiftLayoutFloatingItems(currentWidget as ParagraphWidget);\n }\n updateNextBlockList = true;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.documentHelper.blockToShift = undefined;\n var viewer = this.viewer;\n // if (viewer instanceof PageLayoutViewer) {\n this.documentHelper.removeEmptyPages();\n this.updateFieldElements();\n if (!this.documentHelper.owner.enableLockAndEdit || !reLayout) {\n viewer.updateScrollBars();\n }\n // }\n };\n Layout.prototype.checkAndShiftEndnote = function () {\n if (this.documentHelper.owner.selection) {\n var endBlock = this.documentHelper.owner.selection.end.paragraph;\n if (endBlock.isInsideTable) {\n endBlock = this.getParentTable(endBlock);\n }\n if (!endBlock.isInHeaderFooter && !(endBlock.bodyWidget.containerWidget instanceof FootNoteWidget) && isNullOrUndefined(endBlock.nextRenderedWidget)) {\n if (!(endBlock.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote\n && endBlock.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(endBlock.bodyWidget.page.endnoteWidget);\n }\n }\n }\n };\n Layout.prototype.updateFieldElements = function () {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var fieldBegin = this.documentHelper.fields[i];\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n var fieldCode = this.documentHelper.selection.getFieldCode(fieldBegin);\n if (!isNullOrUndefined(fieldCode) && (fieldCode.toLowerCase().match('numpages') || fieldCode.toLowerCase().match('sectionpages')) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n var prevPageNum = textElement.text;\n textElement.text = this.documentHelper.pages.length.toString();\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page)\n && prevPageNum !== textElement.text) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var block = blockAdv;\n var isRealyoutList = false;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n if (this.isNeedToRelayout(blockAdv.bodyWidget)) {\n this.updateContainerForTable(block, viewer);\n //Handle layouting the block.\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n this.clearTableWidget(block, true, true, true);\n }\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n isRealyoutList = true;\n }\n else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n }\n var index = this.documentHelper.pages.indexOf(block.bodyWidget.page);\n if (index > 0 && block === block.bodyWidget.childWidgets[0] && block instanceof ParagraphWidget) {\n var val = block.bodyWidget.childWidgets[0].childWidgets[0].children;\n for (var i = 0; i < val.length; i++) {\n var element = val[i];\n if (element.margin.top > 0 && element.margin.top === this.getBeforeSpacing(element.paragraph)) {\n element.margin.top -= this.getBeforeSpacing(element.paragraph);\n }\n }\n }\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule && !isRealyoutList) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n if (!this.isRelayoutFootnote && block.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.footnoteWidget);\n }\n if (!(block.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote\n && block.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.endnoteWidget);\n }\n // }\n };\n Layout.prototype.isNeedToRelayout = function (bodyWidget) {\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatElement = bodyWidget.floatingElements[i];\n if (floatElement instanceof TableWidget || (floatElement instanceof ShapeBase &&\n (floatElement.textWrappingStyle === 'Square' || floatElement.textWrappingStyle === 'TopAndBottom'))) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n if (paragraph.height > (viewer.clientArea.height + viewer.clientArea.y)) {\n return;\n }\n var bodywid = paragraph.bodyWidget;\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n var skipFootNoteHeight = false;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n if (!isNullOrUndefined(prevWidget)) {\n var isPageBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithPageBreak : false;\n this.shiftToPreviousWidget(widget, viewer, prevWidget, isPageBreak);\n if ((isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) && !isPageBreak) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n if (isPageBreak) {\n viewer.updateClientAreaByWidget(widget);\n }\n }\n }\n var footWidget = [];\n if (!skipFootNoteHeight) {\n footWidget = this.getFootNoteWidgetsOf(widget);\n }\n skipFootNoteHeight = false;\n //let isContainsFootnote: boolean = false;\n if (this.isFitInClientArea(widget, viewer, footWidget)) {\n if (this.keepWithNext) {\n this.updateClientPositionForBlock(widget.containerWidget.firstChild, widget);\n this.keepWithNext = false;\n }\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n widget.y = viewer.clientActiveArea.y;\n if (widget.floatingElements.length > 0) {\n for (var k = 0; k < widget.floatingElements.length; k++) {\n var shape = widget.floatingElements[k];\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n if (shape instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(shape.y, shape);\n }\n }\n }\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget) {\n index++;\n if (!prevBodyWidget.lastChild.isEndsWithPageBreak) {\n this.updateContainerWidget(widget, prevBodyWidget, index, true, footWidget);\n }\n if (footWidget.length > 0) {\n if (prevBodyWidget.page.footnoteWidget) {\n for (var k = 0; k < footWidget.length; k++) {\n if (prevBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footWidget[k]) === -1 && widget.bodyWidget.page.index != footWidget[k].page.index) {\n prevBodyWidget.page.footnoteWidget.bodyWidgets.push(footWidget[k]);\n prevBodyWidget.page.footnoteWidget.height += footWidget[k].height;\n }\n }\n }\n }\n }\n if (widget.isEndsWithPageBreak && this.viewer instanceof PageLayoutViewer) {\n var nextBodyWidget = this.createOrGetNextBodyWidget(prevBodyWidget, this.viewer);\n nextBodyWidget = this.moveBlocksToNextPage(widget, true);\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n }\n else {\n var previousBlock = widget.previousRenderedWidget;\n var isPageBreak = false;\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithPageBreak &&\n this.viewer instanceof PageLayoutViewer) {\n isPageBreak = true;\n }\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1, isPageBreak, footWidget);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n //Paragraph moved to next page and client area get updated with footnote widget height.\n //So, skip considering footnote height.\n if (footWidget.length > 0) {\n skipFootNoteHeight = true;\n }\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n };\n /**\n * @private\n * Get the footnote of the block widget.\n *\n * @param {BlockWidget} widget BlockWidget instance.\n * @returns\n */\n Layout.prototype.getFootNotesOfBlock = function (widget, footnoteElements) {\n if (isNullOrUndefined(footnoteElements)) {\n footnoteElements = [];\n }\n if (widget.childWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.footnoteCollection.length; j++) {\n if (this.documentHelper.footnoteCollection[j].line.paragraph === widget) {\n //isContainsFootnote = true;\n footnoteElements.push(this.documentHelper.footnoteCollection[j]);\n }\n }\n }\n return footnoteElements;\n };\n Layout.prototype.getFootNotesWidgetsInLine = function (line) {\n var footnoteElements = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FootnoteElementBox) {\n footnoteElements.push(element);\n }\n }\n return this.getFootNoteWidgetsBy(line.paragraph, footnoteElements);\n };\n Layout.prototype.getFootNoteWidgetsBy = function (widget, footnoteElements) {\n var footWidgets = [];\n if (widget.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n if (footWidgets.length === 0 && (!isNullOrUndefined(widget.previousRenderedWidget) && widget.previousRenderedWidget.bodyWidget.page.footnoteWidget)) {\n for (var i = 0; i < widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.previousRenderedWidget) && widget.bodyWidget.previousRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.nextRenderedWidget) && widget.bodyWidget.nextRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n return footWidgets;\n };\n /**\n * @param widget\n * @private\n */\n Layout.prototype.getFootNoteWidgetsOf = function (widget, isShifting) {\n var footnoteWidgets = [];\n var footnoteElements = [];\n if (widget instanceof TableWidget) {\n for (var k_1 = 0; k_1 < widget.childWidgets.length; k_1++) {\n var row = widget.childWidgets[k_1];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n for (var x = 0; x < cell.childWidgets.length; x++) {\n var block = cell.childWidgets[x];\n footnoteElements = this.getFootNotesOfBlock(block, footnoteElements);\n var blockfootnoteWidgets = this.getFootNoteWidgetsBy(block, footnoteElements);\n for (var f = 0; f < blockfootnoteWidgets.length; f++) {\n if (footnoteWidgets.indexOf(blockfootnoteWidgets[f]) === -1) {\n footnoteWidgets.push(blockfootnoteWidgets[f]);\n }\n }\n }\n }\n }\n }\n else {\n footnoteElements = this.getFootNotesOfBlock(widget);\n if (footnoteElements.length > 0) {\n footnoteWidgets = this.getFootNoteWidgetsBy(widget, footnoteElements);\n }\n if (isShifting && footnoteWidgets.length === 0) {\n for (var k = 0; k < footnoteElements.length; k++) {\n footnoteWidgets.push(footnoteElements[k].bodyWidget);\n }\n }\n }\n return footnoteWidgets;\n };\n Layout.prototype.getFootNodeWidgetsToShiftToPage = function (paragraph) {\n var splittedWidgets = paragraph.getSplitWidgets();\n var footNoteWidgets = [];\n var toBodyWidget = paragraph.containerWidget;\n var fromBodyWidget;\n for (var i = 0; i < splittedWidgets.length; i++) {\n var footWidgets = this.getFootNoteWidgetsOf(splittedWidgets[i]);\n for (var j = 0; j < footWidgets.length; j++) {\n fromBodyWidget = footWidgets[j].containerWidget;\n if (toBodyWidget !== fromBodyWidget) {\n footNoteWidgets.push(footWidgets[j]);\n }\n }\n }\n return { 'footNoteWidgets': footNoteWidgets, 'fromBodyWidget': fromBodyWidget, 'toBodyWidget': toBodyWidget };\n };\n Layout.prototype.shiftTableWidget = function (table, viewer, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tables, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row, isClearHeight);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table);\n if (table.wrapTextAround && table.bodyWidget) {\n this.updateClientAreaForWrapTable(tables, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n return tables[tables.length - 1];\n };\n Layout.prototype.shiftRowWidget = function (tables, row, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var viewer = this.viewer;\n if (isClearHeight) {\n row.height = 0;\n }\n var rows = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isClearHeight) {\n cell.height = 0;\n }\n /* eslint-disable-next-line max-len */\n this.shiftCellWidget(cell, this.getMaxTopCellMargin(row) + row.topBorderWidth, this.getMaxBottomCellMargin(row) + row.bottomBorderWidth, isClearHeight);\n }\n viewer.updateClientAreaForRow(row, false);\n this.updateWidgetsToTable(tables, rows, row);\n return rows[rows.length - 1];\n };\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom, isClearHeight) {\n if (isNullOrUndefined(isClearHeight)) {\n isClearHeight = false;\n }\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer, isClearHeight);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n if (!isNullOrUndefined(paragraph.floatingElements)) {\n //this.shiftLayoutFloatingItems(paragraph as ParagraphWidget);\n // for (let i: number = 0; i < paragraph.floatingElements.length; i++) {\n // let shape: ShapeElementBox = paragraph.floatingElements[i];\n // this.layoutElement(shape, paragraph);\n // }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.updateContainerForTable = function (block, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(block, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n var isPageBreak = prevBodyWidget.lastChild.lastChild.isEndsWithPageBreak;\n if (prevBodyWidget !== block.containerWidget) {\n if (!isPageBreak) {\n this.updateContainerWidget(block, prevBodyWidget, index + 1, true);\n }\n else {\n viewer.updateClientArea(block.bodyWidget.sectionFormat, block.bodyWidget.page);\n }\n }\n if (block.isInHeaderFooter || this.viewer instanceof WebLayoutViewer) {\n block.containerWidget.height -= block.height;\n }\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n this.updateContainerForTable(table, viewer);\n this.viewer.updateClientAreaForBlock(table, true);\n var tempClientAreaX = this.viewer.clientArea.x;\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.updateVerticalPositionToTop(table, true);\n //const isPageLayout: boolean = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.documentHelper.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientArea.x = tempClientAreaX;\n }\n this.viewer.updateClientAreaForBlock(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.documentHelper.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index, isPageBreak, footWidget) {\n var firstLine = paragraphWidget.childWidgets[0];\n var keepLinesTogether = (paragraphWidget.paragraphFormat.keepLinesTogether && (this.viewer.clientActiveArea.y !== this.viewer.clientArea.y));\n var maxElementHeight = keepLinesTogether ? paragraphWidget.height : this.getMaxElementHeight(firstLine);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n // Get maximun height based on widow/orphan control.\n maxElementHeight = this.getMaximumLineHeightToSplit(paragraphWidget, maxElementHeight, viewer);\n // TODO: Footnote move on move entire paragraph.\n var footNoteInFirstLine = this.getFootNotesWidgetsInLine(firstLine);\n if (isNullOrUndefined(paragraphWidget.previousWidget) && footNoteInFirstLine.length > 0) {\n for (var i = 0; i < footNoteInFirstLine.length; i++) {\n for (var j = 0; j < footNoteInFirstLine[i].childWidgets.length; j++) {\n maxElementHeight += footNoteInFirstLine[i].childWidgets[j].height;\n }\n }\n //maxElementHeight += (paragraphWidget.bodyWidget.page.footnoteWidget.childWidgets[0] as ParagraphWidget).height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget) {\n var fromBodyWidget = paragraphWidget.containerWidget;\n if (paragraphWidget.childWidgets.indexOf(this.documentHelper.selection.start.currentWidget) !== -1 || paragraphWidget.childWidgets.indexOf(this.documentHelper.selection.end.currentWidget) !== -1) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n this.moveFootNotesToPage(footWidget, fromBodyWidget, previousBodyWidget);\n }\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n var line = paragraphWidget.childWidgets[i];\n if (this.isFitInClientArea(paragraphWidget, viewer, undefined)) {\n if (splittedWidget.childWidgets.length === 1) {\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n break;\n }\n else {\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n /* eslint-disable-next-line max-len */\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n /* eslint-disable-next-line max-len */\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, false);\n // nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, viewer);\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n nextBodyWidget.height += splittedWidget.height;\n splittedWidget.containerWidget = nextBodyWidget;\n if (nextBodyWidget != previousBodyWidget && previousBodyWidget.page.footnoteWidget) {\n footWidget = this.getFootNoteWidgetsOf(splittedWidget, true);\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n //paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n }\n else {\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n var startBlock = paragraphWidget;\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : this.splitParagraph(blockInfo.node, parseInt(blockInfo.position.index, 10));\n paragraphWidget = startBlock;\n this.keepWithNext = true;\n }\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n //footWidget = this.getFootNoteWidgetsOf(paragraphWidget);\n if (!isNullOrUndefined(previousBodyWidget.page.footnoteWidget)) {\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n }\n else if (!isNullOrUndefined(previousBodyWidget) && isNullOrUndefined(paragraphWidget.previousWidget)) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, previousBodyWidget.childWidgets.length, false);\n var startBlock = paragraphWidget;\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : this.splitParagraph(blockInfo.node, parseInt(blockInfo.position.index, 10));\n this.keepWithNext = true;\n nextBodyWidget = this.moveBlocksToNextPage(startBlock.previousWidget, true);\n this.updateClientPositionForBlock(paragraphWidget.previousWidget, paragraphWidget);\n // TODO: Handle moving footnote widget\n }\n else {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaximumLineHeightToSplit = function (paragraphWidget, maxElementHeight, viewer) {\n if (viewer.clientActiveArea.height >= maxElementHeight && !paragraphWidget.paragraphFormat.keepLinesTogether &&\n paragraphWidget.paragraphFormat.widowControl && !isNullOrUndefined(paragraphWidget.previousWidget) &&\n isNullOrUndefined(paragraphWidget.previousSplitWidget)) {\n var paragraphHeight = paragraphWidget.height;\n for (var m = paragraphWidget.childWidgets.length - 1; m >= 0; m--) {\n var lastLine = paragraphWidget.childWidgets[m];\n var lineHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > lineHeight) {\n paragraphHeight -= lastLine.height - lineHeight;\n }\n if (viewer.clientActiveArea.height >= paragraphHeight) {\n // Move entire paragraph to next page, If first line alone not fitted in the client area.\n if (m === 0) {\n maxElementHeight = paragraphWidget.height;\n }\n break;\n }\n paragraphHeight -= (lastLine).height;\n }\n }\n return maxElementHeight;\n };\n /**\n * @private\n * @param footnoteWidgets\n * @param fromBodyWidget\n * @param toBodyWidget\n */\n Layout.prototype.moveFootNotesToPage = function (footnoteWidgets, fromBodyWidget, toBodyWidget) {\n if (footnoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget) {\n var footNoteIndex = -1;\n var footNoteWidget = void 0;\n var insertIndex = 0;\n var check = false;\n for (var k = 0; k < footnoteWidgets.length; k++) {\n /* eslint-disable-next-line max-len */\n footNoteWidget = footnoteWidgets[k];\n footNoteIndex = fromBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget);\n if (footNoteIndex >= 0) {\n if (toBodyWidget.page.footnoteWidget === undefined) {\n this.addEmptyFootNoteToBody(toBodyWidget);\n }\n for (var i = 0; i < toBodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n var body = (toBodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference;\n if (body === (footNoteWidget).footNoteReference) {\n check = true;\n }\n }\n fromBodyWidget.page.footnoteWidget.bodyWidgets.splice(footNoteIndex, 1);\n if (toBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget) < 0 && !check) {\n var childLength = toBodyWidget.page.footnoteWidget.bodyWidgets.length;\n var fromPage = this.documentHelper.pages.indexOf(fromBodyWidget.page);\n var toPage = this.documentHelper.pages.indexOf(toBodyWidget.page);\n footNoteWidget.containerWidget = toBodyWidget.page.footnoteWidget;\n footNoteWidget.page = toBodyWidget.page;\n if (fromPage > toPage) {\n toBodyWidget.page.footnoteWidget.bodyWidgets.push(footNoteWidget);\n insertIndex++;\n }\n else {\n toBodyWidget.page.footnoteWidget.bodyWidgets.splice(insertIndex++, 0, footNoteWidget);\n }\n toBodyWidget.page.footnoteWidget.height += footNoteWidget.height;\n }\n fromBodyWidget.page.footnoteWidget.height -= footNoteWidget.height;\n }\n }\n if (fromBodyWidget.page.footnoteWidget && fromBodyWidget.page.footnoteWidget.bodyWidgets.length === 0) {\n fromBodyWidget.page.footnoteWidget = undefined;\n }\n if (fromBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(fromBodyWidget.page.footnoteWidget);\n }\n if (toBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(toBodyWidget.page.footnoteWidget);\n }\n }\n };\n Layout.prototype.addEmptyFootNoteToBody = function (bodyWidget) {\n var footnoteWidget = new FootNoteWidget();\n footnoteWidget.footNoteType = 'Footnote';\n footnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n // footnoteWidget.childWidgets.push(newParagraph);\n footnoteWidget.height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnoteWidget.margin = new Margin(0, footnoteWidget.height, 0, 0);\n bodyWidget.page.footnoteWidget = footnoteWidget;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget) {\n var height = 0;\n /* eslint-disable-next-line max-len */\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = this.documentHelper.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = this.documentHelper.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === this.documentHelper.pages.length - 1\n || this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n this.documentHelper.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = this.documentHelper.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer, blocks) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n var footHeight = 0;\n if (!isNullOrUndefined(blocks)) {\n if (blocks.length > 0) {\n if (blocks[0].containerWidget instanceof FootNoteWidget) {\n footHeight = blocks[0].containerWidget.margin.top;\n }\n for (var k = 0; k < blocks.length; k++) {\n for (var l = 0; l < blocks[k].childWidgets.length; l++) {\n footHeight += blocks[k].childWidgets[l].height;\n }\n }\n }\n }\n return viewer.clientActiveArea.height >= height + footHeight;\n };\n Layout.prototype.isLineInFootNote = function (line, footNotes) {\n for (var i = 0; i < footNotes.length; i++) {\n if (footNotes[i].line === line) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget, isPageBreak) {\n var fromBodyWidget = paragraphWidget.containerWidget;\n var toBodyWidget = previousWidget.containerWidget;\n var footNotes = [];\n var footNoteWidgets = [];\n if (toBodyWidget !== fromBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n }\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line);\n if (this.isLineInFootNote(line, footNotes)) {\n var footWidget = this.getFootNoteWidgetsBy(line.paragraph, footNotes);\n var height = 0;\n for (var m = 0; m < footWidget.length; m++) {\n var footContent = footWidget[m];\n for (var n = 0; n < footContent.childWidgets.length; n++) {\n height += footContent.childWidgets[n].height;\n }\n }\n if (footWidget.length > 0 && footWidget[0].containerWidget) {\n height += footWidget[0].containerWidget.margin.top;\n }\n maxElementHeight += height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n if (footNotes.length > 0 && this.isLineInFootNote(line, footNotes)) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(line.paragraph, footNotes));\n }\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n var newBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (paragraphWidget.containerWidget !== newBodyWidget) {\n newBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n }\n if (bodyWidget !== newBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n if (footNotes.length > 0) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(paragraphWidget, footNotes));\n toBodyWidget = newBodyWidget;\n }\n this.updateContainerWidget(paragraphWidget, newBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(fromBodyWidget.sectionFormat, fromBodyWidget.page);\n break;\n }\n }\n if (!isNullOrUndefined(footNoteWidgets) && footNoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget\n && fromBodyWidget != toBodyWidget) {\n this.moveFootNotesToPage(footNoteWidgets, fromBodyWidget, toBodyWidget);\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll, footWidget) {\n if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget) {\n return;\n }\n var previousWidget = widget.containerWidget;\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.documentHelper.pages[this.documentHelper.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.documentHelper.scrollToBottom();\n }\n if (isNullOrUndefined(page.nextPage) || page.nextPage.bodyWidgets[0].index !== widget.containerWidget.index) {\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(widget.floatingElements)) {\n for (var i = 0; i < widget.floatingElements.length; i++) {\n var shape = widget.floatingElements[i];\n if (shape.textWrappingStyle !== 'Inline') {\n bodyWidget.floatingElements.push(shape);\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(shape), 1);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n }\n }\n if (widget instanceof TableWidget && widget.wrapTextAround\n && widget.bodyWidget.floatingElements.indexOf(widget) !== -1) {\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(widget), 1);\n }\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n if (previousWidget && previousWidget.page && previousWidget.page.footnoteWidget && footWidget && footWidget.length > 0) {\n this.moveFootNotesToPage(footWidget, previousWidget, bodyWidget);\n }\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = (previousBlock && previousBlock.containerWidget.equals(block.containerWidget)) ?\n previousBlock.containerWidget : block.containerWidget;\n index = previousBlock && previousBlock.containerWidget.equals(block.containerWidget) ?\n prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n Layout.prototype.moveBlocksToNextPage = function (block, moveFootnoteFromLastBlock) {\n var body = block.bodyWidget;\n var page = body.page;\n var pageIndex = page.index + 1;\n var nextPage = undefined;\n var nextBody = undefined;\n var insertPage = false;\n if (this.documentHelper.pages.length > pageIndex) {\n nextPage = this.documentHelper.pages[pageIndex];\n if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0])) {\n nextPage = undefined;\n insertPage = true;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n }\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n if (insertPage) {\n this.documentHelper.insertPage(pageIndex, nextPage);\n }\n this.clearLineMeasures();\n }\n // eslint-disable no-constant-condition\n do {\n var lastBlock = void 0;\n if (body.lastChild instanceof FootNoteWidget) {\n lastBlock = body.lastChild.previousWidget;\n }\n else {\n lastBlock = body.lastChild;\n }\n if (moveFootnoteFromLastBlock) {\n var footWidget = this.getFootNoteWidgetsOf(lastBlock);\n this.moveFootNotesToPage(footWidget, body, nextBody);\n }\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.splice(body.childWidgets.indexOf(lastBlock), 1);\n nextBody.childWidgets.splice(0, 0, lastBlock);\n if (lastBlock instanceof TableWidget && (body.floatingElements.indexOf(lastBlock) !== -1)) {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock), 1);\n //nextBody.floatingElements.push(lastBlock);\n }\n if (lastBlock instanceof ParagraphWidget && lastBlock.floatingElements.length > 0) {\n for (var m = 0; m < lastBlock.floatingElements.length; m++) {\n if (body.floatingElements.indexOf(lastBlock.floatingElements[m]) !== -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock.floatingElements[m]), 1);\n nextBody.floatingElements.push(lastBlock.floatingElements[m]);\n }\n }\n }\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n // eslint-disable-next-line no-constant-condition\n } while (true);\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n //endregion\n //#region Relayout Parargaph\n /* eslint-disable */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex, isBidi, isSkip) {\n if (!this.allowLayout) {\n return;\n }\n this.isFootnoteContentChanged = false;\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout = lineWidget.previousLine;\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n lineToLayout.paragraph.splitLtrAndRtlText(lineToLayout.indexInOwner);\n lineToLayout.paragraph.combineconsecutiveRTL(lineToLayout.indexInOwner);\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if ((this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n paragraph.bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n // } else if (bodyWidget instanceof FootNoteWidget) {\n // this.isRelayoutFootnote = true;\n // this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n // this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n // this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n // // curretBlock.containerWidget.height -= curretBlock.height;\n // this.viewer.clientActiveArea.y = paragraph.containerWidget.y;\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page, true);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (!isNullOrUndefined(paragraph.containerWidget) && !isNullOrUndefined(paragraph.containerWidget.containerWidget) && paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n var y = paragraph.bodyWidget.containerWidget.y;\n this.viewer.cutFromTop(y);\n this.documentHelper.owner.editor.isFootNoteInsert = true;\n this.layoutfootNote(paragraph.containerWidget.containerWidget);\n return;\n }\n else if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n this.layoutNextItemsBlock(paragraph, this.viewer);\n var prevWidget = paragraph.getSplitWidgets()[0].previousRenderedWidget;\n if (!isNullOrUndefined(prevWidget) && (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak)) {\n this.viewer.cutFromTop(paragraph.y + paragraph.height);\n if (paragraph.containerWidget !== prevWidget.containerWidget && !isNullOrUndefined(prevWidget.containerWidget)) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = paragraph.containerWidget;\n var newBodyWidget_1 = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(paragraph);\n //this.updateContainerWidget(paragraph as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n if (!isNullOrUndefined(newBodyWidget_1.page.footnoteWidget)) {\n this.moveFootNotesToPage(footWidgets, newBodyWidget_1, prevBodyWidget);\n }\n }\n }\n var page = this.documentHelper.pages.length;\n var foot;\n var newBodyWidget = this.documentHelper.pages[page - 1].bodyWidgets[0];\n if (this.isFootnoteContentChanged && !isNullOrUndefined(paragraph.bodyWidget.page.footnoteWidget)) {\n foot = paragraph.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n if (this.isEndnoteContentChanged && !isNullOrUndefined(newBodyWidget.page.endnoteWidget)) {\n foot = newBodyWidget.page.endnoteWidget;\n var clientArea = this.viewer.clientArea.clone();\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n this.viewer.cutFromTop(newBodyWidget.childWidgets[newBodyWidget.childWidgets.length - 1].y\n + newBodyWidget.childWidgets[newBodyWidget.childWidgets.length - 1].height);\n this.layoutfootNote(foot);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = clientActiveArea;\n //this.viewer.updateClientAreaForBlock(foot.block, false);\n }\n };\n //#endregion\n //RTL Feature layout start\n Layout.prototype.isContainsRtl = function (lineWidget) {\n if (this.viewer.documentHelper.isSelectionChangedOnMouseMoved && !this.isDocumentContainsRtl) {\n return false;\n }\n var isContainsRTL = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof TextElementBox) {\n isContainsRTL = lineWidget.children[i].characterFormat.bidi || lineWidget.children[i].characterFormat.bdo === 'RTL'\n || this.documentHelper.textHelper.isRTLText(lineWidget.children[i].text);\n if (isContainsRTL) {\n if (!this.isDocumentContainsRtl) {\n this.isDocumentContainsRtl = isContainsRTL;\n }\n break;\n }\n }\n }\n return isContainsRTL;\n };\n // Re arranges the elements for Right to left layotuing.\n /* eslint-disable */\n // public reArrangeElementsForRtl(line: LineWidget, isParaBidi: boolean): void {\n // if (line.children.length === 0) {\n // return;\n // }\n // let lastAddedElementIsRtl: boolean = false;\n // let lastAddedRtlElementIndex: number = -1;\n // let tempElements: ElementBox[] = [];\n // for (let i: number = 0; i < line.children.length; i++) {\n // let element: ElementBox = line.children[i];\n // let elementCharacterFormat: WCharacterFormat = undefined;\n // if (element.characterFormat) {\n // elementCharacterFormat = element.characterFormat;\n // }\n // let isRtl: boolean = false;\n // let text: string = '';\n // let containsSpecchrs: boolean = false;\n // if (element instanceof BookmarkElementBox) {\n // if (isParaBidi) {\n // if (lastAddedElementIsRtl || element.bookmarkType === 0 && element.nextElement\n // && element.nextElement.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.nextElement.text)\n // || element.bookmarkType === 1 && element.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.text)) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedElementIsRtl ? lastAddedRtlElementIndex : lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // } else {\n // tempElements.push(element);\n // }\n // continue;\n // }\n // if (element instanceof TextElementBox) {\n // text = (element as TextElementBox).text;\n // containsSpecchrs = this.documentHelper.textHelper.containsSpecialCharAlone(text.trim());\n // if (containsSpecchrs) {\n // if (elementCharacterFormat.bidi && isParaBidi) {\n // text = HelperMethods.reverseString(text);\n // for (let k: number = 0; k < text.length; k++) {\n // let ch: string = this.documentHelper.textHelper.inverseCharacter(text.charAt(k));\n // text = text.replace(text.charAt(k), ch);\n // }\n // element.text = text;\n // }\n // }\n // let textElement: ElementBox = element.nextElement;\n // if (element instanceof TextElementBox && this.documentHelper.textHelper.containsNumberAlone(element.text.trim())) {\n // while (textElement instanceof TextElementBox && textElement.text.trim() !== '' && (this.documentHelper.textHelper.containsNumberAlone(textElement.text.trim()) || this.documentHelper.textHelper.containsSpecialCharAlone(textElement.text.trim()))) {\n // element.text = element.text + textElement.text;\n // element.line.children.splice(element.line.children.indexOf(textElement), 1);\n // textElement = element.nextElement;\n // }\n // element.width = this.documentHelper.textHelper.getTextSize(element as TextElementBox, element.characterFormat);\n // }\n // }\n // let isRTLText: boolean = false;\n // // let isNumber: boolean = false;\n // // The list element box shold be added in the last position in line widget for the RTL paragraph \n // // and first in the line widget for LTR paragrph.\n // if (element instanceof ListTextElementBox) {\n // isRtl = isParaBidi;\n // } else { // For Text element box we need to check the character format and unicode of text to detect the RTL text. \n // isRTLText = this.documentHelper.textHelper.isRTLText(text);\n // isRtl = isRTLText || elementCharacterFormat.bidi\n // || elementCharacterFormat.bdo === 'RTL';\n // }\n // if (element instanceof FieldElementBox || this.isRtlFieldCode) {\n // if ((element as FieldElementBox).fieldType === 0) {\n // this.isRtlFieldCode = true;\n // } else if ((element as FieldElementBox).fieldType === 1) {\n // this.isRtlFieldCode = false;\n // }\n // isRtl = false;\n // }\n // // If the text element box contains only whitespaces, then need to check the previous and next elements.\n // if (!isRtl && !isNullOrUndefined(text) && text !== '' && ((text !== '' && text.trim() === '') || containsSpecchrs)) {\n // let elements: ElementBox[] = line.children;\n // //Checks whether the langugae is RTL.\n // if (elementCharacterFormat.bidi) {\n // // If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // if (lastAddedElementIsRtl) {\n // isRtl = true;\n // // Else, Check for next element.\n // } else if (i + 1 < line.children.length && line.children[i + 1] instanceof TextElementBox) {\n // text = (elements[i + 1] as TextElementBox).text;\n // isRtl = this.documentHelper.textHelper.isRTLText(text) || elements[i + 1].characterFormat.bidi\n // || elements[i + 1].characterFormat.bdo === 'RTL';\n // }// If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // } else if (lastAddedElementIsRtl) {\n // isRtl = true;\n // }\n // }\n // // Preserve the isRTL value, to reuse it for navigation and selection.\n // element.isRightToLeft = isRtl;\n // //Adds the text element to the line\n // if (isRtl && elementCharacterFormat.bdo !== 'LTR') {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // tempElements.splice(0, 0, element);\n // }\n // lastAddedElementIsRtl = true;\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // } else {\n // if (lastAddedElementIsRtl && element instanceof ImageElementBox) {\n // if (elementCharacterFormat.bidi) {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // }\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // lastAddedElementIsRtl = false;\n // }\n // }\n // }\n // // Clear the elemnts and reassign the arranged elements.\n // line.children = [];\n // line.children = tempElements;\n // }\n Layout.prototype.shiftElementsForRTLLayouting = function (line, paraBidi) {\n ////Check whether span has bidi value\n var textRangeBidi = this.hasTextRangeBidi(line);\n if (this.isContainsRTLText(line) || paraBidi || textRangeBidi) {\n ////Splits the child elements of a line by consecutive RTL, LTR text and word breaking characters.\n var characterRangeTypes = [];\n var lineElementsBidiValues = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox && element.height > 0 && !(element.isPageBreak)) {\n var textRange = element;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n if (textRange.text == \"\\t\") {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n element.isRightToLeft = characterRangeTypes[characterRangeTypes.length - 1] == CharacterRangeType.RightToLeft;\n }\n else if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n var isStartMark = this.isStartMarker(element);\n var isEndMark = this.isEndMarker(element);\n if (isStartMark && i < line.children.length - 1) {\n var nextltWidget = this.getNextValidWidget(i + 1, line);\n if (!isNullOrUndefined(nextltWidget) && (nextltWidget instanceof TextElementBox)\n && nextltWidget.height > 0) {\n var textRange = nextltWidget;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n //Since tab-stop in the line changes the reordering, here we consider an tab-stop widget as Tab.\n if (nextltWidget.text === '\\t') {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (!isEndMark && i > 0) {\n lineElementsBidiValues.push(lineElementsBidiValues[lineElementsBidiValues.length - 1]);\n characterRangeTypes.push(characterRangeTypes[characterRangeTypes.length - 1]);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (element instanceof ListTextElementBox && paraBidi) {\n lineElementsBidiValues.push(paraBidi);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n ////Sets CharacterRangeType of word split characters as (WordSplit | RTL), if word split characters are present between splitted RTL text in the same layouted line.\n ////This code handles for both single and multiple Text Ranges of a line (Special case for ordering elements)\n var rtlStartIndex = -1;\n var isPrevLTRText = undefined;\n for (var i = 0; i < characterRangeTypes.length; i++) {\n if (i + 1 < lineElementsBidiValues.length\n && lineElementsBidiValues[i] != lineElementsBidiValues[i + 1]) {\n if (rtlStartIndex != -1) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n isPrevLTRText = null;\n continue;\n }\n if (characterRangeTypes[i] == CharacterRangeType.RightToLeft || characterRangeTypes[i] == CharacterRangeType.LeftToRight\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1\n || (isNullOrUndefined(isPrevLTRText) || !isPrevLTRText) && lineElementsBidiValues[i]) {\n if (rtlStartIndex == -1 && characterRangeTypes[i] != CharacterRangeType.LeftToRight) {\n rtlStartIndex = i;\n }\n else if (rtlStartIndex == -1) {\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n continue;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = characterRangeTypes[i] == CharacterRangeType.RightToLeft\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1 ? i : -1;\n }\n }\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n }\n if (rtlStartIndex != -1 && rtlStartIndex < characterRangeTypes.length - 1) {\n this.updateCharacterRange(line, characterRangeTypes.length - 1, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n if (characterRangeTypes.length != line.children.length) {\n ////This exception is thrown to avoid, unhandled exception in RTL/LTR reordering logic.\n throw new Error(\"Splitted Widget count mismatch while reordering layouted child widgets of a line\");\n }\n var reorderedWidgets = this.reorderElements(line, characterRangeTypes, lineElementsBidiValues, paraBidi);\n lineElementsBidiValues.length = 0;\n characterRangeTypes.length = 0;\n if (line.children.length > 0) {\n line.layoutedElements = reorderedWidgets;\n //elements.Clear();\n //line.children = reorderedWidgets;\n ////ReCalculate the height and baseline offset once again.\n //UpdateMaxElement();\n }\n }\n return paraBidi;\n };\n Layout.prototype.isStartMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 0;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 0;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 0;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 0;\n }\n return false;\n };\n Layout.prototype.isEndMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 1;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 1;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 1;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 1;\n }\n return false;\n };\n Layout.prototype.getNextValidWidget = function (startIndex, layoutedWidgets) {\n for (var i = startIndex; i < layoutedWidgets.children.length; i++) {\n var element = layoutedWidgets.children[i];\n if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n continue;\n }\n else {\n return element[i];\n }\n }\n return null;\n };\n Layout.prototype.hasTextRangeBidi = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var elementBox = line.children[i];\n if (elementBox instanceof TextElementBox) {\n var textRange = elementBox;\n if (textRange.characterFormat.bidi) {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.isContainsRTLText = function (line) {\n var documentHelper = line.paragraph.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n var isContainsRTL = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof TextElementBox) {\n isContainsRTL = line.children[i].characterFormat.bidi || line.children[i].characterFormat.bidi == true\n || textHelper.isRTLText(line.children[i].text);\n if (isContainsRTL)\n break;\n }\n }\n return isContainsRTL;\n };\n Layout.prototype.updateCharacterRange = function (line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes) {\n var endIndex = i;\n if (!lineElementsBidiValues[i]) {\n if (characterRangeTypes[i] === CharacterRangeType.LeftToRight) {\n endIndex--;\n }\n for (var j = endIndex; j >= rtlStartIndex; j--) {\n if (characterRangeTypes[j] != CharacterRangeType.WordSplit) {\n endIndex = j;\n break;\n }\n }\n }\n for (var j = rtlStartIndex; j <= endIndex; j++) {\n if (characterRangeTypes[j] == CharacterRangeType.WordSplit) {\n characterRangeTypes[j] = CharacterRangeType.RightToLeft | CharacterRangeType.WordSplit;\n var previousIndex = j - 1;\n var nextIndex = j + 1;\n //// Handled a special behavior, When a EastAsia font is \"Times New Roman\" for text range.\n //// Group of word split character is exist in between a RTL characters, MS Word reverse a corresponding word split characters.\n //// So, that we have reverse the word split characters.\n if (previousIndex >= 0 && nextIndex < characterRangeTypes.length\n && characterRangeTypes[previousIndex] == CharacterRangeType.RightToLeft\n && (characterRangeTypes[nextIndex] == CharacterRangeType.RightToLeft || characterRangeTypes[nextIndex] == CharacterRangeType.Number)\n && line.children[j] instanceof TextElementBox) {\n var textRange = line.children[j];\n if (textRange.characterFormat.fontFamilyBidi == \"Times New Roman\") {\n var charArray = textRange.text.split(\"\");\n var reverseArray = charArray.reverse();\n var joinArray = reverseArray.join(\"\");\n textRange.text = joinArray;\n }\n }\n }\n }\n };\n Layout.prototype.reorderElements = function (line, characterRangeTypes, listElementsBidiValues, paraBidi) {\n var insertIndex = 0, lastItemIndexWithoutRTLFlag = -1, consecutiveRTLCount = 0, consecutiveNumberCount = 0;\n var reorderedElements = [];\n var prevCharType = CharacterRangeType.LeftToRight;\n var prevBidi = false;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n var textElement = element;\n textElement.characterRange = characterRangeTypes[i];\n var isRTLText = (textElement.characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft || textElement.characterRange == CharacterRangeType.Number;\n var isBidi = listElementsBidiValues[i];\n ////If tab-stop is exist with in the line then we have to consider the below behaviours\n if (characterRangeTypes[i] == CharacterRangeType.Tab) {\n if (paraBidi) {\n ////When para bidi is true, reordering is performed until tab stop position and break the reordering and then again reordering is performed for the remaining contents which exist after the tab-stop. \n ////Assume if we have an tab stop in center of the line, then the reordering is performed until the tab stop position and stop and place a tab stop and starts reordering for the remaining contents. \n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n prevCharType = CharacterRangeType.LeftToRight;\n prevBidi = false;\n reorderedElements.splice(insertIndex, 0, element);\n continue;\n }\n else if (isBidi) {\n ////If text range bidi is true for the tab stop widget, MS Word does not consider this tab-stop bidi as LTR Bidi and does not shift it as per our reordering. \n ////Instead its consider this widget as non-bidi LTR and do the reordering.\n isBidi = false;\n }\n }\n if (i > 0 && prevBidi != isBidi) {\n if (paraBidi) {\n ////If Bidi of paragraph is true, then start inserting widgets from first (index 0).\n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n }\n else {\n ////If Bidi of paragraph is false, then start inserting widgets from last (reorderedWidgets.Count).\n lastItemIndexWithoutRTLFlag = reorderedElements.length - 1;\n }\n ////If Bidi for previous and next widget differs, we have to reset consecutive number to 0.\n consecutiveNumberCount = 0;\n }\n if (!isBidi && !isRTLText) {\n if (paraBidi) {\n if (consecutiveRTLCount > 0 && prevBidi == isBidi) {\n insertIndex += consecutiveRTLCount;\n }\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n }\n else {\n reorderedElements.push(element);\n insertIndex = i + 1;\n }\n consecutiveRTLCount = 0;\n lastItemIndexWithoutRTLFlag = paraBidi ? insertIndex - 1 : reorderedElements.length - 1;\n }\n else if (isRTLText || (isBidi && textElement.characterRange == CharacterRangeType.WordSplit\n && (prevCharType == CharacterRangeType.RightToLeft || this.isInsertWordSplitToLeft(characterRangeTypes, listElementsBidiValues, i)))) {\n consecutiveRTLCount++;\n insertIndex = lastItemIndexWithoutRTLFlag + 1;\n if (textElement.characterRange == CharacterRangeType.Number) {\n if (prevCharType == CharacterRangeType.Number) {\n ////Moves the insertIndex to the right after the previous consecutive number.\n insertIndex += consecutiveNumberCount;\n }\n ////Increments consecutive number counter, to decide how much position the next number text range (widget) has to be moved and inserted towards right of insertIndex.\n consecutiveNumberCount++;\n }\n reorderedElements.splice(insertIndex, 0, element);\n }\n else {\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n consecutiveRTLCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.Number) {\n ////Resets the consecutive number counter when character range is not a number.\n consecutiveNumberCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.WordSplit) {\n ////Note: Handled to set only CharacterRangeType.RightToLeft and CharacterRangeType.LeftToRight\n ////For CharacterRangeType.WordSplit | CharacterRangeType.RightToLeft case, the IsInsertWordSplitToLeft method will return true.\n prevCharType = textElement.characterRange;\n }\n prevBidi = isBidi;\n }\n return reorderedElements;\n };\n Layout.prototype.isInsertWordSplitToLeft = function (characterRangeTypes, lineElementsBidiValues, elementIndex) {\n for (var i = elementIndex + 1; i < characterRangeTypes.length; i++) {\n if ((characterRangeTypes[i] & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft) {\n return true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n if (lineElementsBidiValues[i]) {\n return false;\n }\n else {\n ////If bidi is true for previous LTR and bidi is false for next LTR, then insert Word split to before previous inserted widget.\n return true;\n }\n }\n }\n return true;\n };\n Layout.prototype.shiftLayoutFloatingItems = function (paragraph) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var element = paragraph.floatingElements[i];\n var position = this.getFloatingItemPoints(element);\n var height = position.y - element.y;\n element.x = position.x;\n element.y = position.y;\n if (element instanceof ShapeElementBox) {\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var block = element.textFrame.childWidgets[j];\n if (block instanceof ParagraphWidget) {\n block.y = block.y + height;\n }\n else if (block instanceof TableWidget) {\n this.shiftChildLocationForTableWidget(block, height);\n }\n }\n }\n }\n };\n //RTL feature layout end\n Layout.prototype.getFloatingItemPoints = function (floatElement) {\n var paragraph = floatElement.line.paragraph;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var indentX = 0;\n var indentY = 0;\n if (paragraph) {\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var rightMargin = HelperMethods.convertPointToPixel(sectionFormat.rightMargin);\n var topMargin = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var bottomMargin = sectionFormat.bottomMargin > 0 ? HelperMethods.convertPointToPixel(sectionFormat.bottomMargin) : 48;\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var pageWidth = HelperMethods.convertPointToPixel(sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var pageClientWidth = pageWidth - (leftMargin + rightMargin);\n var pageClientHeight = pageHeight - topMargin - bottomMargin;\n //Need to consider RTL layout.\n if (paragraph.isInHeaderFooter && sectionFormat.topMargin <= 0) {\n topMargin = Math.abs(topMargin) > 0 ? Math.abs(topMargin)\n : HelperMethods.convertPointToPixel(sectionFormat.headerDistance) + (paragraph.height);\n }\n else {\n topMargin = topMargin > 0 ? topMargin : 48;\n }\n //Update the top margin as text body y position when text body y position exceeds the top margin. \n if (!paragraph.isInHeaderFooter && topMargin < this.viewer.clientArea.y) {\n topMargin = this.viewer.clientArea.y;\n }\n var mIsYPositionUpdated = false;\n var textWrapStyle = 'InFrontOfText';\n //if (textWrapStyle !== 'Inline') {\n var isLayoutInCell = false;\n var vertOrigin = floatElement.verticalOrigin;\n var horzOrigin = floatElement.horizontalOrigin;\n var horzAlignment = floatElement.horizontalAlignment;\n var vertAlignment = floatElement.verticalAlignment;\n var verticalPercent = floatElement.verticalRelativePercent;\n var horizontalPercent = floatElement.horizontalRelativePercent;\n var shapeHeight = floatElement.height;\n //Need to update size width for Horizontal Line when width exceeds client width.\n // if(shape !== null && shape.IsHorizontalRule && size.Width > m_layoutArea.ClientActiveArea.Width)\n // size.Width = m_layoutArea.ClientActiveArea.Width;\n var shapeWidth = floatElement.width;\n var vertPosition = floatElement.verticalPosition;\n var horzPosition = floatElement.horizontalPosition;\n var layoutInCell = floatElement.layoutInCell;\n var autoShape = void 0;\n if (floatElement instanceof ShapeElementBox) {\n autoShape = floatElement.autoShapeType;\n }\n //Word 2013 Layout picture in table cell even layoutInCell property was False.\n if (paragraph.isInsideTable && layoutInCell) {\n isLayoutInCell = true;\n indentY = this.getVerticalPosition(floatElement, vertPosition, vertOrigin, textWrapStyle);\n indentX = this.getHorizontalPosition(floatElement.width, floatElement, horzAlignment, horzOrigin, horzPosition, textWrapStyle, paragraph.associatedCell.cellFormat.cellWidth);\n }\n else {\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n switch (vertOrigin) {\n case 'Line':\n indentY = this.documentHelper.selection.getTop(floatElement.line);\n break;\n default:\n indentY = this.viewer.clientActiveArea.y;\n break;\n }\n switch (horzOrigin) {\n case 'Character':\n indentX = this.viewer.clientActiveArea.x;\n break;\n default:\n switch (horzAlignment) {\n case 'Center':\n indentX = (this.viewer.clientArea.width / 2) - (floatElement.width / 2);\n break;\n default:\n indentX = this.viewer.clientArea.x;\n break;\n }\n break;\n }\n }\n else {\n if (mIsYPositionUpdated) { /* Upadte the Y Coordinate of floating image when floating image postion is changed based on the wrapping style. */\n indentY = this.viewer.clientArea.y;\n }\n else {\n switch (vertOrigin) {\n case 'Page':\n case 'TopMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Top':\n indentY = vertPosition;\n break;\n case 'Center':\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight) / 2;\n }\n else {\n indentY = (pageHeight - shapeHeight) / 2;\n }\n break;\n case 'Outside':\n case 'Bottom':\n if (vertOrigin === 'Page' && vertAlignment === 'Bottom') {\n indentY = pageHeight - shapeHeight;\n }\n else {\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight);\n }\n else if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n break;\n case 'Inside':\n if (vertOrigin === 'Page') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n else {\n //Need to ensure this behaviour.\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = ((topMargin - shapeHeight) / 2 - headerDistance);\n }\n }\n break;\n case 'None':\n if (Math.abs(verticalPercent) <= 1000) {\n indentY = pageHeight * (verticalPercent / 100);\n }\n else {\n indentY = vertPosition;\n }\n break;\n }\n break;\n case 'Line':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n //Need to update line widget height instead of client active area.\n indentY = this.viewer.clientActiveArea.y;\n break;\n case 'Center':\n indentY = this.viewer.clientActiveArea.y - shapeHeight / 2;\n break;\n case 'Outside':\n case 'Bottom':\n indentY = this.viewer.clientActiveArea.y - shapeHeight;\n break;\n case 'None':\n indentY = Math.round(paragraph.y) + vertPosition;\n break;\n }\n break;\n case 'BottomMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n indentY = (pageHeight - bottomMargin);\n break;\n case 'Center':\n indentY = pageHeight - bottomMargin + ((bottomMargin - shapeHeight) / 2);\n break;\n case 'Outside':\n case 'Bottom':\n if (paragraph.bodyWidget.page.index + 1 % 2 !== 0 && vertAlignment === 'Outside') {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = pageHeight - shapeHeight;\n }\n break;\n case 'None':\n indentY = pageHeight - bottomMargin + vertPosition;\n break;\n }\n break;\n case 'InsideMargin':\n case 'OutsideMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n if (vertOrigin === 'InsideMargin') {\n if (vertOrigin === 'InsideMargin' && paragraph.bodyWidget.page.index + 1 % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : topMargin - shapeHeight;\n }\n break;\n case 'Top':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : 0;\n }\n break;\n case 'Center':\n if (vertOrigin === 'OutsideMargin') {\n //Need to ensure this.\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2 : (topMargin - shapeHeight) / 2;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2;\n }\n else {\n indentY = (topMargin - shapeHeight) / 2;\n }\n }\n break;\n case 'Outside':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = (pageHeight - bottomMargin);\n }\n else {\n indentY = (topMargin - shapeHeight);\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? topMargin - shapeHeight : pageHeight - bottomMargin;\n }\n break;\n case 'Bottom':\n if (vertOrigin === 'OutsideMargin') {\n indentY = (paragraph.bodyWidget.page.index + 1) !== 0 ? pageHeight - shapeHeight : topMargin - shapeHeight;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = topMargin - shapeHeight;\n }\n }\n break;\n case 'None':\n break;\n }\n break;\n case 'Paragraph':\n var space = 0;\n //let prevsibling: BlockWidget = paragraph.previousWidget as BlockWidget;\n // if (floatElement) {\n // //Need to handle DocIO Implementation.\n // if (Math.round(paragraph.y) !== Math.round(topMargin) && (prevsibling instanceof ParagraphWidget)\n // && ((paragraph.paragraphFormat.beforeSpacing > prevsibling.paragraphFormat.afterSpacing)\n // || (prevsibling.paragraphFormat.afterSpacing < 14)\n // && !paragraph.paragraphFormat.contextualSpacing)) {\n // space = prevsibling.paragraphFormat.afterSpacing;\n // }\n // }\n // eslint-disable-next-line max-len\n //Floating item Y position is calculated from paragraph original Y position not from wrapped paragraph Y(ParagraphLayoutInfo.YPosition) position.\n indentY = Math.round(paragraph.y) + space + vertPosition;\n break;\n case 'Margin':\n //If header distance is more than top margin, then calculate the position of item based on header distance.\n //As per Microsoft Word behavior, it is need to consider paragraph height along with the distance.\n if (paragraph.isInHeaderFooter && headerDistance > topMargin) {\n //Need to udpate.\n indentY = (headerDistance + (paragraph.height)) + vertPosition;\n }\n else {\n indentY = topMargin + vertPosition;\n }\n switch (vertAlignment) {\n case 'Top':\n indentY = topMargin;\n break;\n case 'Center':\n indentY = topMargin + (pageClientHeight - shapeHeight) / 2;\n break;\n case 'Outside':\n case 'Bottom':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'None':\n break;\n }\n break;\n default:\n //Need to analyze further.\n indentY = this.viewer.clientArea.y - vertPosition;\n break;\n }\n }\n // if (horzOrigin !== 'Column' && horzAlignment !== 'None') {\n // indentX = this.viewer.clientArea.x;\n // //Update the floating item x position to zero when floating item’s width\n // //exceeds the page width when floating item and it wrapping style is not equal to \n // // infront of text and behind text and also vertical origin is not equal to paragraph.\n // } else \n if (paragraph && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind' &&\n vertOrigin === 'Paragraph' && shapeWidth >= pageWidth) {\n indentX = 0;\n }\n else {\n switch (horzOrigin) {\n case 'Page':\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n if (isLayoutInCell) {\n indentX = (paragraph.associatedCell.cellFormat.cellWidth - shapeWidth) / 2;\n }\n else {\n indentX = (pageWidth - shapeWidth) / 2;\n }\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Outside':\n case 'Right':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.cellFormat.cellWidth - shapeWidth;\n }\n else {\n indentX = pageWidth - shapeWidth;\n }\n break;\n case 'None':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.x + horzPosition;\n }\n else if (floatElement instanceof ShapeElementBox) {\n indentX = horzPosition;\n // Shape pItemShape = paraItem as Shape;\n // float horRelPercent = pItemShape !== null ? pItemShape.TextFrame.HorizontalRelativePercent\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalRelativePercent;\n // if (Math.Abs(horRelPercent) <= 1000)\n // indentX = pageWidth * (horRelPercent / 100);\n // else\n // indentX = pItemShape !== null ? pItemShape.HorizontalPosition\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalPosition;\n }\n else {\n indentX = horzPosition;\n }\n break;\n }\n if (indentX < 0 && isLayoutInCell) {\n indentX = paragraph.associatedCell.x;\n }\n break;\n case 'Column':\n //Update the Xposition while wrapping element exsit in the paragraph\n if (this.viewer.clientActiveArea.x < paragraph.x) {\n // let cellPadings = 0;\n // if (paragraph.isInsideTable) {\n // CellLayoutInfo cellLayoutInfo = (ownerPara.GetOwnerEntity() as IWidget).LayoutInfo as CellLayoutInfo;\n // cellPadings = cellLayoutInfo.Paddings.Left + cellLayoutInfo.Paddings.Right;\n // }\n // float minimumWidthRequired = DEF_MIN_WIDTH_SQUARE;\n // if (textWrapStyle === TextWrappingStyle.Tight || textWrapStyle === TextWrappingStyle.Through)\n // minimumWidthRequired = ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013 ?\n // DEF_MIN_WIDTH_2013_TIGHTANDTHROW : DEF_MIN_WIDTH_TIGHTANDTHROW;\n // minimumWidthRequired -= cellPadings;\n // //Re Update the x position to the page left when paragraph starting position not equal to the \n // //column starting and current inline item is x position equal to the column left position.\n // if ((ownerPara.IsXpositionUpated && ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013)\n // || paragraphLayoutInfo.XPosition > (pageWidth - minimumWidthRequired - rightMargin)\n // || paragraphLayoutInfo.IsXPositionReUpdate)\n // indentX = layouter.ClientLayoutArea.Left + horzPosition;\n // else\n indentX = paragraph.x + horzPosition;\n }\n else {\n //Re Update the x position to the page left when word version not equal to 2013 \n //and wrapping style not equal to infront of text and behind text. \n if ((textWrapStyle === 'InFrontOfText' || textWrapStyle === 'Behind')) {\n if (!(floatElement.paragraph.isInsideTable) && (autoShape === 'StraightConnector' || autoShape === 'Rectangle')) {\n indentX = horzPosition + HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n }\n else {\n indentX = paragraph.x + horzPosition;\n }\n }\n else {\n indentX = this.viewer.clientActiveArea.x + horzPosition;\n }\n }\n //Update the Wrapping element right position as page right when \n //wrapping element right position exceeds the page right except position \n //InFrontOfText and behindText wrapping style.\n if (textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind'\n && Math.round(indentX + shapeWidth) > Math.round(pageWidth) && shapeWidth < pageWidth) {\n indentX = (pageWidth - shapeWidth);\n }\n if (paragraph.paragraphFormat.leftIndent && paragraph.isInHeaderFooter) {\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.leftIndent);\n indentX -= leftIndent;\n }\n switch (horzAlignment) {\n case 'Center':\n indentX = this.viewer.clientActiveArea.x + (this.viewer.clientActiveArea.width - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = this.viewer.clientActiveArea.x;\n break;\n case 'Right':\n indentX = this.viewer.clientActiveArea.x + this.viewer.clientActiveArea.width - shapeWidth; //- TextBoxFormat.InternalMargin.Right;\n break;\n case 'None':\n break;\n }\n break;\n case 'Margin':\n if (paragraph.bodyWidget) {\n indentX = leftMargin + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = leftMargin + (pageClientWidth - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = leftMargin;\n break;\n case 'Outside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'Right':\n indentX = leftMargin + pageClientWidth - shapeWidth;\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'None':\n break;\n }\n }\n else {\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'Character':\n if (horzAlignment === 'Right' || horzAlignment === 'Center') {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n //Need to update this while layouting.**\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'LeftMargin':\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'RightMargin':\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'InsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n case 'OutsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n default:\n indentX = this.viewer.clientArea.x + horzPosition;\n break;\n }\n }\n //Update the floating item right position to the page right when floating item \n //right position exceeds the page width and it wrapping style is not equal to \n // InFrontOfText and behind text and also vertical origin is not equal to paragraph.\n if (paragraph && textWrapStyle !== 'InFrontOfText'\n && textWrapStyle !== 'Behind' && vertOrigin === 'Paragraph' && pageWidth < indentX + shapeWidth) {\n indentX = pageWidth - shapeWidth;\n }\n }\n }\n }\n //}\n return new Point(indentX, indentY);\n };\n Layout.prototype.getLeftMarginHorizPosition = function (leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = (leftMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Right':\n indentX = leftMargin - shapeWidth;\n break;\n case 'None':\n break;\n }\n if (indentX < 0 && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = 0;\n }\n return indentX;\n };\n Layout.prototype.getRightMarginHorizPosition = function (pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var xPosition = pageWidth - rightMargin;\n var indentX = xPosition + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = xPosition + (rightMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = xPosition;\n break;\n case 'Right':\n indentX = pageWidth - shapeWidth;\n break;\n case 'None':\n break;\n }\n if ((indentX < 0 || indentX + shapeWidth > pageWidth) && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = pageWidth - shapeWidth;\n }\n return indentX;\n };\n Layout.prototype.getVerticalPosition = function (paraItem, vertPosition, vertOrigin, textWrapStyle) {\n var paragraph = paraItem.line.paragraph;\n //ParagraphLayoutInfo paragraphLayoutInfo = (paragraph as IWidget).LayoutInfo as ParagraphLayoutInfo;\n var shape = paraItem;\n //WPicture pic = paraItem as WPicture;\n var indentY = 0;\n var topMargin = paragraph.associatedCell.y;\n switch (vertOrigin) {\n case 'Page':\n case 'Margin':\n case 'TopMargin':\n case 'InsideMargin':\n case 'BottomMargin':\n case 'OutsideMargin':\n indentY = topMargin + vertPosition;\n break;\n case 'Line':\n case 'Paragraph':\n var space = 0;\n // if (shape) {\n // space = paragraph.paragraphFormat.afterSpacing;\n // }\n indentY = paragraph.y + vertPosition + space;\n break;\n default:\n indentY = this.viewer.clientActiveArea.y + vertPosition;\n break;\n }\n return indentY;\n };\n Layout.prototype.getHorizontalPosition = function (width, paraItem, horzAlignment, horzOrigin, horzPosition, textWrapStyle, cellWid) {\n var indentX = 0;\n var paragraph = paraItem.line.paragraph;\n // CellLayoutInfo cellLayoutInfo = (paragraph.OwnerTextBody as IWidget).LayoutInfo as CellLayoutInfo;\n // ILayoutSpacingsInfo spacings = cellLayoutInfo as ILayoutSpacingsInfo;\n var cell = paragraph.associatedCell;\n var cellWidth = cellWid - cell.leftMargin - cell.rightMargin;\n var cellInnerWidth = cell.cellFormat.cellWidth;\n var marginLeft = cell.x;\n var pageLeft = marginLeft - cell.leftMargin;\n switch (horzOrigin) {\n case 'Page':\n {\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = pageLeft + (cellWidth - width) / 2;\n break;\n case 'Left':\n indentX = pageLeft;\n break;\n case 'Right':\n indentX = pageLeft + (cellWidth - width);\n break;\n case 'None':\n indentX = pageLeft + horzPosition;\n break;\n }\n }\n break;\n case 'Column':\n case 'Margin':\n {\n switch (horzAlignment) {\n case 'Center':\n indentX = marginLeft + (cellInnerWidth - width) / 2;\n break;\n case 'Left':\n indentX = marginLeft;\n break;\n case 'Right':\n indentX = marginLeft + (cellInnerWidth - width);\n break;\n case 'None':\n indentX = marginLeft + horzPosition;\n break;\n }\n }\n break;\n default:\n {\n indentX = marginLeft + horzPosition;\n }\n break;\n }\n return indentX;\n };\n Layout.prototype.updateTableFloatPoints = function (table) {\n if (table.wrapTextAround) {\n var tableTotalWidth = table.getTableCellWidth();\n var position = table.positioning;\n var sectionFormat = table.bodyWidget.sectionFormat;\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Page' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.width - tableTotalWidth;\n }\n else {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.x;\n }\n }\n }\n else {\n if (!(table.containerWidget instanceof TextFrame) && !table.isInsideTable) {\n // Vertical position\n if (position.verticalOrigin === 'Page') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n else if (position.verticalOrigin === 'Margin') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (isNullOrUndefined(position.verticalAlignment)) {\n this.viewer.clientActiveArea.y = (HelperMethods.convertPointToPixel(sectionFormat.topMargin) + HelperMethods.convertPointToPixel(position.verticalPosition));\n }\n }\n else if (position.verticalOrigin === 'Paragraph') {\n if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth) / 2;\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin)\n + (HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin) - tableTotalWidth) / 2;\n }\n }\n if (Math.round(position.horizontalPosition) > 0) {\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n }\n else if (table.isInsideTable) {\n var ownerCell = table.containerWidget;\n var cellFormat = ownerCell.cellFormat;\n if (position.verticalOrigin === 'Page') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n else if (position.verticalOrigin === 'Margin') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n this.viewer.clientActiveArea.y += ownerCell.topMargin;\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n else {\n if (this.viewer.clientActiveArea.y + HelperMethods.convertPointToPixel(position.verticalPosition) < ownerCell.y) {\n this.viewer.clientActiveArea.y = ownerCell.y;\n }\n else {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = ownerCell.x;\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth) - tableTotalWidth);\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = (ownerCell.x + ownerCell.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth)\n - (tableTotalWidth + ownerCell.rightMargin));\n }\n }\n if (Math.round(position.horizontalPosition) > 0) {\n this.viewer.clientActiveArea.x = ownerCell.x;\n if (position.horizontalOrigin === 'Margin') {\n this.viewer.clientActiveArea.x += ownerCell.leftMargin;\n }\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (cellFormat.preferredWidth / 2) - (tableTotalWidth / 2);\n }\n }\n }\n }\n table.x = this.viewer.clientActiveArea.x;\n table.y = this.viewer.clientActiveArea.y;\n };\n Layout.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') !== -1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.getTotalColumnSpan = function (row) {\n var tableRow = row;\n var totalColumnSpan = 0;\n for (var i = 0; i < tableRow.childWidgets.length; i++) {\n totalColumnSpan += tableRow.childWidgets[i].cellFormat.columnSpan;\n }\n return totalColumnSpan;\n };\n Layout.prototype.getMaximumRightCellBorderWidth = function (table) {\n var highestBorderSize = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var cell = row.childWidgets[row.childWidgets.length - 1];\n var cellBorder = cell.cellFormat.borders.right.lineWidth;\n if (highestBorderSize < cellBorder) {\n highestBorderSize = cellBorder;\n }\n }\n return highestBorderSize;\n };\n Layout.prototype.getDefaultBorderSpacingValue = function (border, isBorderValueZero, tableHorizontalPosition) {\n if (border == 0) {\n if (this.documentHelper.compatibilityMode != 'Word2013' && tableHorizontalPosition == 'Center') {\n border = 1.5;\n }\n else {\n border = 0.75;\n }\n return true;\n }\n return isBorderValueZero;\n };\n Layout.prototype.getMinimumWidthRequiredForTable = function (isBorderValueZero, tableHorizontalPosition, border) {\n var minimumWidthRequired = 0;\n //To fit the item right side of the Table Microsoft Word 2013 application and other version has different value based on border of the table and alignment of the table.\n if (this.documentHelper.compatibilityMode == 'Word2013') {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + Math.round(0.75 / 2);\n }\n else {\n minimumWidthRequired = 18.5 + Math.round(border / 2);\n }\n }\n else {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + 0.75;\n }\n else {\n minimumWidthRequired = 18.5 + border;\n }\n }\n }\n else {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 19.25;\n }\n else {\n minimumWidthRequired = 18.5 + (border / 2);\n }\n }\n else {\n if (border == 0.25) {\n minimumWidthRequired = 18.5;\n }\n else {\n minimumWidthRequired = 19.3;\n }\n }\n }\n return HelperMethods.convertPointToPixel(minimumWidthRequired);\n };\n Layout.prototype.shiftFloatingItemsFromTable = function (table, bodyWidget) {\n if (table.containerWidget instanceof BodyWidget) {\n for (var i = 0; i < table.containerWidget.floatingElements.length; i++) {\n var shape = table.containerWidget.floatingElements[i];\n if (!(shape instanceof TableWidget) && shape.paragraph.containerWidget instanceof TableCellWidget\n && shape.paragraph.containerWidget.ownerTable.containerWidget.ownerTable == table) {\n bodyWidget.floatingElements.push(table.containerWidget.floatingElements[i]);\n table.containerWidget.floatingElements.splice(table.containerWidget.floatingElements.indexOf(table.containerWidget.floatingElements[i]), 1);\n this.shiftedFloatingItemsFromTable.push(shape);\n i--;\n }\n }\n }\n };\n return Layout;\n}());\nexport { Layout };\n","import { isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, LineWidget, ParagraphWidget, TextElementBox, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox, BlockWidget, CommentCharacterElementBox, ShapeElementBox, EditRangeStartElementBox, ShapeBase, TextFrame } from './page';\nimport { Layout } from './layout';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { CharacterRangeType } from '../../index';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(documentHelper) {\n this.isPrinting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageIndex = -1;\n this.isFieldCode = false;\n this.leftPosition = 0;\n this.topPosition = 0;\n this.height = 0;\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.containerCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellChecker;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = HelperMethods.getColor(this.documentHelper.backgroundColor);\n this.pageContext.beginPath();\n if (this.viewer instanceof WebLayoutViewer) {\n height = height > this.documentHelper.visibleBounds.height ? height : this.documentHelper.visibleBounds.height;\n var marginTop = top;\n if (page.index === 0) {\n marginTop = top - this.viewer.padding.top;\n }\n /* eslint-disable-next-line max-len */\n this.pageContext.fillRect(left - this.viewer.padding.left, marginTop, width + this.viewer.padding.left, height + this.viewer.padding.top);\n }\n else {\n this.pageContext.fillRect(left, top, width, height);\n }\n this.pageContext.closePath();\n if (this.viewer instanceof PageLayoutViewer) {\n this.pageContext.strokeStyle = this.documentHelper.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n }\n this.pageLeft = left;\n this.pageTop = top;\n this.pageIndex = page.index;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n this.height = height;\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidgetIn, width, true);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidgetIn, width, false);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[i]);\n if (page.footnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.footnoteWidget, width);\n }\n }\n if (page.endnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.endnoteWidget, width);\n }\n if (this.documentHelper.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidgetIn);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(window.devicePixelRatio, this.documentHelper.owner.documentEditorSettings.printDevicePixelRatio);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n this.pageContext.fillStyle = '#FFFFFF';\n this.pageContext.fillRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.pageContext.fillStyle = '#000000';\n };\n Renderer.prototype.renderHFWidgets = function (page, widget, width, isHeader) {\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 1 : 0.65;\n }\n var cliped = false;\n var height = 0;\n var pageHt = 0;\n var headerFooterHeight = page.boundingRectangle.height / 100 * 40;\n if (isHeader) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var widgetHeight = Math.max((widget.y + widget.height), topMargin);\n if (widgetHeight > headerFooterHeight) {\n cliped = true;\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.pageTop, width, this.getScaledValue(headerFooterHeight));\n this.pageContext.clip();\n }\n }\n else {\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = void 0;\n if (isNullOrUndefined(page.footerWidget.sectionFormat)) {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin));\n }\n else {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin));\n }\n height = Math.max(page.boundingRectangle.height - headerFooterHeight, footerHeight);\n pageHt = page.boundingRectangle.height - footerDistance;\n }\n this.renderFloatingItems(page, widget.floatingElements, 'Behind');\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n if (!isHeader) {\n height += block.height;\n }\n if (isHeader || !isHeader && this.getScaledValue(Math.round(height)) <= this.getScaledValue(Math.round(pageHt))) {\n this.renderWidget(page, block);\n }\n }\n this.renderFloatingItems(page, widget.floatingElements, 'InFrontOfText');\n if (cliped) {\n this.pageContext.restore();\n }\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 0.65 : 1;\n }\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), topMargin));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.65;\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n //Maximum header height limit\n y = Math.min(y, headerFooterHeight);\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth, '#000000', false);\n var type = this.getHeaderFooterType(page, true);\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n /* eslint-disable-next-line max-len */\n this.getScaledValue(Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin)));\n //Maximum footer height limit\n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth, '#000000', false);\n type = this.getHeaderFooterType(page, false);\n width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, top + footerHeight - 5);\n ctx.restore();\n }\n };\n Renderer.prototype.getFooterHeight = function (page) {\n var footerWidgetHeight = ((page.boundingRectangle.height) / 100) * 40;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var actualHeight = page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin));\n return Math.max((page.boundingRectangle.height) - footerWidgetHeight, actualHeight);\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n type = isHeader ? l10n.getConstant('Header') : l10n.getConstant('Footer');\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n (isNullOrUndefined(page.previousPage) || page.sectionIndex !== page.previousPage.sectionIndex)) {\n type = isHeader ? l10n.getConstant('First Page Header') : l10n.getConstant('First Page Footer');\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.documentHelper.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? l10n.getConstant('Even Page Header') : l10n.getConstant('Even Page Footer');\n }\n else {\n type = isHeader ? l10n.getConstant('Odd Page Header') : l10n.getConstant('Odd Page Footer');\n }\n }\n return type;\n };\n /* eslint-disable-next-line max-len */\n Renderer.prototype.renderDashLine = function (context, x, y, width, fillStyle, isSmallDash) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 1;\n if (isSmallDash) {\n context.setLineDash([3, 2]);\n }\n else {\n context.setLineDash([6, 4]);\n }\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.setLineDash([]);\n context.closePath();\n };\n Renderer.prototype.renderSolidLine = function (context, x, y, width, fillStyle) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 0.5;\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n Renderer.prototype.render = function (page, bodyWidget) {\n if (this.isFieldCode) {\n this.isFieldCode = false;\n }\n this.renderFloatingItems(page, page.bodyWidgets[0].floatingElements, 'Behind');\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[i];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget &&\n (bodyWidget.childWidgets[0].childWidgets.length > 0) &&\n page.repeatHeaderRowTableWidget) {\n /* eslint-disable-next-line max-len */\n this.renderHeader(page, widget, this.documentHelper.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n this.renderFloatingItems(page, page.bodyWidgets[0].floatingElements, 'InFrontOfText');\n };\n Renderer.prototype.renderFloatingItems = function (page, floatingElements, wrappingType) {\n if (!isNullOrUndefined(floatingElements) && floatingElements.length > 0) {\n /* eslint-disable */\n floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n for (var i = 0; i < floatingElements.length; i++) {\n if (floatingElements[i] instanceof TableWidget) {\n continue;\n }\n var shape = floatingElements[i];\n if ((wrappingType === \"Behind\" && shape.textWrappingStyle !== \"Behind\") ||\n (wrappingType !== \"Behind\" && shape.textWrappingStyle === \"Behind\")) {\n continue;\n }\n if (shape instanceof ImageElementBox) {\n this.renderImageElementBox(shape, shape.x, shape.y, 0);\n }\n else if (shape instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(shape.x, 1);\n var shapeTop = this.getScaledValue(shape.y, 2);\n this.renderShapeElementBox(shape, shapeLeft, shapeTop, page);\n }\n }\n }\n };\n Renderer.prototype.renderShapeElementBox = function (shape, shapeLeft, shapeTop, page) {\n var isZeroShapeHeight = (shape.height === 0) ? true : false;\n var shapeType = shape.autoShapeType;\n var blocks = shape.textFrame.childWidgets;\n this.pageContext.beginPath();\n if (shape.fillFormat && shape.fillFormat.color && shape.fillFormat.fill) {\n this.pageContext.fillStyle = shape.fillFormat.color;\n this.pageContext.fillRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n if (!isNullOrUndefined(shapeType)) {\n if ((shape.lineFormat.line && shape.lineFormat.lineFormatType !== 'None') || (!isNullOrUndefined(shape.lineFormat.lineFormatType) && shape.lineFormat.lineFormatType !== 'None')) {\n this.pageContext.lineWidth = shape.lineFormat.weight;\n this.pageContext.strokeStyle = HelperMethods.getColor(shape.lineFormat.color);\n this.pageContext.strokeRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n }\n this.pageContext.closePath();\n var isClipped = false;\n if (shape.width != 0 && shape.height != 0) {\n isClipped = true;\n this.clipRect(shape.x, shape.y, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n for (var i = 0; i < blocks.length; i++) {\n this.renderWidget(page, blocks[i]);\n if (isZeroShapeHeight && shapeType !== 'StraightConnector') {\n shape.height += blocks[i].height;\n }\n }\n if (isZeroShapeHeight) {\n isZeroShapeHeight = false;\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderWidget = function (page, widget) {\n if (this.documentHelper.owner.enableLockAndEdit) {\n this.renderLockRegionBorder(page, widget);\n }\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n Renderer.prototype.renderLockRegionBorder = function (page, widget) {\n if (!widget.isInsideTable && widget instanceof BlockWidget && widget.locked) {\n var settinsModel = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var leftPosition = HelperMethods.convertPointToPixel(sectionFormat.leftMargin) - 5;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) + 10;\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = widget.x - 5;\n pageWidth = (this.documentHelper.visibleBounds.width - (this.viewer.padding.right * 5)) / this.documentHelper.zoomFactor;\n }\n var previousWidget = widget.previousRenderedWidget;\n var nextWidget = widget.nextRenderedWidget;\n var color = widget.lockedBy === this.documentHelper.owner.currentUser ? settinsModel.editableRegionColor : settinsModel.lockedRegionColor;\n var topPosition = widget.y;\n var height = widget.y + widget.height;\n //Left border\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition, height, 1);\n //Top border\n if (isNullOrUndefined(previousWidget) || !previousWidget.locked || widget.lockedBy !== previousWidget.lockedBy) {\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition + pageWidth, topPosition, 1);\n }\n //Right border\n this.renderSingleBorder(color, leftPosition + pageWidth, topPosition, leftPosition + pageWidth, height, 1);\n if (isNullOrUndefined(nextWidget) || !nextWidget.locked || widget.lockedBy !== nextWidget.lockedBy) {\n // Bottom border\n this.renderSingleBorder(color, leftPosition, height, leftPosition + pageWidth, height, 1);\n }\n }\n };\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n //Updated client area for current page\n page.viewer.updateClientArea(page.bodyWidgets[0].sectionFormat, page);\n var top = page.viewer.clientArea.y;\n var parentTable = header.ownerTable.getSplitWidgets()[0];\n for (var i = 0; i <= header.rowIndex; i++) {\n if (parentTable.childWidgets.length === 0) {\n return;\n }\n var row = parentTable.childWidgets[i];\n if (widget.childWidgets.indexOf(row) !== -1) {\n continue;\n }\n var headerWidget = row.clone();\n headerWidget.containerWidget = row.containerWidget;\n page.viewer.updateClientAreaLocation(headerWidget, new Rect(page.viewer.clientArea.x, top, headerWidget.width, headerWidget.height));\n page.documentHelper.layout.updateChildLocationForRow(top, headerWidget);\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j = 0; j < headerWidget.childWidgets.length; j++) {\n cell = headerWidget.childWidgets[j];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.documentHelper.layout.updateChildLocationForTable(top, widget);\n }\n };\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n var top = paraWidget.y;\n var left = paraWidget.x;\n this.renderParagraphBorder(page, paraWidget);\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n top += widget.marginTop;\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n Renderer.prototype.renderParagraphBorder = function (page, paragraphWidet) {\n var leftBorder = paragraphWidet.paragraphFormat.borders.left;\n var topBorder = paragraphWidet.paragraphFormat.borders.top;\n var rightBorder = paragraphWidet.paragraphFormat.borders.right;\n var bottomBorder = paragraphWidet.paragraphFormat.borders.bottom;\n var startX = 0;\n var startY = 0;\n var endX = 0;\n var endY = 0;\n var firstLine = paragraphWidet.firstChild;\n var lastLine = paragraphWidet.lastChild;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraphWidet);\n if (leftBorder.lineStyle !== 'None') {\n startX = paragraphWidet.x - HelperMethods.convertPointToPixel(leftBorder.space);\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n this.renderSingleBorder(leftBorder.color, startX, startY, endX, endY, leftBorder.lineWidth);\n }\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startX = paragraphWidet.x;\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n this.renderSingleBorder(topBorder.color, startX, startY, endX, endY, topBorder.lineWidth);\n }\n if (rightBorder.lineStyle !== 'None') {\n startX = paragraphWidet.x + this.getContainerWidth(paragraphWidet, page) + HelperMethods.convertPointToPixel(rightBorder.space);\n startY = endY;\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n this.renderSingleBorder(rightBorder.color, startX, startY, endX, endY, rightBorder.lineWidth);\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n startX = paragraphWidet.x;\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = (paragraphWidet.y + paragraphWidet.height + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - (this.getBottomMargin(paragraphWidet));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n this.renderSingleBorder(bottomBorder.color, startX, startY, endX, endY, bottomBorder.lineWidth);\n }\n };\n Renderer.prototype.getContainerWidth = function (paraWidget, page) {\n if (paraWidget.isInsideTable) {\n var cell = paraWidget.associatedCell;\n return (cell.width + cell.margin.left + cell.margin.right) - cell.leftBorderWidth;\n }\n else {\n if (this.viewer instanceof WebLayoutViewer) {\n var indent = HelperMethods.convertPointToPixel(paraWidget.leftIndent + paraWidget.rightIndent);\n return (this.documentHelper.visibleBounds.width - (indent) - (this.viewer.padding.right * 4) - (this.viewer.padding.left * 2)) / this.documentHelper.zoomFactor;\n }\n else {\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var width = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n return HelperMethods.convertPointToPixel(width - (paraWidget.rightIndent + paraWidget.leftIndent));\n }\n }\n };\n Renderer.prototype.getTopMargin = function (paragraph) {\n if (paragraph.isEmpty()) {\n return paragraph.childWidgets[0].margin.top;\n }\n else {\n var widget = paragraph.childWidgets[0];\n return widget.children[0].margin.top;\n }\n };\n Renderer.prototype.getBottomMargin = function (paragarph) {\n if (paragarph.isEmpty()) {\n return paragarph.childWidgets[paragarph.childWidgets.length - 1].margin.bottom;\n }\n else {\n var widget = paragarph.childWidgets[paragarph.childWidgets.length - 1];\n return widget.children[widget.children.length - 1].margin.bottom;\n }\n };\n Renderer.prototype.renderfootNoteWidget = function (page, footnote, width) {\n var isEmptyPage = footnote.page.bodyWidgets.length === 1 && ((footnote.page.bodyWidgets[0].childWidgets.length === 1\n && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty != undefined && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty()) || footnote.page.bodyWidgets[0].childWidgets.length === 0);\n var footerY = this.getFooterHeight(page);\n var height = footnote.y + footnote.height;\n if (height > footerY) {\n height = (footerY - footnote.y);\n }\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.getScaledValue(footnote.y, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.clip();\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n var bodyWidget = footnote.bodyWidgets[i];\n var footNoteReference = bodyWidget.footNoteReference;\n for (var j = 0; j < bodyWidget.childWidgets.length; j++) {\n var widget = bodyWidget.childWidgets[j];\n if (i === 0 && j === 0) {\n var ctx = this.pageContext;\n this.renderSolidLine(ctx, this.getScaledValue(96, 1), this.getScaledValue(footnote.y + (footnote.margin.top / 2) + 1, 2), 210 * this.documentHelper.zoomFactor, '#000000');\n }\n if (j === 0 && !isNullOrUndefined(footNoteReference) && widget.childWidgets[0].children[0] instanceof TextElementBox && !this.documentHelper.owner.editor.isFootNoteInsert) {\n //if (j < 1 || (j > 0 && widget.footNoteReference !== (bodyWidget.childWidgets[j - 1] as BlockWidget).footNoteReference)) {\n widget.childWidgets[0].children[0].text = widget.childWidgets[0].children[0].text.replace(widget.childWidgets[0].children[0].text, footNoteReference.text);\n //}\n }\n this.renderWidget(page, widget);\n }\n }\n this.pageContext.restore();\n };\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n if (this.isFieldCode) {\n return;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n }\n };\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n }\n };\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting) {\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height + cellBottomMargin * this.documentHelper.zoomFactor < 0 ||\n (this.getScaledValue(cellWidget.y, 2) - cellTopMargin > this.documentHelper.visibleBounds.height)) {\n return;\n }\n }\n var widgetHeight = 0;\n this.renderSelectionHighlightOnTable(page, cellWidget);\n this.renderTableCellOutline(page.documentHelper, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n // MS word render the content in right margin also.\n // So, we need to add right margin value while cliping the content\n var width = (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right) - cellWidget.leftBorderWidth;\n if (!this.isPrinting) {\n this.clipRect(cellWidget.x - cellWidget.margin.left, cellWidget.y, this.getScaledValue(width), this.getScaledValue(this.height));\n }\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n };\n Renderer.prototype.checkHeaderFooterLineWidget = function (widget, keys) {\n var headerFooter;\n if (widget instanceof LineWidget) {\n headerFooter = widget.paragraph.bodyWidget;\n }\n else if (widget instanceof TableCellWidget) {\n headerFooter = widget.bodyWidget;\n }\n if (!isNullOrUndefined(headerFooter.parentHeaderFooter)) {\n headerFooter = headerFooter.parentHeaderFooter;\n for (var j = 0; j < keys.length; j++) {\n var selectedWidget = keys[j];\n if (selectedWidget instanceof LineWidget && widget instanceof LineWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.paragraph.isInHeaderFooter && headerFooter === selectedWidget.paragraph.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n else if (selectedWidget instanceof TableCellWidget && widget instanceof TableCellWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.ownerTable.isInHeaderFooter && headerFooter === selectedWidget.ownerTable.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n }\n }\n return undefined;\n };\n Renderer.prototype.renderEditRegionHighlight = function (page, lineWidget, top) {\n if (page.documentHelper.selection && !isNullOrUndefined(page.documentHelper.selection.editRegionHighlighters)) {\n var renderHighlight = page.documentHelper.selection.editRegionHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.selection.editRegionHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = page.documentHelper.selection.editRegionHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = widgetInfo[i].color !== '' ? widgetInfo[i].color : '#add8e6';\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSearchHighlight = function (page, lineWidget, top) {\n if (this.documentHelper.owner.searchModule && !isNullOrUndefined(page.documentHelper.owner.searchModule.searchHighlighters)) {\n var renderHighlight = page.documentHelper.owner.searchModule.searchHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.searchModule.searchHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = page.documentHelper.owner.searchModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.viewer.owner.documentEditorSettings.searchHighlightColor;\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSelectionHighlight = function (page, lineWidget, top) {\n if (!this.isPrinting && page.documentHelper.owner.selection && !this.documentHelper.isScrollToSpellCheck && page.documentHelper.owner.selection.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selection.selectedWidgets.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selection.selectedWidgets.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selection.addSelectionHighlight(this.selectionContext, lineWidget, top, page);\n }\n }\n };\n Renderer.prototype.renderSelectionHighlightOnTable = function (page, cellWidget) {\n if (!this.isPrinting && page.documentHelper.owner.selection && page.documentHelper.owner.selection.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selection.selectedWidgets.containsKey(cellWidget);\n if (!renderHighlight && cellWidget.ownerTable.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selection.selectedWidgets.keys;\n cellWidget = this.checkHeaderFooterLineWidget(cellWidget, keys);\n if (!isNullOrUndefined(cellWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selection.addSelectionHighlightTable(this.selectionContext, cellWidget, page);\n }\n }\n };\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n this.renderSelectionHighlight(page, lineWidget, top);\n var paraFormat = lineWidget.paragraph.paragraphFormat;\n if (lineWidget.isFirstLine() && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n if (this.documentHelper && this.documentHelper.selection && !isNullOrUndefined(this.documentHelper.selection.formFieldHighlighters)\n && this.documentHelper.selection.formFieldHighlighters.containsKey(lineWidget)) {\n if (this.documentHelper.owner.documentEditorSettings\n && this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading) {\n var widgetInfo = page.documentHelper.selection.formFieldHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.documentHelper.owner.documentEditorSettings.formFieldSettings.shadingColor;\n var height = lineWidget.height;\n var isAltered = false;\n var isLastLine = lineWidget.isLastLine();\n if (isLastLine) {\n height = height - HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(lineWidget.paragraph));\n if (lineWidget.paragraph.paragraphFormat.lineSpacing > 1) {\n var formField = this.getFormfieldInLine(lineWidget);\n if (!isNullOrUndefined(formField)) {\n var sizeInfo = this.documentHelper.textHelper.getHeight(formField.characterFormat);\n var maxHeight = sizeInfo.Height;\n if (lineWidget.paragraph.paragraphFormat.lineSpacingType === 'Multiple') {\n height = height - HelperMethods.convertPointToPixel(this.documentHelper.layout.getLineSpacing(lineWidget.paragraph, maxHeight, true));\n }\n else {\n top = top + HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n height = sizeInfo.Height;\n isAltered = true;\n }\n }\n }\n }\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(height));\n if (isAltered) {\n isAltered = false;\n top = top - HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n }\n }\n }\n }\n // Render search highlight\n this.renderSearchHighlight(page, lineWidget, top);\n // EditRegion highlight \n this.renderEditRegionHighlight(page, lineWidget, top);\n var isCommentMark = false;\n var children = lineWidget.renderedElements;\n for (var i = 0; i < children.length; i++) {\n var elementBox = children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox) {\n var pageGap = 0;\n if (this.viewer instanceof PageLayoutViewer) {\n pageGap = this.viewer.pageGap;\n }\n var style = 'display:block;position:absolute;';\n var topPosition = this.getScaledValue((top - 10) + (page.boundingRectangle.y -\n (pageGap * (page.index + 1)))) + (pageGap * (page.index + 1)) + 'px;';\n if (elementBox instanceof EditRangeStartElementBox) {\n if (this.documentHelper.owner.enableLockAndEdit) {\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n elementBox.renderLockMark(this.documentHelper.owner.currentUser, l10n);\n var settings = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var color = elementBox.user === this.documentHelper.owner.currentUser ? settings.editableRegionColor : settings.lockedRegionColor;\n style += \"color:\" + color + \";\";\n var leftMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.leftMargin);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue(leftMargin - 20) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = lineWidget.paragraph.x - 5 + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n elementBox.editRangeMark.setAttribute('style', style);\n }\n else {\n if (elementBox.editRangeMark) {\n elementBox.editRangeMark.setAttribute('style', 'display:none');\n }\n }\n }\n else if (elementBox instanceof CommentCharacterElementBox &&\n elementBox.commentType === 0 && this.documentHelper.owner.selectionModule) {\n if (this.documentHelper.owner.enableComment && !isCommentMark) {\n isCommentMark = true;\n elementBox.renderCommentMark();\n var rightMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.rightMargin);\n var pageWidth = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageWidth);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue((pageWidth - rightMargin) + (rightMargin / 4)) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = (page.boundingRectangle.width - (this.viewer.padding.right * 2) - (this.viewer.padding.left * 2)) + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n elementBox.commentMark.setAttribute('style', style);\n }\n else {\n if (elementBox.commentMark) {\n elementBox.commentMark.setAttribute('style', 'display:none');\n }\n }\n }\n }\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n var underlineY = this.getUnderlineYPosition(lineWidget);\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.documentHelper.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.documentHelper.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n if (elementBox instanceof TextElementBox) {\n elementBox.canTrigger = true;\n elementBox.isVisible = false;\n if (!elementBox.isSpellChecked || elementBox.line.paragraph.isChangeDetected) {\n elementBox.ischangeDetected = true;\n }\n }\n continue;\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(left, 1);\n var shapeTop = this.getScaledValue(top, 2);\n this.renderShapeElementBox(elementBox, shapeLeft, shapeTop, page);\n }\n else {\n elementBox.isVisible = true;\n left += elementBox.padding.left;\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n }\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if ((!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n this.isFieldCode = false;\n }\n }\n };\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (lineWidget.children[i] instanceof ShapeElementBox) {\n continue;\n }\n else {\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = (lineWidget.children[i] instanceof ImageElementBox) ? 0.9 : lineWidget.children[i].height / 20;\n }\n }\n }\n return height - 2 * lineHeight;\n };\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.hasValue('fontColor') ? format.fontColor : breakCharacterFormat.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontFamily = format.hasValue('fontFamily') ? format.fontFamily : breakCharacterFormat.fontFamily;\n if (this.documentHelper.isIosDevice && (elementBox.text === String.fromCharCode(9679) || elementBox.text === String.fromCharCode(9675))) {\n fontFamily = '';\n }\n var fontSize = format.hasValue('fontSize') ? format.fontSize : breakCharacterFormat.fontSize;\n var baselineAlignment = format.hasValue('baselineAlignment') ? format.baselineAlignment : breakCharacterFormat.baselineAlignment;\n bold = format.hasValue('bold') ? format.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.hasValue('italic') ? format.italic ? 'italic' : '' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n var strikethrough = format.hasValue('strikethrough') ? format.strikethrough : breakCharacterFormat.strikethrough;\n var highlightColor = format.hasValue('highlightColor') ? format.highlightColor : breakCharacterFormat.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(highlightColor);\n }\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + fontFamily + '\"';\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n var text = elementBox.text;\n var isParaBidi = elementBox.paragraph.paragraphFormat.bidi;\n if (isParaBidi) {\n this.pageContext.direction = 'rtl';\n left += elementBox.width;\n }\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n if (isParaBidi) {\n this.pageContext.direction = 'ltr';\n left -= elementBox.width;\n }\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n Renderer.prototype.getDefaultFontColor = function (backColor) {\n if (HelperMethods.isVeryDark(backColor)) {\n return \"#FFFFFF\";\n }\n else {\n return \"#000000\";\n }\n };\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType && containerWidget instanceof TableCellWidget) {\n var width = (containerWidget.width + containerWidget.margin.left + containerWidget.margin.right) - containerWidget.leftBorderWidth;\n this.clipRect(containerWidget.x - containerWidget.margin.left, containerWidget.y, this.getScaledValue(width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n if (format.highlightColor !== 'NoColor') {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(format.highlightColor);\n }\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : format.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + format.fontFamily + '\"';\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n //this.pageContext.direction = 'ltr';\n var isRTL = format.bidi || this.documentHelper.textHelper.isRTLText(elementBox.text);\n text = this.documentHelper.textHelper.setText(text, isRTL, format.bdo, true);\n if (format.allCaps) {\n text = text.toUpperCase();\n }\n var characterRange = elementBox.characterRange;\n if (((characterRange == CharacterRangeType.WordSplit) ||\n (((characterRange & CharacterRangeType.WordSplit) == CharacterRangeType.WordSplit) &&\n ((characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft))) && format.bidi) {\n text = this.inverseCharacter(text);\n }\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), scaledWidth);\n if (((this.documentHelper.owner.isSpellCheck && !this.spellChecker.removeUnderline) && (this.documentHelper.triggerSpellCheck || elementBox.canTrigger) && elementBox.text !== ' ' && !this.documentHelper.isScrollHandler && (isNullOrUndefined(elementBox.previousNode) || !(elementBox.previousNode instanceof FieldElementBox))\n && (!this.documentHelper.selection.isSelectionInsideElement(elementBox) || this.documentHelper.triggerElementsOnLoading || this.documentHelper.owner.editor.triggerPageSpellCheck))) {\n elementBox.canTrigger = true;\n this.leftPosition = this.pageLeft;\n this.topPosition = this.pageTop;\n var errorDetails = this.spellChecker.checktextElementHasErrors(elementBox.text, elementBox, left);\n if (errorDetails.errorFound) {\n color = '#FF0000';\n var backgroundColor = (containerWidget instanceof TableCellWidget) ? containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n for (var i = 0; i < errorDetails.elements.length; i++) {\n var currentElement = errorDetails.elements[i];\n if (elementBox.ignoreOnceItems.indexOf(this.spellChecker.manageSpecialCharacters(currentElement.text, undefined, true)) === -1) {\n this.renderWavyLine(currentElement, (isNullOrUndefined(currentElement.start)) ? left : currentElement.start.location.x, (isNullOrUndefined(currentElement.start)) ? top : currentElement.start.location.y - elementBox.margin.top, underlineY, color, 'Single', format.baselineAlignment, backgroundColor);\n }\n }\n }\n else if (elementBox.ischangeDetected || this.documentHelper.triggerElementsOnLoading) {\n elementBox.ischangeDetected = false;\n this.handleChangeDetectedElements(elementBox, underlineY, left, top, format.baselineAlignment);\n }\n }\n var currentInfo = this.getRevisionType(revisionInfo, true);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Insertion' || currentInfo.type === 'MoveTo'))) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment, currentInfo);\n }\n currentInfo = this.getRevisionType(revisionInfo, false);\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Deletion' || currentInfo.type === 'MoveFrom'))) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment, currentInfo);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case String.fromCharCode(40):\n //Specify the ')'\n return String.fromCharCode(41);\n //Specify the ')'\n case String.fromCharCode(41):\n //Specify the '('\n return String.fromCharCode(40);\n //Specify the '<'\n case String.fromCharCode(60):\n //Specify the '>'\n return String.fromCharCode(62);\n //Specify the '>'\n case String.fromCharCode(62):\n //Specify the '<'\n return String.fromCharCode(60);\n //Specify the '{'\n case String.fromCharCode(123):\n //Specify the '}'\n return String.fromCharCode(125);\n //Specify the '}'\n case String.fromCharCode(125):\n //Specify the '{'\n return String.fromCharCode(123);\n //Specify the '['\n case String.fromCharCode(91):\n //Specify the ']'\n return String.fromCharCode(93);\n //Specify the ']'\n case String.fromCharCode(93):\n //Specify the '['\n return String.fromCharCode(91);\n default:\n return ch;\n }\n };\n Renderer.prototype.getBackgroundColorHeirachy = function (element) {\n var bgColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (element.paragraph.isInsideTable) {\n var cell = element.paragraph.containerWidget;\n bgColor = cell.cellFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n else {\n bgColor = cell.ownerTable.tableFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n }\n }\n else if (element.paragraph.containerWidget instanceof TextFrame\n && element.paragraph.containerWidget.containerShape.fillFormat.color === '#000000FF') {\n return element.paragraph.containerWidget.containerShape.fillFormat.color;\n }\n return this.documentHelper.backgroundColor;\n };\n Renderer.prototype.handleChangeDetectedElements = function (elementBox, underlineY, left, top, baselineAlignment) {\n var _this = this;\n var checkText = elementBox.text.trim();\n var beforeIndex = this.pageIndex;\n if (elementBox.text === '\\v') {\n return;\n }\n if (!this.spellChecker.checkElementCanBeCombined(elementBox, underlineY, beforeIndex, true)) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedText = checkText.split(/[\\s]+/);\n var markindex = elementBox.line.getOffset(elementBox, 0);\n var spaceValue = 1;\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText = splittedText[i];\n var retrievedText = this.spellChecker.manageSpecialCharacters(currentText, undefined, true);\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n this.handleUnorderedElements(retrievedText, elementBox, underlineY, i, markindex, i === splittedText.length - 1, beforeIndex);\n markindex += currentText.length + spaceValue;\n }\n }\n }\n else {\n var retrievedText = this.spellChecker.manageSpecialCharacters(checkText, undefined, true);\n if (checkText.length > 0) {\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n var indexInLine_1 = elementBox.indexInOwner;\n var indexinParagraph_1 = elementBox.line.paragraph.indexInOwner;\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(retrievedText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else {\n if (this.spellChecker.isInUniqueWords(retrievedText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(retrievedText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else if (!this.documentHelper.owner.editor.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, checkText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n var canUpdate = (beforeIndex === _this.pageIndex || elementBox.isVisible) && (indexInLine_1 === elementBox.indexInOwner) && (indexinParagraph_1 === elementBox.line.paragraph.indexInOwner);\n _this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, canUpdate);\n });\n }\n }\n }\n }\n }\n }\n };\n Renderer.prototype.handleUnorderedElements = function (currentText, elementBox, underlineY, iteration, markIndex, isLastItem, beforeIndex) {\n var _this = this;\n var indexInLine = elementBox.indexInOwner;\n var indexinParagraph = elementBox.line.paragraph.indexInOwner;\n if (currentText.length > 0) {\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(currentText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, true, underlineY, iteration, markIndex, isLastItem);\n }\n else {\n var canUpdate_1 = (elementBox.isVisible) && (indexInLine === elementBox.indexInOwner) && (indexinParagraph === elementBox.line.paragraph.indexInOwner);\n if (this.spellChecker.isInUniqueWords(currentText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(currentText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n }\n else if (!this.documentHelper.owner.editor.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, currentText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n _this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n });\n }\n }\n }\n };\n Renderer.prototype.renderWavyLine = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, backgroundColor) {\n if (elementBox.text.length > 1) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var frequencyRange = 0.5;\n var amplitudeRange = 1.0;\n var stepToCover = .7;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var specialCharacter = this.spellChecker.getSpecialCharactersInfo(elementBox.text, elementBox.characterFormat);\n var whiteSpaceData = this.spellChecker.getWhiteSpaceCharacterInfo(elementBox.text, elementBox.characterFormat);\n var x = left + specialCharacter.beginningWidth + ((whiteSpaceData.isBeginning) ? whiteSpaceData.width : 0) + elementBox.margin.left;\n var x1 = x * this.documentHelper.zoomFactor + this.leftPosition;\n var y1 = y * this.documentHelper.zoomFactor + this.topPosition;\n var x2 = x1 + this.getScaledValue(elementBox.width - (specialCharacter.beginningWidth + specialCharacter.endWidth) - whiteSpaceData.width);\n var startingPoint = new Point(x1, y1);\n var endingPoint = new Point(x2, y1);\n this.drawWavy(startingPoint, endingPoint, (x2 - x1) * frequencyRange, amplitudeRange, stepToCover, color, elementBox.height, backgroundColor);\n }\n };\n Renderer.prototype.drawWavy = function (from, to, frequency, amplitude, step, color, height, backColor, negative) {\n this.pageContext.save();\n this.pageContext.fillStyle = (!isNullOrUndefined(backColor) ? backColor : this.documentHelper.backgroundColor);\n this.pageContext.fillRect(from.x, from.y - amplitude, (to.x - from.x), amplitude * 3);\n this.pageContext.restore();\n this.pageContext.lineWidth = 1;\n this.pageContext.lineCap = 'round';\n this.pageContext.strokeStyle = color;\n this.pageContext.beginPath();\n //this.pageContext.save();\n var cx = 0;\n var cy = 0;\n var fx = from.x;\n var fy = from.y;\n var tx = to.x;\n var ty = to.y;\n var i = 0;\n var waveOffsetLength = 0;\n var ang = Math.atan2(ty - fy, tx - fx);\n var distance = Math.sqrt((fx - tx) * (fx - tx) + (fy - ty) * (fy - ty));\n var a = amplitude * 1;\n var f = Math.PI * frequency;\n for (i; i <= distance; i += step) {\n waveOffsetLength = Math.sin((i / distance) * f) * a;\n cx = from.x + Math.cos(ang) * i + Math.cos(ang - Math.PI / 2) * waveOffsetLength;\n cy = from.y + Math.sin(ang) * i + Math.sin(ang - Math.PI / 2) * waveOffsetLength;\n i > 0 ? this.pageContext.lineTo(cx, cy) : this.pageContext.moveTo(cx, cy);\n }\n this.pageContext.stroke();\n this.pageContext.restore();\n };\n /**\n * @private\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n textWidth = this.documentHelper.textHelper.getWidth(tabText, elementBox.characterFormat);\n var count = Math.floor(elementBox.width / textWidth);\n if (textWidth == 0) {\n count = 0;\n }\n for (var i = 0; i <= count; i++) {\n tabText += tabString;\n }\n return tabText.slice(0, -1);\n };\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n tabString = '_';\n break;\n }\n return tabString;\n };\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n var lineHeight = renderedHeight / 20;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n underline = (revisionInfo.type === 'MoveTo') ? 'Double' : 'Single';\n }\n if (underline === 'Double') {\n y -= lineHeight;\n }\n if (elementBox instanceof ImageElementBox) {\n underlineHeight = 0.9;\n }\n while (lineCount < (underline === 'Double' ? 2 : 1)) {\n lineCount++;\n var width = elementBox.width;\n if (elementBox instanceof TextElementBox && !(elementBox instanceof TabElementBox) && isNullOrUndefined(elementBox.nextNode)) {\n width = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(elementBox.text), elementBox.characterFormat);\n }\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(width), this.getScaledValue(underlineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n strikethrough = (revisionInfo.type === 'Deletion') ? 'SingleStrike' : 'DoubleStrike';\n }\n if (elementBox instanceof ImageElementBox) {\n lineHeight = 0.9;\n }\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(elementBox.width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n var containerWid = elementBox.line.paragraph.containerWidget;\n var isHeightType = false;\n if (containerWid instanceof TableCellWidget) {\n isHeightType = (containerWid.ownerRow.rowFormat.heightType === 'Exactly');\n }\n if (elementBox.textWrappingStyle === 'Inline') {\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n else if (isHeightType) {\n var width = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth;\n isClipped = true;\n this.clipRect(containerWid.x, containerWid.y, this.getScaledValue(width), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile && !isNullOrUndefined(elementBox.metaFileImageString)) {\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n else {\n try {\n if (!elementBox.isCrop) {\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), //dx\n this.getScaledValue(top + topMargin, 2), //dy\n this.getScaledValue(elementBox.width), //dw\n this.getScaledValue(elementBox.height)); //dh\n }\n else {\n this.pageContext.drawImage(elementBox.element, elementBox.cropX, //sx\n elementBox.cropY, //sy\n elementBox.cropWidth, //sw\n elementBox.cropHeight, //sh\n this.getScaledValue(left + leftMargin, 1), //dx\n this.getScaledValue(top + topMargin, 2), //dy\n this.getScaledValue(elementBox.width), //dw\n this.getScaledValue(elementBox.height)); //dh\n }\n }\n catch (e) {\n elementBox.imageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n }\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n var currentRevision = this.getRevisionType(revisionInfo, false);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Deletion' || currentRevision.type === 'MoveFrom')) {\n this.renderStrikeThrough(elementBox, left, top, 'SingleStrike', color, 'Normal', currentRevision);\n }\n currentRevision = this.getRevisionType(revisionInfo, true);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Insertion' || currentRevision.type === 'MoveTo')) {\n var y = this.getUnderlineYPosition(elementBox.line);\n this.renderUnderline(elementBox, left, top, y, color, 'Single', 'Normal');\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.documentHelper);\n var table = tableWidget;\n tableWidget.width = this.documentHelper.layout.getTableWidth(table);\n var border = !table.isBidiTable ? layout.getTableLeftBorder(table.tableFormat.borders)\n : layout.getTableRightBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth);\n // }\n border = !table.isBidiTable ? layout.getTableRightBorder(table.tableFormat.borders)\n : layout.getTableLeftBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth);\n // }\n };\n /* eslint-disable */\n Renderer.prototype.renderTableCellOutline = function (documentHelper, cellWidget) {\n var layout = documentHelper.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n var isBidiTable = cellWidget.ownerTable.isBidiTable;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n var border = !isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n this.renderCellBackground(height, cellWidget, cellLeftMargin, lineWidth);\n var leftBorderWidth = lineWidth;\n if (tableCell.index === 0 || tableCell.cellFormat.rowSpan === 1 || (tableCell.cellFormat.rowSpan > 1 && tableCell.columnIndex === 0)) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellTopMargin, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n else {\n for (var i = 0; i < tableCell.ownerTable.childWidgets.length; i++) {\n var row = tableCell.ownerTable.childWidgets[i];\n var cell = void 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var currentCell = row.childWidgets[j];\n if ((currentCell.columnIndex + currentCell.cellFormat.columnSpan - 1) === tableCell.columnIndex - 1) {\n cell = currentCell;\n break;\n }\n else if (row.childWidgets[j].columnIndex >= tableCell.columnIndex && row.childWidgets[j].previousWidget) {\n cell = row.childWidgets[j].previousWidget;\n break;\n }\n }\n if (cell && cell.columnIndex + cell.cellFormat.columnSpan - 1 === tableCell.columnIndex - 1) {\n var border_1 = !isBidiTable ? TableCellWidget.getCellRightBorder(cell) : TableCellWidget.getCellLeftBorder(cell);\n var lineWidthInt = border_1.lineWidth;\n if (cell.y + cell.height < tableCell.y) {\n continue;\n }\n else if (cell.y < tableCell.y && cell.y + cell.height > tableCell.y) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, tableCell.y - cellTopMargin, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt);\n }\n else if ((cell.y === tableCell.y) || (cell.y > tableCell.y && cell.y + cell.height < tableCell.y + tableCell.height)) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt);\n }\n else if (cell.y < tableCell.y + tableCell.height && cell.y + cell.height >= tableCell.y + tableCell.height) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cellBottomMargin, lineWidthInt);\n }\n else if (cell.y > tableCell.y + tableCell.height) {\n break;\n }\n }\n }\n }\n // }\n if (tableCell.updatedTopBorders && tableCell.updatedTopBorders.length > 1) {\n var cellX = cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2;\n var cellY = cellWidget.y - cellWidget.margin.top;\n for (var a = 0; a < tableCell.updatedTopBorders.length; a++) {\n var borderInfo = tableCell.updatedTopBorders[a];\n border = borderInfo.border;\n if (border.lineStyle !== 'None' && border.lineWidth < TableCellWidget.getCellTopBorder(tableCell).lineWidth) {\n border.lineWidth = TableCellWidget.getCellTopBorder(tableCell).lineWidth;\n }\n if (!isNullOrUndefined(border)) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellX, cellY + lineWidth / 2, cellX + borderInfo.width, cellY + lineWidth / 2, lineWidth);\n cellX = cellX + borderInfo.width;\n }\n }\n }\n else {\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n var width = 0;\n this.renderSingleBorder(border.color, cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right + width, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth);\n // }\n }\n var isLastCell = false;\n if (!isBidiTable) {\n isLastCell = tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1;\n }\n else {\n isLastCell = tableCell.cellIndex === 0;\n }\n var prevRowSpannedCells = tableCell.containerWidget.getPreviousRowSpannedCells();\n var isAffectedByRowSpan = false;\n for (var k = 0; k < prevRowSpannedCells.length; k++) {\n var spannedCell = prevRowSpannedCells[k];\n if (tableCell.rowIndex < spannedCell.rowIndex + spannedCell.cellFormat.rowSpan && tableCell.columnIndex < spannedCell.columnIndex) {\n isAffectedByRowSpan = true;\n break;\n }\n }\n if ((tableCell.ownerTable.tableFormat.cellSpacing > 0 || isLastCell) && (isBidiTable || tableCell.columnIndex + tableCell.cellFormat.columnSpan === tableCell.ownerTable.tableHolder.columns.length || !isAffectedByRowSpan)) {\n border = isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n var previousCellIndex = undefined;\n if (!isNullOrUndefined(nextRow)) {\n if (nextRow.lastChild) {\n var lastCellWidget = nextRow.lastChild;\n previousCellIndex = lastCellWidget.columnIndex + lastCellWidget.cellFormat.columnSpan;\n }\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan >= tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget || previousCellIndex && nextRow.childWidgets.length < tableCell.ownerRow.childWidgets.length\n && previousCellIndex < tableCell.columnIndex + tableCell.cellFormat.columnSpan) {\n var bottomBorder = tableCell.cellFormat.borders.bottom;\n if (!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'Cleared') {\n border = TableCellWidget.getCellBottomBorder(tableCell);\n }\n else {\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, tableCell.ownerRow.rowFormat.borders.bottom), tableCell.ownerTable.tableFormat.borders.bottom)\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n }\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n // }\n };\n Renderer.prototype.renderCellBackground = function (height, cellWidget, leftMargin, lineWidth) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n var left = cellWidget.x - leftMargin - lineWidth;\n var topMargin = cellWidget.topMargin ? HelperMethods.convertPointToPixel(cellWidget.topMargin) : 0;\n var top = cellWidget.y - topMargin;\n var width = cellWidget.width + leftMargin + cellWidget.margin.right - lineWidth;\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var revision = cellWidget.ownerRow.rowFormat.revisions[cellWidget.ownerRow.rowFormat.revisions.length - 1];\n bgColor = (revision.revisionType === 'Insertion') ? '#e1f2fa' : '#fce6f4';\n }\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = HelperMethods.getColor(bgColor);\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n //Render foreground color\n if (cellFormat.shading.hasValue('foregroundColor') && cellFormat.shading.textureStyle !== 'TextureNone') {\n this.pageContext.beginPath();\n if (cellFormat.shading.foregroundColor !== 'empty') {\n this.pageContext.fillStyle = this.drawTextureStyle(cellFormat.shading.textureStyle, HelperMethods.getColor(cellFormat.shading.foregroundColor), HelperMethods.getColor(cellFormat.shading.backgroundColor));\n //Width is increased twice since left and right line width is reduced in cell rendering which is required for background rendering.\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width + (lineWidth * 2)), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n }\n };\n Renderer.prototype.drawTextureStyle = function (textureStyle, foreColor, backColor) {\n if (textureStyle.indexOf('Percent') > -1) {\n var text = textureStyle.replace(\"Texture\", \"\").replace(\"Percent\", \"\").replace(\"Pt\", \".\");\n var percent = parseInt(text);\n return this.getForeColor(foreColor, backColor, percent);\n }\n if (textureStyle === 'TextureSolid') {\n return foreColor;\n }\n return '#FFFFFF';\n };\n Renderer.prototype.getForeColor = function (foreColor, backColor, percent) {\n var r = 0;\n var g = 0;\n var b = 0;\n var foreColorRgb = HelperMethods.convertHexToRgb(foreColor);\n var backColorRgb = HelperMethods.convertHexToRgb(backColor);\n r = this.getColorValue(foreColorRgb.r, backColorRgb.r, percent);\n g = this.getColorValue(foreColorRgb.g, backColorRgb.g, percent);\n b = this.getColorValue(foreColorRgb.b, backColorRgb.b, percent);\n return ('#' + HelperMethods.convertRgbToHex(r) + HelperMethods.convertRgbToHex(g) + HelperMethods.convertRgbToHex(b));\n };\n Renderer.prototype.getColorValue = function (foreColorValue, backColorValue, percent) {\n var colorValue = 0;\n if (percent == 100) {\n colorValue = foreColorValue;\n }\n else {\n colorValue = backColorValue + Math.round(foreColorValue * (percent / 100)) - Math.round(backColorValue * (percent / 100));\n }\n return colorValue;\n };\n Renderer.prototype.renderSingleBorder = function (color, startX, startY, endX, endY, lineWidth) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = HelperMethods.getColor(color);\n if (lineWidth > 0) {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.documentHelper.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n Renderer.prototype.checkRevisionType = function (elementBox) {\n var revisions = [];\n var count = elementBox.revisions.length;\n for (var i = 0; i < count; i++) {\n var currentRevision = elementBox.revisions[i];\n var color = this.documentHelper.authors.get(currentRevision.author);\n revisions.push({ 'type': currentRevision.revisionType, 'color': color });\n }\n return revisions;\n };\n Renderer.prototype.getRevisionColor = function (revisionInfo) {\n if (revisionInfo.length === 1) {\n return revisionInfo[0].color;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n if (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom') {\n return revisionInfo[i].color;\n }\n }\n return undefined;\n };\n Renderer.prototype.getRevisionType = function (revisionInfo, checkInsert) {\n if (revisionInfo.length === 0) {\n return undefined;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n var type = undefined;\n if (checkInsert && (revisionInfo[i].type === 'Insertion' || revisionInfo[i].type === 'MoveTo')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n if (!checkInsert && (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n }\n return undefined;\n };\n Renderer.prototype.getFormfieldInLine = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FieldElementBox && !isNullOrUndefined(line.children[i].formFieldData)) {\n return line.children[i];\n }\n }\n return undefined;\n };\n /**\n * Destroys the internal objects which is maintained.\n *\n * @returns {void}\n */\n Renderer.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CharacterRangeType } from '../../index';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(documentHelper) {\n this.paragraphMarkInfo = {};\n this.documentHelper = documentHelper;\n if (!isNullOrUndefined(documentHelper)) {\n this.context = documentHelper.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n TextHelper.prototype.getEnSpaceCharacter = function () {\n return String.fromCharCode(8194);\n };\n TextHelper.prototype.repeatChar = function (char, count) {\n var text = '';\n for (var i = 0; i < count; i++) {\n text += char;\n }\n return text;\n };\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getParagraphMarkSize(characterFormat).Width;\n };\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n var format = this.getFormatText(characterFormat);\n if (this.paragraphMarkInfo[format]) {\n return this.paragraphMarkInfo[format];\n }\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n var textSizeInfo = {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n return this.paragraphMarkInfo[format] = textSizeInfo;\n };\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n var isRTL = characterFormat.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, characterFormat.bdo);\n textTrimEndWidth = this.getWidth(text, characterFormat);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat);\n }\n elementBox.trimEndWidth = textTrimEndWidth;\n return textTrimEndWidth;\n };\n TextHelper.prototype.getHeight = function (characterFormat) {\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection\n var key = this.getFormatText(characterFormat);\n if (!isNullOrUndefined(this.documentHelper.heightInfoCollection[key])) {\n return this.documentHelper.heightInfoCollection[key];\n }\n var sizeInfo = this.documentHelper.owner.textMeasureHelper.getHeightInternal(characterFormat);\n this.documentHelper.heightInfoCollection[key] = sizeInfo;\n return sizeInfo;\n };\n TextHelper.prototype.getFormatText = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat);\n };\n TextHelper.prototype.getWidth = function (text, characterFormat) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = characterFormat.fontFamily;\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + fontFamily;\n if (characterFormat.allCaps) {\n text = text.toUpperCase();\n }\n return this.context.measureText(text).width;\n };\n TextHelper.prototype.setText = function (textToRender, isBidi, bdo, isRender) {\n if (isNullOrUndefined(isRender)) {\n isRender = false;\n }\n if (textToRender.length === 0) {\n return '';\n }\n var isRtlText = isBidi;\n if ((!isRtlText && (bdo === 'RTL')) || (isRtlText && (bdo === 'LTR'))) {\n textToRender = HelperMethods.reverseString(textToRender);\n }\n else if (isRender && isRtlText && HelperMethods.endsWith(textToRender)) {\n var spaceCount = textToRender.length - HelperMethods.trimEnd(textToRender).length;\n textToRender = HelperMethods.addSpace(spaceCount) + HelperMethods.trimEnd(textToRender);\n }\n return textToRender;\n };\n TextHelper.prototype.measureText = function (text, characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.hasValue('fontSize') ? listCharacterFormat.fontSize : breakCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.hasValue('fontFamily') ? listCharacterFormat.fontFamily : breakCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.hasValue('bold') ? listCharacterFormat.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.hasValue('italic') ? listCharacterFormat.italic ? 'italic' : ''\n : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n var isRTL = format.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, format.bdo);\n elementBox.width = this.getWidth(text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n };\n TextHelper.prototype.containsSpecialCharAlone = function (text) {\n /* eslint-disable */\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?,' + ' ' + \"'\";\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsNumberAlone = function (text) {\n /* eslint-disable */\n var number = '0123456789';\n if (text === '') {\n return false;\n }\n for (var i = 0; i < text.length; i++) {\n if (number.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsCombinationText = function (element) {\n /* eslint-disable */\n if (element.text.match(/^[0-9]+$/) && element.paragraph.bidi) {\n return true;\n }\n else {\n return false;\n }\n };\n TextHelper.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case '(':\n //Specify the ')'\n return ')';\n //Specify the ')'\n case ')':\n //Specify the '('\n return '(';\n //Specify the '<'\n case '<':\n //Specify the '>'\n return '>';\n //Specify the '>'\n case '>':\n //Specify the '<'\n return '<';\n //Specify the '{'\n case '{':\n //Specify the '}'\n return '}';\n //Specify the '}'\n case '}':\n //Specify the '{'\n return '{';\n //Specify the '['\n case '[':\n //Specify the ']'\n return ']';\n //Specify the ']'\n case ']':\n //Specify the '['\n return '[';\n default:\n return ch;\n }\n };\n TextHelper.prototype.containsSpecialChar = function (text) {\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?' + ' ';\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {boolean} - Returns true if given text it right to left.\n */\n TextHelper.prototype.isRTLText = function (text) {\n var isRTL = false;\n if (!isNullOrUndefined(text)) {\n for (var i = 0; i < text.length; i++) {\n var temp = text[i];\n if ((temp >= String.fromCharCode(1424) && temp <= String.fromCharCode(1535)) ////Script-Hebr, Hebrew characters https://en.wikipedia.org/wiki/Hebrew_alphabet#Unicode_and_HTML (https://en.wikipedia.org/wiki/Hebrew_(Unicode_block))\n || (temp >= String.fromCharCode(64285) && temp <= String.fromCharCode(64335)) //Script-Hebr, Hebrew Alphabetic Presentation Forms characters https://en.wikipedia.org/wiki/Alphabetic_Presentation_Forms \n || (temp >= String.fromCharCode(1536) && temp <= String.fromCharCode(1791)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(1872) && temp <= String.fromCharCode(1919)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(2208) && temp <= String.fromCharCode(2303)) //Arabic characters\n || (temp >= String.fromCharCode(64336) && temp <= String.fromCharCode(65023)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(65136) && temp <= String.fromCharCode(65279)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(43392) && temp <= String.fromCharCode(43487)) //Javanese characters\n || (temp >= String.fromCharCode(1792) && temp <= String.fromCharCode(1871)) //Syriac characters\n || (temp >= String.fromCharCode(1920) && temp <= String.fromCharCode(1983)) //Thaana characters\n || (temp >= String.fromCharCode(2112) && temp <= String.fromCharCode(2143)) //Mandiac characters\n || (temp >= String.fromCharCode(1984) && temp <= String.fromCharCode(2047)) //N'Ko characters\n || (temp >= String.fromCharCode(2048) && temp <= String.fromCharCode(2111)) //Samaritan characters\n //Tifinag characters \n || (temp >= String.fromCharCode(11568) && temp <= String.fromCharCode(11647))) {\n isRTL = true;\n break;\n }\n }\n }\n return isRTL;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {RtlInfo} - Returns the text info.\n */\n TextHelper.prototype.getRtlLanguage = function (text) {\n if (isNullOrUndefined(text) || text === '') {\n return { isRtl: false, id: 0 };\n }\n if (text >= String.fromCharCode(1424) && text <= String.fromCharCode(1535)) {\n return { isRtl: true, id: 1 };\n //Arabic - Urdu characters\n }\n else if ((text >= String.fromCharCode(1536) && text <= String.fromCharCode(1791))\n || (text >= String.fromCharCode(1872) && text <= String.fromCharCode(1919))\n || (text >= String.fromCharCode(2208) && text <= String.fromCharCode(2303))\n || (text >= String.fromCharCode(64336) && text <= String.fromCharCode(65023))\n || (text >= String.fromCharCode(65136) && text <= String.fromCharCode(65279))) {\n return { isRtl: true, id: 2 };\n }\n else if (text >= String.fromCharCode(43392) && text <= String.fromCharCode(43487)) {\n return { isRtl: true, id: 3 };\n }\n else if (text >= String.fromCharCode(1792) && text <= String.fromCharCode(1871)) {\n return { isRtl: true, id: 4 };\n }\n else if (text >= String.fromCharCode(1920) && text <= String.fromCharCode(1983)) {\n return { isRtl: true, id: 5 };\n }\n else if (text >= String.fromCharCode(2112) && text <= String.fromCharCode(2143)) {\n return { isRtl: true, id: 6 };\n }\n else if (text >= String.fromCharCode(1984) && text <= String.fromCharCode(2047)) {\n return { isRtl: true, id: 7 };\n }\n else if (text >= String.fromCharCode(2048) && text <= String.fromCharCode(2111)) {\n return { isRtl: true, id: 8 };\n }\n else if (text >= String.fromCharCode(11568) && text <= String.fromCharCode(11647)) {\n return { isRtl: true, id: 9 };\n }\n return { isRtl: false, id: 0 };\n };\n /**\n * @private\n */\n TextHelper.prototype.splitTextByConsecutiveLtrAndRtl = function (text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter) {\n var charTypeIndex = characterRangeTypes.length;\n var splittedText = [];\n if (isNullOrUndefined(text) || text === '') {\n return splittedText;\n }\n var lastLtrIndex = -1;\n var ltrText = '';\n var rtlText = '';\n var wordSplitChars = '';\n var numberText = '';\n for (var i = 0; i < text.length; i++) {\n var currentCharacterType = 0;\n var separateEachWordSplitChars = false;\n if ((isNullOrUndefined(isPrevLTRText) ? !isPrevLTRText : isTextBidi) && this.isNumber(text[i])) {\n numberText += text[i];\n currentCharacterType = 4;\n }\n else if (this.isWordSplitChar(text[i])) {\n currentCharacterType = 2;\n if (separateEachWordSplitChars = (isTextBidi || (text.charCodeAt(i) == 32 && wordSplitChars == ''))) {\n wordSplitChars += text[i];\n }\n else {\n wordSplitChars += text[i];\n }\n }\n else if (this.isRTLText(text[i]) && !this.isNumber(text[i])) {\n isPrevLTRText = false;\n hasRTLCharacter = true;\n rtlText += text[i];\n currentCharacterType = 1;\n }\n else {\n isPrevLTRText = true;\n ltrText += text[i];\n }\n if (numberText != '' && currentCharacterType != 4) {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n numberText = '';\n }\n if (rtlText != '' && currentCharacterType != 1) {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n rtlText = '';\n }\n if (ltrText != '' && currentCharacterType != 0) {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n ltrText = '';\n }\n if (wordSplitChars != '' && (currentCharacterType != 2 || separateEachWordSplitChars)) {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n wordSplitChars = '';\n }\n }\n if (numberText != '') {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n }\n else if (rtlText != '') {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else if (ltrText != '') {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n else if (wordSplitChars != '') {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n }\n if (hasRTLCharacter || (!isNullOrUndefined(isPrevLTRText) && !isPrevLTRText)) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)) \n //along with single in-between word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n //Else handled to combine consecutive number when text bidi is false and middle word split character is not white space.\n || this.isNumberNonReversingCharacter(splittedText[i], isTextBidi))\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n else if (lastLtrIndex != -1) {\n if (isTextBidi) {\n for (var i = 1; i < lastLtrIndex; i++) {\n //Combines the first and last LTR along with all in-between splited text's.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && i < lastLtrIndex\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight) {\n ltrText = '';\n for (var j = i + 1; j <= lastLtrIndex; j++) {\n ltrText += splittedText[j];\n splittedText.splice(j, 1);\n characterRangeTypes.splice(j + charTypeIndex, 1);\n j--;\n lastLtrIndex--;\n }\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + ltrText;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n lastLtrIndex--;\n }\n }\n }\n else {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n }\n else if (!isTextBidi) {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n if (isTextBidi) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)\n //or if it's lang attribute is represent a RTL language)\n //along with single in-between number non reversing word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n || this.isNumberNonReversingCharacter(splittedText[i], isTextBidi) || !isRTLLang)\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the Number along with single non-word split characters (% $ #).\n else if (charType == CharacterRangeType.WordSplit\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n && this.isNonWordSplitCharacter(splittedText[i]) && !isRTLLang) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the consecutive LTR and Number\n else if (charType == CharacterRangeType.LeftToRight\n && (characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n || characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight)) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n characterRangeTypes[i + charTypeIndex - 1] = CharacterRangeType.LeftToRight;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n return splittedText;\n };\n /**\n * @private\n */\n TextHelper.prototype.isRightToLeftLanguage = function (lang) {\n return (lang == 14337 || lang == 15361 || lang == 5121 || lang == 3073 || lang == 2049 ||\n lang == 11265 || lang == 13313 || lang == 12289 || lang == 4097 || lang == 8193 ||\n lang == 16385 || lang == 1025 || lang == 10241 || lang == 7169 || lang == 9217 || lang == 10655);\n };\n TextHelper.prototype.isNumber = function (ch) {\n if (!isNaN(parseInt(ch, 10))) {\n //This logic works for universal digits 0 to 9.\n return true;\n }\n else if (ch >= String.fromCharCode(1632) && ch <= String.fromCharCode(1641)) {\n //This logic works for ARABIC-INDIC DIGIT\n return true;\n }\n else if (ch >= String.fromCharCode(1776) && ch <= String.fromCharCode(1785)) {\n //This logic works for EXTENDED ARABIC-INDIC DIGIT\n return true;\n }\n else {\n //TODO: Extend this for language specific \n return false;\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.isWordSplitChar = function (character) {\n for (var i = 0; i < TextHelper.wordSplitCharacters.length; i++) {\n if (TextHelper.wordSplitCharacters[i] === character) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.prototype.isNumberNonReversingCharacter = function (character, isTextBidi) {\n for (var i = 0; i < TextHelper.numberNonReversingCharacters.length; i++) {\n var ch = TextHelper.numberNonReversingCharacters[i];\n if (character[0] == ch && (ch.charCodeAt(0) == 47 ? !isTextBidi : true)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.prototype.isNonWordSplitCharacter = function (character) {\n var isNonWordSplitChar = false;\n for (var i = 0; i < character.length; i++) {\n var charCode = character.charCodeAt(i);\n //Consider a (% $ #) as non-word split characters\n if (charCode == 35 || charCode == 36 || charCode == 37) {\n isNonWordSplitChar = true;\n }\n else {\n isNonWordSplitChar = false;\n break;\n }\n }\n return isNonWordSplitChar;\n };\n TextHelper.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.context = undefined;\n this.paragraphMarkInfo = {};\n this.paragraphMarkInfo = undefined;\n };\n TextHelper.wordSplitCharacters = [String.fromCharCode(32), String.fromCharCode(33), String.fromCharCode(34), String.fromCharCode(35), String.fromCharCode(36), String.fromCharCode(37), String.fromCharCode(38), String.fromCharCode(39), String.fromCharCode(40), String.fromCharCode(41), String.fromCharCode(42), String.fromCharCode(43), String.fromCharCode(44), String.fromCharCode(45), String.fromCharCode(46), String.fromCharCode(47), String.fromCharCode(58), String.fromCharCode(59), String.fromCharCode(60), String.fromCharCode(61), String.fromCharCode(62), String.fromCharCode(63), String.fromCharCode(64), String.fromCharCode(91), String.fromCharCode(92), String.fromCharCode(93), String.fromCharCode(94), String.fromCharCode(95), String.fromCharCode(96), String.fromCharCode(123), String.fromCharCode(124), String.fromCharCode(125), String.fromCharCode(126), String.fromCharCode(1548), String.fromCharCode(1563), String.fromCharCode(1567), String.fromCharCode(8216), String.fromCharCode(8217), String.fromCharCode(8221), String.fromCharCode(12288), String.fromCharCode(8207)];\n TextHelper.numberNonReversingCharacters = [String.fromCharCode(44), String.fromCharCode(46), String.fromCharCode(47), String.fromCharCode(58), String.fromCharCode(1548)];\n return TextHelper;\n}());\nexport { TextHelper };\n","import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(documentHelper) {\n var _this = this;\n /**\n * @private\n * @param {WheelEvent} event Specifies the mouse wheen event\n * @returns {void}\n */\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.documentHelper.viewerContainer.offsetLeft;\n if (pageX < _this.documentHelper.pageContainer.offsetWidth) {\n var isFirefFox = navigator.userAgent.match('Firefox');\n /* eslint-disable */\n var wheel = isFirefFox ? event.detail < 0 : (Browser.isIE ? event.wheelDelta > 0 : event.deltaY < 0);\n /* eslint-enable */\n var zoomFactor = _this.documentHelper.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n };\n this.documentHelper = documentHelper;\n }\n Zoom.prototype.setZoomFactor = function () {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n this.documentHelper.selection.updateCaretPosition();\n }\n this.documentHelper.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.documentHelper.owner.imageResizerModule)) {\n this.documentHelper.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.documentHelper.owner.fireZoomFactorChange();\n };\n Object.defineProperty(Zoom.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.documentHelper.zoomFactor > 5) {\n this.documentHelper.zoomFactor = 5;\n }\n else if (this.documentHelper.zoomFactor < 0.1) {\n this.documentHelper.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n this.documentHelper.clearContent();\n viewer.handleZoom();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n Zoom.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar AddUserDialog = /** @class */ (function () {\n function AddUserDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n var localObj = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n localObj.setLocale(_this.documentHelper.owner.locale);\n if (!_this.target) {\n _this.initUserDialog(localObj, _this.documentHelper.owner.enableRtl);\n }\n _this.documentHelper.dialog.header = localObj.getConstant('Add Users');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.beforeOpen = _this.loadUserDetails;\n _this.documentHelper.dialog.close = _this.documentHelper.updateFocus;\n _this.documentHelper.dialog.buttons = [\n {\n click: _this.okButtonClick,\n buttonModel: {\n content: localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true\n }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }, {\n click: _this.deleteButtonClick,\n buttonModel: { content: localObj.getConstant('Delete'), cssClass: 'e-flat e-user-delete' }\n }\n ];\n _this.documentHelper.dialog.dataBind();\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadUserDetails = function () {\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n _this.documentHelper.restrictEditingPane.addedUser.dataSource = _this.documentHelper.userCollection.slice();\n _this.documentHelper.restrictEditingPane.addedUser.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n _this.documentHelper.restrictEditingPane.isAddUser = true;\n _this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n _this.documentHelper.restrictEditingPane.addUserCollection();\n _this.documentHelper.restrictEditingPane.isAddUser = false;\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.textBoxInput.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.addButton.disabled = _this.textBoxInput.value === '';\n };\n /**\n * @returns {void}\n */\n this.addButtonClick = function () {\n if (_this.validateUserName(_this.textBoxInput.value)) {\n if (_this.documentHelper.userCollection.indexOf(_this.textBoxInput.value) === -1) {\n _this.documentHelper.userCollection.push(_this.textBoxInput.value);\n }\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n _this.textBoxInput.value = '';\n }\n else {\n DialogUtility.alert('Invalid user name');\n }\n };\n /**\n * @returns {void}\n */\n this.deleteButtonClick = function () {\n var index = _this.documentHelper.userCollection.indexOf(_this.userList.getSelectedItems().text);\n if (index > -1) {\n _this.documentHelper.userCollection.splice(index, 1);\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n }\n };\n this.documentHelper = documentHelper;\n }\n AddUserDialog.prototype.initUserDialog = function (localValue, isRtl) {\n //const id: string = this.documentHelper.owner.containerId + '_addUser';\n this.target = createElement('div', { className: 'e-de-user-dlg' });\n var headerValue = localValue.getConstant('Enter User');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-de-user-dlg-common' });\n this.target.appendChild(commonDiv);\n var adduserDiv = createElement('div', { className: 'e-de-user-dlg-list' });\n commonDiv.appendChild(adduserDiv);\n if (isRtl) {\n adduserDiv.classList.add('e-de-rtl');\n }\n // const textBoxDiv: HTMLElement = createElement('div', { className: 'e-de-dlg-container' });\n // adduserDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-de-user-dlg-textbox-input', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n adduserDiv.appendChild(this.textBoxInput);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'),\n attrs: { type: 'button' }\n });\n adduserDiv.appendChild(addButtonElement);\n addButtonElement.addEventListener('click', this.addButtonClick);\n this.addButton = new Button({ cssClass: 'e-de-user-add-btn' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.addButton.addEventListener('click', this.addButtonClick);\n var userCollectionDiv = createElement('div');\n commonDiv.appendChild(userCollectionDiv);\n var userDiv = createElement('div', { innerHTML: localValue.getConstant('Users'), className: 'e-de-user-dlg-user' });\n userCollectionDiv.appendChild(userDiv);\n var listviewDiv = createElement('div');\n userCollectionDiv.appendChild(listviewDiv);\n this.userList = new ListView({\n cssClass: 'e-de-user-listview'\n });\n this.userList.appendTo(listviewDiv);\n };\n AddUserDialog.prototype.validateUserName = function (value) {\n if (value.indexOf('@') === -1) {\n return false;\n }\n else {\n var parts = value.split('@');\n var domain = parts[1];\n if (domain.indexOf('.') === -1) {\n return false;\n }\n else {\n var domainParts = domain.split('.');\n var ext = domainParts[1];\n if (domainParts.length > 2) {\n return false;\n }\n if (ext.length > 4 || ext.length < 2) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n AddUserDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return AddUserDialog;\n}());\nexport { AddUserDialog };\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * @private\n */\nvar EnforceProtectionDialog = /** @class */ (function () {\n function EnforceProtectionDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localeValue = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localeValue.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localeValue);\n }\n _this.documentHelper.dialog.header = _this.localeValue.getConstant('Start Enforcing Protection');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localeValue.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localeValue.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n if (_this.passwordTextBox.value !== _this.confirmPasswordTextBox.value) {\n DialogUtility.alert(_this.localeValue.getConstant('Password Mismatch'));\n }\n else {\n _this.password = _this.passwordTextBox.value;\n _this.viewer.owner.editor.addProtection(_this.password, _this.owner.protectionType);\n }\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(EnforceProtectionDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EnforceProtectionDialog.prototype.initDialog = function (localValue) {\n //const instance: EnforceProtectionDialog = this;\n //const id: string = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { className: 'e-de-enforce' });\n var passwordContainer = createElement('div', { className: 'e-de-container-row' });\n //const newPassWord: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Enter new password') });\n this.passwordTextBox = createElement('input', { attrs: { type: 'password', autofocus: 'true' }, className: 'e-input' });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n //container.appendChild(newPassWord);\n passwordContainer.appendChild(this.passwordTextBox);\n var confirmPasswordcontainer = createElement('div');\n //const confirmPassword: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Reenter new password to confirm') }) as HTMLDivElement;\n this.confirmPasswordTextBox = createElement('input', { attrs: { type: 'password' }, className: 'e-input' });\n //container.appendChild(confirmPassword);\n confirmPasswordcontainer.appendChild(this.confirmPasswordTextBox);\n this.target.appendChild(passwordContainer);\n this.target.appendChild(confirmPasswordcontainer);\n new TextBox({ placeholder: localValue.getConstant('Enter new password'), floatLabelType: 'Always', cssClass: 'e-de-enforce-dlg-input' }, this.passwordTextBox);\n new TextBox({ placeholder: localValue.getConstant('Reenter new password to confirm'), floatLabelType: 'Always' }, this.confirmPasswordTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n EnforceProtectionDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return EnforceProtectionDialog;\n}());\nexport { EnforceProtectionDialog };\n/**\n * @private\n */\nvar UnProtectDocumentDialog = /** @class */ (function () {\n function UnProtectDocumentDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localObj = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localObj.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localObj);\n }\n _this.documentHelper.dialog.header = 'Unprotect Document';\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.documentHelper.dialog.dataBind();\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n var password = _this.passwordTextBox.value;\n if (password === '') {\n DialogUtility.alert(_this.localObj.getConstant('The password is incorrect'));\n return;\n }\n _this.viewer.owner.editor.stopProtection(password);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(UnProtectDocumentDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n UnProtectDocumentDialog.prototype.initDialog = function (localValue) {\n //const instance: UnProtectDocumentDialog = this;\n var id = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { id: id, className: 'e-de-enforce' });\n var container = createElement('div');\n var newPassWord = createElement('div', {\n className: 'e-de-unprotect-dlg-title',\n innerHTML: localValue.getConstant('Password')\n });\n this.passwordTextBox = createElement('input', {\n attrs: { type: 'password' },\n id: this.viewer.owner.containerId + '_display_text', className: 'e-input e-de-enforce-dlg-input'\n });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(newPassWord);\n container.appendChild(this.passwordTextBox);\n this.target.appendChild(container);\n };\n /**\n * @private\n * @returns {void}\n */\n UnProtectDocumentDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return UnProtectDocumentDialog;\n}());\nexport { UnProtectDocumentDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { AddUserDialog } from './add-user-dialog';\nimport { EnforceProtectionDialog, UnProtectDocumentDialog } from './enforce-protection-dialog';\nimport { Base64 } from '../editor/editor-helper';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * @private\n */\nvar RestrictEditing = /** @class */ (function () {\n function RestrictEditing(documentHelper) {\n var _this = this;\n this.addRemove = true;\n this.protectionType = 'ReadOnly';\n this.previousProtectionType = 'Read only';\n this.isShowRestrictPane = false;\n this.isAddUser = false;\n this.usersCollection = ['Everyone'];\n /**\n * @returns {void}\n */\n this.closePane = function () {\n _this.restrictPane.style.display = 'none';\n _this.documentHelper.updateViewerSize();\n };\n this.onYesButtonClick = function () {\n _this.viewer.owner.editor.removeAllEditRestrictions();\n _this.documentHelper.dialog.hide();\n };\n this.onCancelButtonClick = function (args) {\n _this.protectionTypeDrop.value = _this.previousProtectionType;\n _this.documentHelper.dialog.hide();\n };\n this.onNoButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @returns {void}\n */\n this.showAllRegion = function () {\n _this.documentHelper.selection.showAllEditingRegion();\n };\n this.documentHelper = documentHelper;\n this.addUserDialog = new AddUserDialog(documentHelper);\n this.enforceProtectionDialog = new EnforceProtectionDialog(documentHelper, this);\n this.unProtectDialog = new UnProtectDocumentDialog(documentHelper, this);\n this.base64 = new Base64();\n }\n Object.defineProperty(RestrictEditing.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n RestrictEditing.prototype.showHideRestrictPane = function (isShow) {\n if (!this.restrictPane) {\n this.localObj = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localObj.setLocale(this.viewer.owner.locale);\n this.initPane(this.localObj, this.documentHelper.owner.enableRtl);\n }\n if (isShow) {\n this.restrictPane.style.display = 'block';\n this.isShowRestrictPane = true;\n this.documentHelper.selection.isHighlightEditRegion = true;\n this.wireEvents();\n this.documentHelper.updateViewerSize();\n this.loadPaneValue();\n }\n else {\n this.closePane();\n this.documentHelper.updateFocus();\n }\n };\n RestrictEditing.prototype.initPane = function (localValue, isRtl) {\n this.restrictPane = createElement('div', { className: 'e-de-restrict-pane' });\n if (isRtl) {\n this.restrictPane.classList.add('e-rtl');\n }\n var headerWholeDiv = createElement('div', { className: 'e-de-rp-whole-header' });\n var headerDiv1 = createElement('div', {\n innerHTML: localValue.getConstant('Restrict Editing'), className: 'e-de-rp-header'\n });\n this.closeButton = createElement('button', {\n className: 'e-de-rp-close-icon e-de-close-icon e-btn e-flat e-icon-btn',\n attrs: { type: 'button' }\n });\n headerWholeDiv.appendChild(this.closeButton);\n headerWholeDiv.appendChild(headerDiv1);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.restrictPane.appendChild(headerWholeDiv);\n this.initRestrictEditingPane(localValue);\n this.documentHelper.optionsPaneContainer.setAttribute('style', 'display:inline-flex;');\n this.documentHelper.optionsPaneContainer.insertBefore(this.restrictPane, this.documentHelper.viewerContainer);\n };\n /* eslint-disable */\n RestrictEditing.prototype.initRestrictEditingPane = function (localObj) {\n this.restrictPaneWholeDiv = createElement('div');\n var formatWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var formatDiv = createElement('div', {\n innerHTML: localObj.getConstant('Formatting restrictions'),\n className: 'e-de-rp-format'\n });\n formatWholeDiv.appendChild(formatDiv);\n var allowFormatting = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n formatWholeDiv.appendChild(allowFormatting);\n this.allowFormat = this.createCheckBox(localObj.getConstant('Allow formatting'), allowFormatting);\n this.restrictPaneWholeDiv.appendChild(formatWholeDiv);\n // Editing restrictions\n var editRestrictWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n // let editRestrict: HTMLElement = createElement('div', {\n // innerHTML: localObj.getConstant('Editing restrictions'),\n // className: 'e-de-rp-format'\n // });\n // editRestrictWholeDiv.appendChild(editRestrict);\n var readOnly = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n var protectionTypeInput = createElement('input', {\n className: 'e-prop-font-style'\n });\n editRestrictWholeDiv.appendChild(protectionTypeInput);\n var protectionTypeValue = [\n { Value: 'Read only', Name: localObj.getConstant('Read only') },\n { Value: 'Filling in forms', Name: localObj.getConstant('Filling in forms') },\n { Value: 'Comments', Name: localObj.getConstant('Comments') },\n { Value: 'Tracked changes', Name: localObj.getConstant('Tracked changes') }\n ];\n this.protectionTypeDrop = new DropDownList({\n dataSource: protectionTypeValue,\n cssClass: 'e-de-prop-dropdown',\n floatLabelType: 'Always',\n placeholder: localObj.getConstant('Editing restrictions'),\n fields: { text: 'Name', value: 'Value' },\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.protectionTypeDrop.value = 'Read only';\n this.protectionTypeDrop.appendTo(protectionTypeInput);\n // let allowPrint: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowPrint'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowPrint);\n // this.allowPrint = this.createCheckBox('Allow Printing', allowPrint);\n // let allowCopy: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowCopy'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowCopy);\n // this.allowCopy = this.createCheckBox('Allow Copy', allowCopy);\n this.restrictPaneWholeDiv.appendChild(editRestrictWholeDiv);\n // User Permissions\n this.userWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var userDiv = createElement('div', {\n innerHTML: localObj.getConstant('Exceptions Optional'),\n className: 'e-de-rp-format'\n });\n this.userWholeDiv.appendChild(userDiv);\n var subContentDiv = createElement('div', {\n innerHTML: localObj.getConstant('Select Part Of Document And User'),\n className: 'e-de-rp-sub-content-div'\n });\n this.userWholeDiv.appendChild(subContentDiv);\n var emptyuserDiv = createElement('div', { className: 'e-de-rp-user' });\n this.userWholeDiv.appendChild(emptyuserDiv);\n this.addedUser = new ListView({\n cssClass: 'e-de-user-listView',\n dataSource: [{ text: 'Everyone' }],\n showCheckBox: true,\n select: this.selectHandler.bind(this),\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.addedUser.appendTo(emptyuserDiv);\n this.addUser = createElement('button', {\n className: 'e-btn e-primary e-flat e-de-rp-mu-btn',\n innerHTML: localObj.getConstant('More users') + '...',\n //styles: 'margin-top: 3px',\n attrs: { type: 'button' }\n });\n this.userWholeDiv.appendChild(this.addUser);\n this.restrictPaneWholeDiv.appendChild(this.userWholeDiv);\n var lastDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.restrictPaneWholeDiv.appendChild(lastDiv);\n this.enforceProtection = createElement('button', {\n innerHTML: localObj.getConstant('Enforcing Protection'),\n className: 'e-btn e-de-rp-btn-enforce',\n attrs: { type: 'button' }\n });\n lastDiv.appendChild(this.enforceProtection);\n this.restrictPane.appendChild(this.restrictPaneWholeDiv);\n this.stopProtectionDiv = createElement('div', { styles: 'display:none' });\n var headerDiv = createElement('div', { innerHTML: localObj.getConstant('Your permissions'), className: 'e-de-rp-stop-div1' });\n this.stopProtectionDiv.appendChild(headerDiv);\n var contentWholeDiv = createElement('div', { className: 'e-de-rp-stop-div2' });\n this.stopProtectionDiv.appendChild(contentWholeDiv);\n var content1 = localObj.getConstant('Protected Document');\n this.contentDiv1 = createElement('div', { innerHTML: content1 });\n contentWholeDiv.appendChild(this.contentDiv1);\n var content2 = localObj.getConstant('ReadOnlyProtection');\n this.contentDiv2 = createElement('div', { innerHTML: content2 });\n contentWholeDiv.appendChild(this.contentDiv2);\n this.stopReadOnlyOptions = createElement('div');\n this.stopProtectionDiv.appendChild(this.stopReadOnlyOptions);\n var navigateNext = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var navigateNextButton = createElement('button', {\n innerHTML: localObj.getConstant('Find Next Region I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n navigateNext.appendChild(navigateNextButton);\n navigateNextButton.addEventListener('click', this.navigateNextRegion.bind(this));\n this.stopReadOnlyOptions.appendChild(navigateNext);\n var showAllRegion = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var showAllRegionButton = createElement('button', {\n innerHTML: localObj.getConstant('Show All Regions I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n showAllRegion.appendChild(showAllRegionButton);\n showAllRegionButton.addEventListener('click', this.showAllRegion);\n this.stopReadOnlyOptions.appendChild(showAllRegion);\n var highlightRegion = createElement('div', { className: 'e-de-rp-nav-lbl e-de-rp-more-less' });\n var highlightRegionInput = createElement('input', { attrs: { type: 'checkbox' }, className: 'e-btn e-de-rp-nav-btn' });\n highlightRegion.appendChild(highlightRegionInput);\n this.stopReadOnlyOptions.appendChild(highlightRegion);\n this.highlightCheckBox = new CheckBox({ label: localObj.getConstant('Highlight the regions I can edit'), enableRtl: this.documentHelper.owner.enableRtl }, highlightRegionInput);\n var lastButtonDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.stopProtection = createElement('button', {\n innerHTML: localObj.getConstant('Stop Protection'),\n className: 'e-btn e-de-rp-btn-stop-enforce',\n attrs: { type: 'button' }\n });\n lastButtonDiv.appendChild(this.stopProtection);\n this.stopProtectionDiv.appendChild(lastButtonDiv);\n this.restrictPane.appendChild(this.stopProtectionDiv);\n };\n RestrictEditing.prototype.showStopProtectionPane = function (show) {\n if (show) {\n this.stopProtectionDiv.style.display = 'block';\n this.restrictPaneWholeDiv.style.display = 'none';\n }\n else {\n this.stopProtectionDiv.style.display = 'none';\n this.restrictPaneWholeDiv.style.display = 'block';\n }\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n case 'CommentsOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n default:\n this.stopReadOnlyOptions.style.display = 'none';\n break;\n }\n };\n RestrictEditing.prototype.wireEvents = function () {\n this.addUser.addEventListener('click', this.addUserDialog.show);\n this.enforceProtection.addEventListener('click', this.protectDocument.bind(this));\n this.stopProtection.addEventListener('click', this.stopProtectionTriggered.bind(this));\n this.closeButton.addEventListener('click', this.closePane);\n this.allowFormat.addEventListener('change', this.enableFormatting.bind(this));\n this.protectionTypeDrop.addEventListener('change', this.protectionTypeDropChanges.bind(this));\n this.highlightCheckBox.addEventListener('change', this.highlightClicked.bind(this));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.enableFormatting = function (args) {\n this.documentHelper.restrictFormatting = !args.checked;\n };\n RestrictEditing.prototype.stopProtectionTriggered = function (args) {\n if ((isNullOrUndefined(this.documentHelper.saltValue) || this.documentHelper.saltValue === '')\n && (isNullOrUndefined(this.documentHelper.hashValue) || this.documentHelper.hashValue === '')) {\n this.documentHelper.owner.editor.unProtectDocument();\n return;\n }\n this.unProtectDialog.show();\n };\n RestrictEditing.prototype.protectionTypeDropChanges = function (args) {\n switch (args.value) {\n case 'Read only':\n this.protectionType = 'ReadOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('ReadOnlyProtection');\n //this.contentDiv2.style.display = 'block'; \n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Filling in forms':\n this.protectionType = 'FormFieldsOnly';\n this.userWholeDiv.style.display = 'none';\n //this.enforceProtection.style.marginLeft = '8px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('FormFieldsOnly');\n //this.contentDiv2.style.display = 'block';\n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Comments':\n this.protectionType = 'CommentsOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('CommentsOnly');\n //this.contentDiv2.style.display = 'none';\n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Tracked changes':\n this.protectionType = 'RevisionsOnly';\n this.userWholeDiv.style.display = 'none';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('TrackChangesOnly');\n this.previousProtectionType = args.previousItemData.Value;\n if (this.documentHelper.selection && this.documentHelper.editRanges.length > 0) {\n this.documentHelper.dialog.height = ' Auto';\n this.documentHelper.dialog.width = ' 600px';\n this.documentHelper.dialog.header = this.localObj.getConstant('Information');\n this.documentHelper.dialog.content = this.localObj.getConstant('RemovedIgnoreExceptions') + '
      ' + '
      ' + this.localObj.getConstant('RemovedIgnore');\n this.documentHelper.dialog.buttons = [{\n click: this.onYesButtonClick,\n buttonModel: { content: this.localObj.getConstant('Yes') }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel') }\n },\n {\n click: this.onNoButtonClick,\n buttonModel: { content: this.localObj.getConstant('No') }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n }\n break;\n default:\n this.protectionType = 'NoProtection';\n this.addedUser.uncheckAllItems();\n this.viewer.owner.editor.removeAllEditRestrictions();\n break;\n }\n };\n RestrictEditing.prototype.selectHandler = function (args) {\n if (args.isChecked) {\n this.viewer.owner.editor.insertEditRangeElement(args.text);\n args.event.target.classList.add('e-check');\n }\n else {\n this.viewer.owner.editor.removeUserRestrictions(args.text);\n }\n };\n RestrictEditing.prototype.highlightClicked = function (args) {\n this.documentHelper.selection.isHighlightEditRegion = args.checked;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.protectDocument = function () {\n this.enforceProtectionDialog.show();\n };\n RestrictEditing.prototype.createCheckBox = function (label, element) {\n var checkBox = new CheckBox({ label: label, enableRtl: this.documentHelper.owner.enableRtl });\n checkBox.appendTo(element);\n return checkBox;\n };\n RestrictEditing.prototype.loadPaneValue = function () {\n // if (!this.isAddUser) {\n // this.protectionType = this.documentHelper.protectionType;\n // }\n this.allowFormat.checked = !this.documentHelper.restrictFormatting;\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.protectionTypeDrop.value = 'Read only';\n break;\n case 'FormFieldsOnly':\n this.protectionTypeDrop.value = 'Filling in forms';\n break;\n case 'CommentsOnly':\n this.protectionTypeDrop.value = 'Comments';\n break;\n case 'RevisionsOnly':\n this.protectionTypeDrop.value = 'Tracked changes';\n break;\n }\n this.highlightCheckBox.checked = true;\n this.addedUser.enablePersistence = true;\n this.addedUser.dataSource = this.usersCollection.slice();\n this.addedUser.dataBind();\n this.showStopProtectionPane(this.documentHelper.isDocumentProtected);\n };\n RestrictEditing.prototype.navigateNextRegion = function () {\n this.documentHelper.selection.navigateToNextEditingRegion();\n };\n RestrictEditing.prototype.addUserCollection = function () {\n if (this.documentHelper.selection && this.documentHelper.selection.editRangeCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.selection.editRangeCollection.length; i++) {\n var editStart = this.documentHelper.selection.editRangeCollection[i];\n if (editStart.user !== '' && this.usersCollection.indexOf(editStart.user) === -1) {\n this.usersCollection.push(editStart.user);\n }\n if (editStart.group !== '' && this.usersCollection.indexOf(editStart.group) === -1) {\n this.usersCollection.push(editStart.group);\n }\n }\n }\n this.addedUser.dataSource = this.documentHelper.userCollection.slice();\n this.addedUser.dataBind();\n };\n RestrictEditing.prototype.updateUserInformation = function () {\n this.addedUser.uncheckAllItems();\n if (this.documentHelper.selection.checkSelectionIsAtEditRegion) {\n var editRange = this.documentHelper.selection.getEditRangeStartElement();\n if (editRange) {\n var index = this.addedUser.dataSource.indexOf(editRange.user);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n index = this.addedUser.dataSource.indexOf(editRange.group);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n RestrictEditing.prototype.destroy = function () {\n if (this.addUserDialog) {\n this.addUserDialog.destroy();\n }\n this.addUserDialog = undefined;\n if (this.enforceProtectionDialog) {\n this.enforceProtectionDialog.destroy();\n }\n this.enforceProtectionDialog = undefined;\n if (this.unProtectDialog) {\n this.unProtectDialog.destroy();\n }\n this.unProtectDialog = undefined;\n if (this.base64) {\n this.base64.destroy();\n }\n this.base64 = undefined;\n this.documentHelper = undefined;\n };\n return RestrictEditing;\n}());\nexport { RestrictEditing };\n","import { createElement, isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextFormField, DropDownFormField, CheckBoxFormField } from '../viewer/page';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { afterFormFieldFillEvent } from '../../base/index';\n/**\n * @private\n */\nvar FormFieldPopUp = /** @class */ (function () {\n /**\n * @param {DocumentEditor} owner - Specifies the document editor.\n * @private\n */\n function FormFieldPopUp(owner) {\n var _this = this;\n /**\n * @returns {void}\n */\n this.applyTextFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.textBoxInstance.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyNumberFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.numberInput.value.toString());\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyDateFormFieldValue = function () {\n if (!isNullOrUndefined(_this.datePickerInstance.value)) {\n _this.owner.editor.updateFormField(_this.formField, _this.dateInput.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n }\n };\n /**\n * @returns {void}\n */\n this.applyDropDownFormFieldValue = function () {\n _this.owner.editor.updateFormField(_this.formField, _this.ddlInstance.index);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.formFieldData.selectedIndex, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @param {ChangedEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.enableDisableDatePickerOkButton = function (args) {\n if (args.isInteracted) {\n _this.dataPickerOkButton.disabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeButton = function () {\n var field = _this.formField;\n _this.hidePopup();\n var eventArgs = { 'fieldName': field.formFieldData.name };\n if (field.formFieldData instanceof TextFormField) {\n eventArgs.value = field.resultText;\n }\n else if (field.formFieldData instanceof CheckBoxFormField) {\n eventArgs.value = field.formFieldData.checked;\n }\n else {\n eventArgs.value = field.formFieldData.selectedIndex;\n }\n eventArgs.isCanceled = true;\n _this.owner.trigger(afterFormFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hidePopup = function () {\n _this.owner.documentHelper.isFormFilling = false;\n _this.formField = undefined;\n if (_this.target) {\n _this.target.style.display = 'none';\n }\n if (_this.popupObject) {\n _this.popupObject.hide();\n _this.popupObject.destroy();\n _this.popupObject = undefined;\n }\n };\n this.owner = owner;\n }\n FormFieldPopUp.prototype.initPopup = function () {\n var popupElement = createElement('div', { className: 'e-de-form-popup' });\n this.textBoxContainer = this.initTextBoxInput();\n popupElement.appendChild(this.textBoxContainer);\n popupElement.appendChild(this.initNumericTextBox());\n popupElement.appendChild(this.initDatePicker());\n popupElement.appendChild(this.initDropDownList());\n this.target = popupElement;\n this.owner.documentHelper.viewerContainer.appendChild(popupElement);\n };\n FormFieldPopUp.prototype.initTextBoxInput = function () {\n var textBoxDiv = createElement('div', { className: 'e-de-txt-field' });\n var textBoxInput = createElement('input', { className: 'e-de-txt-form' });\n var textBox = new TextBox();\n this.textBoxInput = textBoxInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyTextFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n textBoxDiv.appendChild(textBoxInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n textBoxDiv.appendChild(textBoxButtonDiv);\n textBox.appendTo(textBoxInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.textBoxInstance = textBox;\n return textBoxDiv;\n };\n FormFieldPopUp.prototype.initNumericTextBox = function () {\n var numericDiv = createElement('div', { className: 'e-de-num-field' });\n var numberInput = createElement('input', { className: 'e-de-txt-form' });\n var numericTextBox = new NumericTextBox();\n this.numberInput = numberInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyNumberFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n numericDiv.appendChild(numberInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n numericDiv.appendChild(textBoxButtonDiv);\n numericTextBox.appendTo(numberInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.numericTextBoxInstance = numericTextBox;\n return numericDiv;\n };\n FormFieldPopUp.prototype.initDatePicker = function () {\n var dateDiv = createElement('div', { className: 'e-de-date-field' });\n var dateInput = createElement('input', { className: 'e-de-txt-form' });\n /* eslint-disable-next-line max-len */\n var datePicker = new DateTimePicker({ strictMode: true, change: this.enableDisableDatePickerOkButton });\n this.dateInput = dateInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDateFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dateDiv.appendChild(dateInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dateDiv.appendChild(textBoxButtonDiv);\n datePicker.appendTo(dateInput);\n this.dataPickerOkButton = new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.datePickerInstance = datePicker;\n return dateDiv;\n };\n FormFieldPopUp.prototype.initDropDownList = function () {\n var dropDownDiv = createElement('div', { className: 'e-de-ddl-field' });\n var dropDownInput = createElement('input', { className: 'e-de-txt-form' });\n var ddl = new DropDownList();\n this.dropDownInput = dropDownInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDropDownFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dropDownDiv.appendChild(dropDownInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dropDownDiv.appendChild(textBoxButtonDiv);\n ddl.appendTo(dropDownInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.ddlInstance = ddl;\n return dropDownDiv;\n };\n /**\n * @private\n * @param {FieldElementBox} formField - Specifies the field element.\n * @returns {void}\n */\n FormFieldPopUp.prototype.showPopUp = function (formField) {\n var _this = this;\n if (formField) {\n this.formField = formField;\n this.owner.selection.selectField();\n if (isNullOrUndefined(this.target)) {\n this.initPopup();\n }\n classList(this.target, [], ['e-de-txt-form', 'e-de-num-form', 'e-de-date-form', 'e-de-ddl-form']);\n var formFieldData = formField.formFieldData;\n if (formFieldData) {\n if (formFieldData instanceof TextFormField) {\n var resultText = formField.resultText;\n var rex = new RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n var maxLength = formFieldData.maxLength;\n var formFieldType = formFieldData.type;\n var inputElement_1;\n resultText = resultText ? resultText : '';\n if (formFieldType === 'Text') {\n classList(this.target, ['e-de-txt-form'], []);\n inputElement_1 = this.textBoxInput;\n this.textBoxInstance.value = resultText;\n }\n else if (formFieldData.type === 'Number') {\n classList(this.target, ['e-de-num-form'], []);\n inputElement_1 = this.numberInput;\n this.numericTextBoxInstance.format = formFieldData.format;\n this.numericTextBoxInstance.value = parseFloat(resultText.replace(/,/gi, ''));\n }\n else if (formFieldType === 'Date') {\n classList(this.target, ['e-de-date-form'], []);\n inputElement_1 = this.dateInput;\n var format = formFieldData.format;\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n this.datePickerInstance.format = format;\n this.datePickerInstance.value = new Date(resultText);\n this.dataPickerOkButton.disabled = true;\n }\n if (inputElement_1) {\n if (maxLength > 0) {\n inputElement_1.maxLength = maxLength;\n }\n else {\n inputElement_1.removeAttribute('maxlength');\n }\n setTimeout(function () {\n inputElement_1.focus();\n });\n }\n }\n else if (formFieldData instanceof DropDownFormField) {\n classList(this.target, ['e-de-ddl-form'], []);\n this.ddlInstance.dataSource = formFieldData.dropdownItems;\n this.ddlInstance.index = formFieldData.selectedIndex;\n setTimeout(function () {\n _this.ddlInstance.showPopup();\n });\n }\n var left = this.owner.selection.getLeftInternal(formField.line, formField, 0);\n var lineHeight = formField.line.height * this.owner.documentHelper.zoomFactor;\n var position = this.owner.selection.getTooltipPosition(formField.line, left, this.target, true);\n if (!this.popupObject) {\n this.popupObject = new Popup(this.target, {\n height: 'auto',\n width: 'auto',\n relateTo: this.owner.documentHelper.viewerContainer.parentElement,\n position: { X: position.x, Y: position.y + lineHeight }\n });\n }\n this.target.style.display = 'block';\n this.popupObject.show();\n }\n this.owner.documentHelper.isFormFilling = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormFieldPopUp.prototype.destroy = function () {\n if (this.formField) {\n this.formField.destroy();\n }\n this.formField = undefined;\n this.owner = undefined;\n };\n return FormFieldPopUp;\n}());\nexport { FormFieldPopUp };\n","import { createElement, L10n, isNullOrUndefined, select } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { TextElementBox, ElementBox, ImageElementBox, FieldElementBox, TextFormField, DropDownFormField, ParagraphWidget } from '../viewer/page';\nimport { WRowFormat, WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/index';\n/**\n * Track changes pane\n */\nvar TrackChangesPane = /** @class */ (function () {\n function TrackChangesPane(owner, commentReviewPane) {\n this.users = [];\n this.enableButtons = true;\n this.viewTypeitems = [];\n this.sortedRevisions = [];\n this.noChangesVisibleInternal = true;\n this.isTrackingPageBreak = false;\n /***\n * @private\n */\n this.tableRevisions = new Dictionary();\n this.owner = owner;\n this.commentReviewPane = commentReviewPane;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.selectedUser = this.locale.getConstant('All');\n this.selectedType = this.locale.getConstant('All');\n this.initTrackChangePane();\n this.commentReviewPane.reviewTab.items[1].content = this.trackChangeDiv;\n this.commentReviewPane.reviewTab.refresh();\n if (this.owner.enableRtl) {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;left:1px' }\n });\n }\n else {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;right:1px' }\n });\n }\n this.closeButton.title = this.locale.getConstant('Close');\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.commentReviewPane.reviewTab.element.appendChild(this.closeButton);\n this.closeButton.addEventListener('click', this.commentReviewPane.closePane.bind(this.commentReviewPane));\n }\n Object.defineProperty(TrackChangesPane.prototype, \"setNoChangesVisibility\", {\n get: function () {\n return this.noChangesVisibleInternal;\n },\n set: function (visible) {\n this.isChangesTabVisible = !visible;\n this.noChangeDivElement.style.display = visible ? 'block' : 'none';\n this.noChangesVisibleInternal = visible;\n this.enableDisableToolbarItem(!visible);\n this.commentReviewPane.reviewTab.hideTab(1, visible);\n this.owner.notify('reviewPane', { changes: !visible, comment: this.commentReviewPane.isCommentTabVisible });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TrackChangesPane.prototype, \"currentSelectedRevision\", {\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n var selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n }\n else if (value !== this.currentSelectedRevisionInternal || isNullOrUndefined(selectedElement)) {\n if (selectedElement) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n if (this.changes.length > 0 && this.changes.containsKey(value)) {\n var currentChangeView = this.changes.get(value);\n currentChangeView.singleInnerDiv.classList.add('e-de-trckchanges-inner-select');\n }\n }\n this.currentSelectedRevisionInternal = value;\n selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.parentElement.scrollIntoView({ block: 'nearest' });\n }\n },\n enumerable: true,\n configurable: true\n });\n TrackChangesPane.prototype.initTrackChangePane = function () {\n this.changes = new Dictionary();\n this.renderedChanges = new Dictionary();\n this.trackChangeDiv = createElement('div', { className: 'e-de-tc-pane' });\n this.trackChangeDiv.appendChild(this.initPaneHeader());\n this.changesInfoDiv = createElement('div', { id: 'e-de-tc-pane-revision', styles: 'overflow:auto' });\n this.trackChangeDiv.appendChild(this.changesInfoDiv);\n this.noChangeDivElement = createElement('div', { styles: 'display:none;', className: 'e-de-tc-no-chng' });\n this.noChangeDivElement.textContent = this.locale.getConstant('No changes');\n this.changesInfoDiv.appendChild(this.noChangeDivElement);\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.initPaneHeader = function () {\n var _this = this;\n this.toolbarElement = createElement('div', { className: 'e-de-track-toolbar' });\n this.toolbar = new Toolbar({\n enableRtl: this.owner.enableRtl,\n items: [\n {\n template: this.locale.getConstant('User') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-user-list' })\n },\n {\n type: 'Separator'\n },\n {\n template: this.locale.getConstant('View') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-revision-list' })\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-left',\n tooltipText: this.locale.getConstant('Previous Changes'), click: this.navigatePreviousChanges.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-right',\n tooltipText: this.locale.getConstant('Next Changes'), click: this.navigateNextChanges.bind(this)\n },\n {\n template: createElement('div', { id: 'e-de-menu-option' }), align: 'Right', cssClass: 'e-de-tc-tbr',\n tooltipText: this.locale.getConstant('More Options') + '...'\n }\n ]\n });\n this.toolbar.appendTo(this.toolbarElement);\n var navigateLeftButton = select('.e-de-nvgte-left', this.toolbarElement);\n navigateLeftButton.firstChild.classList.add('e-tc-nvgte');\n var navigateRightButton = select('.e-de-nvgte-right', this.toolbarElement);\n navigateRightButton.firstChild.classList.add('e-tc-nvgte');\n //User list drop down button\n var userButtonEle = select('#e-de-user-list', this.toolbarElement);\n this.userDropDownitems = [{ text: this.locale.getConstant('All') }];\n this.userDropDown = {\n items: this.userDropDownitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onUserSelect.bind(this),\n beforeOpen: this.onUserOpen.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedUser);\n }\n };\n this.userDropDownButton = new DropDownButton(this.userDropDown);\n this.userDropDownButton.appendTo(userButtonEle);\n this.userDropDownButton.content = this.getSpanView(this.userDropDown.items[0].text, 0);\n //Revision view type drop down button\n var viewTypeEle = select('#e-de-revision-list', this.toolbarElement);\n this.viewTypeitems = [{ text: this.locale.getConstant('All') }, { text: this.locale.getConstant('Inserted') }, { text: this.locale.getConstant('Deleted') }];\n this.viewTypeDropDownButton = new DropDownButton({\n items: this.viewTypeitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onTypeSelect.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedType);\n }\n });\n this.viewTypeDropDownButton.content = this.getSpanView(this.viewTypeitems[0].text, 1);\n this.viewTypeDropDownButton.appendTo(viewTypeEle);\n //More menu option drop down button\n this.menuoptionEle = select('#e-de-menu-option', this.toolbarElement);\n var menuOptions = [{ text: this.locale.getConstant('Accept all') }, { text: this.locale.getConstant('Reject all') }];\n var menuDropDown = {\n items: menuOptions,\n select: this.onMenuSelect.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide e-tc-btn-bg-clr'\n };\n this.menuDropDownButton = new DropDownButton(menuDropDown);\n this.menuDropDownButton.appendTo(this.menuoptionEle);\n return this.toolbarElement;\n };\n TrackChangesPane.prototype.beforeDropDownItemRender = function (args, content) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === content) {\n span.style.marginRight = '10px';\n span.style.alignSelf = 'center';\n span.setAttribute('class', 'e-de-selected-item e-icons');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n };\n TrackChangesPane.prototype.onUserOpen = function (arg) {\n var ele = arg.element;\n ele.style.maxHeight = '200px';\n ele.style.overflowY = 'auto';\n };\n TrackChangesPane.prototype.enableDisableToolbarItem = function (enable) {\n var elements = this.toolbar.element.querySelectorAll('.e-de-tc-tbr');\n if (this.owner && this.owner.viewer) {\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2], enable);\n }\n };\n TrackChangesPane.prototype.getSpanView = function (value, type) {\n return (type === 0 ? '' : '') + value + '';\n };\n TrackChangesPane.prototype.onMenuSelect = function (arg) {\n var _this = this;\n var selectedText = arg.item.text;\n if (selectedText.match(this.locale.getConstant('Accept all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(true, _this.sortedRevisions);\n }, 0);\n }\n else if (selectedText.match(this.locale.getConstant('Reject all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(false, _this.sortedRevisions);\n /* eslint-disable */\n }, 0);\n }\n this.updateUsers();\n };\n TrackChangesPane.prototype.onSelection = function (revision) {\n this.currentSelectedRevision = revision;\n };\n TrackChangesPane.prototype.onUserSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedUser = selectedText;\n this.userDropDownButton.content = this.getSpanView(selectedText, 0);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.onTypeSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedType = selectedText;\n this.viewTypeDropDownButton.content = this.getSpanView(selectedText, 1);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.updateMenuOptions = function () {\n var revisionType;\n if (this.selectedType !== this.locale.getConstant('All')) {\n revisionType = this.selectedType === this.locale.getConstant('Inserted') ? this.locale.getConstant('Insertion')\n : this.locale.getConstant('Deletion');\n }\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes');\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes');\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType;\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n else {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.menuDropDownButton.disabled = true;\n }\n };\n TrackChangesPane.prototype.sortCollectionToDisplay = function () {\n var isRevisionVisible = false;\n this.sortedRevisions = [];\n this.updateMenuOptions();\n for (var i = 0; i < this.changes.length; i++) {\n var changes = this.changes.get(this.revisions[i]);\n var singleChangesDiv = changes.outerSingleDiv;\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n if (changes.revisionType === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n if (changes.user === this.selectedUser) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else {\n if (changes.user === this.selectedUser && changes.revisionType === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n isRevisionVisible = true;\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n if (singleChangesDiv.style.display === 'block') {\n this.sortedRevisions.push(this.revisions[i]);\n }\n }\n this.setNoChangesVisibility = !isRevisionVisible;\n };\n TrackChangesPane.prototype.enableDisableButton = function (enableButton) {\n this.enableButtons = enableButton;\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.updateTrackChanges = function (show) {\n if (show || isNullOrUndefined(show)) {\n this.tableRevisions.clear();\n this.renderedChanges.clear();\n this.removeAllChanges();\n if (!this.enableButtons && !this.menuoptionEle.classList.contains('e-de-overlay')) {\n this.menuoptionEle.classList.add('e-de-overlay');\n }\n else if (this.menuoptionEle.classList.contains('e-de-overlay')) {\n this.menuoptionEle.classList.remove('e-de-overlay');\n }\n this.isChangesTabVisible = true;\n this.owner.notify('reviewPane', { comment: this.commentReviewPane.isCommentTabVisible, changes: this.isChangesTabVisible });\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var revision = this.owner.revisions.changes[i];\n var ranges = this.owner.revisions.changes[i].range[0];\n if (this.changes.containsKey(revision)) {\n continue;\n }\n if (ranges instanceof WRowFormat) {\n var groupedRevision = this.groupTableRevisions(this.owner.revisions.changes, i);\n if (groupedRevision.length > 1) {\n var changeView = void 0;\n for (var j = 0; j < groupedRevision.length; j++) {\n var nextRevision = groupedRevision[j];\n if (j === 0) {\n this.addChanges(nextRevision);\n changeView = this.changes.get(revision);\n }\n else {\n var nextRowFormat = nextRevision.range[0];\n changeView.appendRowToTable(nextRowFormat, j);\n this.revisions.push(revision);\n this.changes.add(nextRevision, changeView);\n }\n this.tableRevisions.add(nextRevision, groupedRevision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n this.sortCollectionToDisplay();\n this.updateUsers();\n if (show) {\n this.currentSelectedRevision = this.currentSelectedRevisionInternal;\n this.updateHeight();\n this.owner.resize();\n }\n }\n else {\n this.currentSelectedRevision = undefined;\n }\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.groupTableRevisions = function (revisions, startIndex) {\n var startRevision = revisions[startIndex];\n var groupedRevision = [startRevision];\n var currentRevisionType = startRevision.revisionType;\n var startRow = startRevision.range[0].ownerBase;\n var startTable = startRow.ownerTable;\n var rowIndex = startRow.index;\n var startParentTable = this.owner.documentHelper.layout.getParentTable(startTable);\n for (var i = startIndex + 1; i < revisions.length; i++) {\n var nextRevision = revisions[i];\n var nextRevisionType = nextRevision.revisionType;\n var change = nextRevision.range[0];\n if (change instanceof WRowFormat) {\n var nextRow = change.ownerBase;\n var nextTable = nextRow.ownerTable;\n var nextRowIndex = nextRow.index;\n if (!startTable.equals(nextTable) &&\n startParentTable.equals(this.owner.documentHelper.layout.getParentTable(nextTable))) {\n continue;\n }\n if (currentRevisionType === nextRevisionType && startRevision.author === nextRevision.author\n && startTable.equals(nextTable) && (rowIndex + 1 === nextRowIndex)) {\n groupedRevision.push(nextRevision);\n rowIndex = nextRowIndex;\n }\n else {\n break;\n }\n }\n else {\n var block = void 0;\n if (change instanceof WCharacterFormat) {\n block = change.ownerBase;\n }\n else if (change instanceof ElementBox) {\n block = change.line.paragraph;\n }\n if (block instanceof ParagraphWidget && block.isInsideTable) {\n var nextTable = block.associatedCell.ownerTable;\n var parentTable = this.owner.documentHelper.layout.getParentTable(nextTable);\n if (startTable.equals(nextTable) || (!startTable.equals(nextTable) &&\n startParentTable.equals(parentTable))) {\n continue;\n }\n }\n break;\n }\n }\n return groupedRevision;\n };\n TrackChangesPane.prototype.updateUsers = function () {\n if (this.users.length > 0) {\n this.userDropDownButton.removeItems(this.users);\n this.users = [];\n }\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.users.indexOf(this.revisions[i].author) === -1) {\n this.users.push(this.revisions[i].author);\n this.userDropDownButton.items.push({ text: this.revisions[i].author });\n }\n }\n };\n TrackChangesPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.commentReviewPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.changesInfoDiv.style.height = this.commentReviewPane.parentPaneElement.clientHeight - this.toolbarElement.clientHeight\n - tabHeaderHeight - 2 + 'px';\n };\n TrackChangesPane.prototype.removeAllChanges = function () {\n while (this.changesInfoDiv.childNodes.length > 1) {\n this.changesInfoDiv.removeChild(this.changesInfoDiv.lastChild);\n }\n this.revisions = [];\n this.changes.clear();\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.clear = function () {\n this.removeAllChanges();\n this.selectedUser = this.locale.getConstant('All');\n this.userDropDownButton.content = this.getSpanView(this.selectedUser, 0);\n this.selectedType = this.locale.getConstant('All');\n this.viewTypeDropDownButton.content = this.getSpanView(this.selectedType, 1);\n this.currentSelectedRevision = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.destroy = function () {\n this.removeAllChanges();\n if (this.toolbar) {\n this.toolbar.destroy();\n }\n if (this.closeButton && this.closeButton.parentElement) {\n this.closeButton.parentElement.removeChild(this.closeButton);\n }\n this.closeButton = undefined;\n if (this.userDropDownButton) {\n this.userDropDownButton.destroy();\n }\n if (this.menuDropDownButton) {\n this.menuDropDownButton.destroy();\n this.menuDropDownButton = undefined;\n }\n if (this.viewTypeDropDownButton) {\n this.viewTypeDropDownButton.destroy();\n }\n if (this.menuDropDownButton) {\n this.menuDropDownButton.destroy();\n this.menuDropDownButton = undefined;\n }\n if (this.userDropDown) {\n this.userDropDown = undefined;\n }\n if (this.users.length > 0) {\n this.users = [];\n }\n if (this.trackChangeDiv) {\n this.trackChangeDiv = undefined;\n }\n if (this.tableRevisions) {\n this.tableRevisions.destroy();\n this.tableRevisions = undefined;\n }\n };\n TrackChangesPane.prototype.addChanges = function (revision) {\n var currentChangeView = new ChangesSingleView(this.owner, this);\n this.changesInfoDiv.appendChild(currentChangeView.createSingleChangesDiv(revision));\n if (!this.enableButtons) {\n if (!(currentChangeView.acceptButtonElement.classList.contains('e-de-overlay'))) {\n currentChangeView.acceptButtonElement.classList.add('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.add('e-de-overlay');\n }\n }\n else if (currentChangeView.acceptButtonElement.classList.contains('e-de-overlay') && !this.owner.documentHelper.isTrackedOnlyMode) {\n currentChangeView.acceptButtonElement.classList.remove('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.remove('e-de-overlay');\n }\n this.revisions.push(revision);\n this.changes.add(revision, currentChangeView);\n this.renderedChanges.add(revision, currentChangeView);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigatePreviousChanges = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigateNextChanges = function () {\n this.revisionNavigateInternal(true);\n };\n TrackChangesPane.prototype.revisionNavigateInternal = function (next) {\n var changes = this.renderedChanges.keys;\n if (!this.currentSelectedRevisionInternal) {\n if (changes.length === 0) {\n return;\n }\n this.currentSelectedRevision = changes[0];\n }\n if (this.currentSelectedRevision) {\n var revisions = changes;\n var revision = this.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.owner.documentHelper.currentSelectedRevision = revision;\n var ranges = revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(revision));\n this.owner.selection.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selection.selectRevision(revision);\n }\n }\n this.currentSelectedRevision = this.currentSelectedRevision;\n };\n return TrackChangesPane;\n}());\nexport { TrackChangesPane };\nvar ChangesSingleView = /** @class */ (function () {\n function ChangesSingleView(owner, trackChangesPane) {\n this.owner = owner;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.trackChangesPane = trackChangesPane;\n }\n ChangesSingleView.prototype.createSingleChangesDiv = function (revision) {\n this.revision = revision;\n this.user = revision.author;\n this.outerSingleDiv = createElement('div', { className: 'e-de-tc-outer' });\n this.singleInnerDiv = createElement('div', { className: 'e-de-trckchanges-inner' });\n this.singleInnerDiv.addEventListener('click', this.selectRevision.bind(this));\n this.outerSingleDiv.appendChild(this.singleInnerDiv);\n var userNameTotalDiv = createElement('div', { className: 'e-de-track-usernme-div' });\n var userNameLabel = createElement('div', { innerHTML: revision.author, className: 'e-de-track-user-nme' });\n if (!isNullOrUndefined(revision.author)) {\n userNameTotalDiv.style.display = 'flex';\n this.owner.documentHelper.getAvatar(userNameTotalDiv, userNameLabel, undefined, revision);\n }\n var revisionTypeLabel = createElement('div');\n if (revision.revisionType === 'Insertion') {\n this.revisionType = 'Inserted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Inserted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n }\n else if (revision.revisionType === 'Deletion') {\n this.revisionType = 'Deleted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Deleted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n }\n else if (revision.revisionType === 'MoveFrom') {\n this.revisionType = 'MoveFrom';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move From').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n else if (revision.revisionType === 'MoveTo') {\n this.revisionType = 'MoveTo';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move To').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n userNameTotalDiv.appendChild(revisionTypeLabel);\n this.singleInnerDiv.appendChild(userNameTotalDiv);\n var dateView = createElement('div', {\n className: 'e-de-track-date',\n innerHTML: HelperMethods.getModifiedDate(revision.date)\n });\n this.singleInnerDiv.appendChild(dateView);\n var changesTextDiv = createElement('div', {\n className: 'e-de-track-chngs-text'\n });\n this.layoutElementText(revision.range, changesTextDiv);\n this.singleInnerDiv.appendChild(changesTextDiv);\n var buttonTotalDiv = createElement('div', {\n styles: 'display:inline-block;width:100%'\n });\n this.singleInnerDiv.appendChild(buttonTotalDiv);\n var buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.acceptButtonElement = createElement('button', { className: 'e-de-track-accept-button' });\n var acceptButton = new Button({ cssClass: 'e-outline e-success', content: this.locale.getConstant('Accept') });\n buttonDiv.appendChild(this.acceptButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n acceptButton.appendTo(this.acceptButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.acceptButtonElement.classList.add('e-de-overlay');\n }\n this.acceptButtonElement.addEventListener('click', this.acceptButtonClick.bind(this));\n buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.rejectButtonElement = createElement('button', { className: 'e-de-track-reject-button' });\n var rejectButton = new Button({ cssClass: 'e-outline e-danger', content: this.locale.getConstant('Reject') });\n buttonDiv.appendChild(this.rejectButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n rejectButton.appendTo(this.rejectButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.rejectButtonElement.classList.add('e-de-overlay');\n }\n this.rejectButtonElement.addEventListener('click', this.rejectButtonClick.bind(this));\n var changesCount = createElement('div', { className: 'e-de-track-chngs-count', styles: 'float:right;' });\n var currentCount = this.owner.revisions.changes.indexOf(revision) + 1;\n var totalCount = this.owner.revisions.changes.length;\n changesCount.innerHTML = this.locale.getConstant('Changes') + ' ' + currentCount.toString() +\n ' ' + this.locale.getConstant('of') + ' ' + totalCount.toString();\n buttonTotalDiv.appendChild(changesCount);\n return this.outerSingleDiv;\n };\n /**\n * @private\n */\n ChangesSingleView.prototype.appendRowToTable = function (rowFormat, insertIndex) {\n this.tableElement.insertRow();\n for (var k = 0; k < rowFormat.ownerBase.childWidgets.length; k++) {\n this.tableElement.rows[insertIndex].insertCell();\n this.tableElement.rows[insertIndex].cells[k].classList.add('e-de-tc-tble-cell');\n }\n };\n ChangesSingleView.prototype.selectRevision = function () {\n var ranges = this.revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.trackChangesPane.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(this.revision));\n this.owner.selection.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selection.selectRevision(this.revision);\n this.trackChangesPane.onSelection(this.revision);\n }\n };\n ChangesSingleView.prototype.layoutElementText = function (range, changesText) {\n changesText.style.width = '100%';\n var text = '';\n var toSkip = false;\n for (var i = 0; i < range.length; i++) {\n var element = range[i];\n if (element instanceof FieldElementBox && element.fieldType === 1) {\n toSkip = false;\n continue;\n }\n if (toSkip) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n toSkip = true;\n }\n if (element instanceof TextElementBox) {\n text += element.text;\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldCode = this.owner.selection.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n text += '
    ';\n changesText.appendChild(this.addSpan(text));\n return;\n }\n else if (fieldCode.match('HYPERLINK ') || fieldCode.match('MERGEFIELD') || fieldCode.match('FORMTEXT') || fieldCode.match('PAGE ')) {\n text += this.owner.editor.retrieveFieldResultantText(element.fieldEnd);\n }\n else if (element.formFieldData) {\n var emptyChar = this.owner.documentHelper.textHelper.repeatChar(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n if (element.formFieldData instanceof TextFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.defaultValue === '' ? emptyChar : element.formFieldData.defaultValue, 'e-de-tc-field'));\n }\n else if (element.formFieldData instanceof DropDownFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.dropdownItems.length > 0 ? element.formFieldData.dropdownItems[0] : emptyChar, 'e-de-tc-field'));\n }\n else {\n changesText.appendChild(this.addSpan(element.formFieldData.checked ? String.fromCharCode(9745) : String.fromCharCode(9744), 'e-de-tc-field'));\n }\n }\n }\n else if (element instanceof ImageElementBox) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var imageEle = createElement('img');\n imageEle.setAttribute('src', element.imageString);\n imageEle.classList.add('e-de-tc-shrink-img');\n changesText.appendChild(imageEle);\n }\n else if (element instanceof WRowFormat) {\n this.tableElement = createElement('table');\n this.tableElement.classList.add('e-de-track-chng-table');\n this.tableElement.insertRow();\n for (var i_1 = 0; i_1 < element.ownerBase.childWidgets.length; i_1++) {\n this.tableElement.rows[0].insertCell();\n this.tableElement.rows[0].cells[i_1].classList.add('e-de-tc-tble-cell');\n }\n changesText.appendChild(this.tableElement);\n return;\n }\n else if (element instanceof WCharacterFormat) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var paraMark = '¶';\n if (element.ownerBase instanceof ParagraphWidget && element.ownerBase.isEndsWithPageBreak) {\n paraMark = '............Page Break............' + paraMark;\n }\n changesText.appendChild(this.addSpan(paraMark, 'e-de-tc-pmark'));\n changesText.appendChild(createElement('br'));\n }\n }\n changesText.appendChild(this.addSpan(text));\n };\n ChangesSingleView.prototype.addSpan = function (text, cssClass) {\n var span = createElement('span');\n span.textContent = text;\n if (cssClass) {\n span.classList.add(cssClass);\n }\n return span;\n };\n ChangesSingleView.prototype.acceptButtonClick = function () {\n this.trackChangesPane.changesInfoDiv.removeChild(this.outerSingleDiv);\n this.removeFromParentCollec();\n this.revision.accept();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.rejectButtonClick = function () {\n this.trackChangesPane.changesInfoDiv.removeChild(this.outerSingleDiv);\n this.removeFromParentCollec();\n this.revision.reject();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editor.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.removeFromParentCollec = function () {\n this.trackChangesPane.changes.remove(this.revision);\n this.trackChangesPane.revisions.splice(this.trackChangesPane.revisions.indexOf(this.revision), 1);\n if (this.trackChangesPane.changes.length === 0) {\n this.trackChangesPane.setNoChangesVisibility = true;\n }\n this.trackChangesPane.updateUsers();\n };\n return ChangesSingleView;\n}());\nexport { ChangesSingleView };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/* eslint-disable */\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WParagraphFormat, WStyles } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Page, Rect, Widget, ListTextElementBox, ParagraphWidget, HeaderFooterWidget, Padding, DropDownFormField, TextFormField, CheckBoxFormField, ShapeElementBox, TextFrame, Footnote, FootnoteElementBox, FootNoteWidget, TextElementBox, ShapeBase, ImageElementBox } from './page';\nimport { LineWidget, TableWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentReviewPane } from '../index';\nimport { Zoom } from './zooming';\nimport { Dialog, createSpinner } from '@syncfusion/ej2-popups';\nimport { beforePaneSwitchEvent, keyDownEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent } from '../../base/index';\nimport { RestrictEditing } from '../restrict-editing/restrict-editing-pane';\nimport { FormFieldPopUp } from '../dialogs/form-field-popup';\nimport { TrackChangesPane } from '../track-changes/track-changes-pane';\n/**\n * @private\n */\nvar DocumentHelper = /** @class */ (function () {\n //#endregion\n function DocumentHelper(owner) {\n var _this = this;\n /**\n * @private\n */\n this.scrollbarWidth = 0;\n /**\n * @private\n */\n this.isWebPrinting = false;\n /**\n * @private\n */\n this.isHeaderFooter = false;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.showRevision = false;\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n /**\n * @private\n */\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n // Event\n /**\n * @private\n */\n this.isMouseDown = false;\n this.isMouseEntered = false;\n this.scrollMoveTimer = 0;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.isTouchMoved = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isComposingIME = false;\n /**\n * @private\n */\n this.lastComposedText = '';\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.dontUseHtmlParagraphAutoSpacing = false;\n /**\n * @private\n */\n this.alignTablesRowByRow = false;\n /**\n * @private\n */\n this.compatibilityMode = 'Word2013';\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.comments = [];\n /**\n * @private\n */\n this.authors = new Dictionary();\n /**\n * @private\n */\n this.revisionsInternal = new Dictionary();\n /**\n * @private\n */\n this.commentUserOptionId = 1;\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n /**\n * @private\n */\n this.formFields = [];\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * If movecaretposition is 1, Home key is pressed\n * If moveCaretPosition is 2, End key is pressed\n *\n * @private\n */\n this.moveCaretPosition = 0;\n /**\n * @private\n */\n this.isTextInput = false;\n /**\n * @private\n */\n this.isScrollHandler = false;\n /**\n * @private\n */\n this.triggerElementsOnLoading = false;\n /**\n * @private\n */\n this.triggerSpellCheck = false;\n //Document Protection Properties Starts\n /**\n * preserve the format\n *\n * @private\n */\n this.restrictFormatting = false;\n /**\n * preserve the document protection type either readonly or no protection\n *\n * @private\n */\n this.protectionType = 'NoProtection';\n /**\n * Preserve the password protection is enforced or not\n *\n * @private\n */\n this.isDocumentProtected = false;\n /**\n * preserve the hash value of password\n *\n * @private\n */\n this.hashValue = '';\n /**\n * @private\n */\n this.saltValue = '';\n /**\n * @private\n */\n this.userCollection = [];\n /**\n * @private\n */\n this.cachedPages = [];\n /**\n * @private\n */\n this.skipScrollToPosition = false;\n /**\n * @private\n */\n this.isIosDevice = false;\n /**\n * @private\n */\n this.isMobileDevice = false;\n /**\n * @private\n */\n this.isFormFilling = false;\n /**\n * @private\n */\n this.footnotes = new Footnote();\n /**\n * @private\n */\n this.endnotes = new Footnote();\n /**\n * @private\n */\n this.isFootnoteWidget = false;\n /**\n * @private\n * @param {TextEvent} event - Specifies text event.\n * @returns {void}\n */\n this.onTextInput = function (event) {\n if (!_this.isComposingIME) {\n event.preventDefault();\n var text = event.data;\n _this.owner.editor.handleTextInput(text);\n }\n };\n //#region Composition Event\n /**\n * Fires when composition starts.\n *\n * @private\n * @returns {void}\n */\n this.compositionStart = function () {\n if (!Browser.isDevice && !_this.owner.isReadOnlyMode) {\n _this.isComposingIME = true;\n _this.positionEditableTarget();\n if (_this.owner.editorHistory) {\n _this.owner.editor.initComplexHistory('IMEInput');\n }\n }\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n *\n * @private\n * @returns {void}\n */\n this.compositionUpdated = function () {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n setTimeout(function () {\n _this.owner.editor.insertIMEText(_this.getEditableDivTextContent(), true);\n }, 0);\n }\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n *\n * @private\n * @param {CompositionEvent} event - Specifies text compisition event.\n * @returns {void}\n */\n this.compositionEnd = function (event) {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n var text = _this.getEditableDivTextContent();\n if (text !== '') {\n _this.owner.editor.insertIMEText(text, false);\n }\n _this.isComposingIME = false;\n _this.lastComposedText = '';\n _this.iframe.setAttribute('style', 'pointer-events:none;position:absolute;left:' + _this.owner.viewer.containerLeft + 'px;top:' + _this.owner.viewer.containerTop + 'px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden');\n _this.editableDiv.innerHTML = '';\n if (_this.owner.editorHistory) {\n _this.owner.editorHistory.updateComplexHistory();\n if (text === '') {\n //When the composition in live. The Undo operation will terminate the composition and empty text will be return from text box.\n //At that time the the history should be updated. Undo the operation and clear the redo stack. This undo operation will not be saved for redo operation.\n _this.owner.editorHistory.undo();\n _this.owner.editorHistory.redoStack.pop();\n }\n }\n }\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onKeyPressInternal = function (event) {\n var key = event.which || event.keyCode;\n _this.triggerElementsOnLoading = false;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection\n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (Browser.isIE && alt && ctrl) {\n ctrl = false;\n }\n // tslint:disable-next-line:max-line-length\n if (ctrl && event.key === 'v' || ctrl && event.key === 'a' || (ctrl || (_this.isControlPressed && Browser.isIE)) && event.key === 'p') {\n if (Browser.isIE) {\n _this.isControlPressed = false;\n }\n return;\n }\n if (!_this.owner.isReadOnlyMode || (_this.selection && _this.selection.isInlineFormFillMode())) {\n var key_1 = event.keyCode || event.charCode;\n var char = '';\n if (key_1) {\n char = String.fromCharCode(key_1);\n }\n else if (event.key) {\n char = event.key;\n }\n if (char !== ' ' && char !== '\\r' && char !== '\\b' && char !== String.fromCharCode(27) && !ctrl) {\n _this.owner.editorModule.handleTextInput(char);\n }\n else if (char === ' ') {\n _this.triggerSpellCheck = true;\n _this.owner.editorModule.handleTextInput(' ');\n _this.triggerSpellCheck = false;\n }\n event.preventDefault();\n }\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal();\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @private\n * @param {ClipboardEvent} event - Specifies clipboard event.\n * @returns {void}\n */\n this.onPaste = function (event) {\n if ((!_this.owner.isReadOnlyMode && _this.owner.editor.canEditContentControl) || _this.selection.isInlineFormFillMode()) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n *\n * @private\n * @returns {void}\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n *\n * @private\n * @returns {void}\n */\n this.updateFocus = function () {\n if (_this.selection && !(_this.isMobileDevice && _this.owner.isReadOnly)) {\n if (!Browser.isDevice && !Browser.isIE && !navigator.userAgent.match('Edge')\n && !isNullOrUndefined(_this.iframe)) {\n _this.iframe.focus();\n }\n if (!isNullOrUndefined(_this.editableDiv)) {\n _this.editableDiv.focus();\n }\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n *\n * @returns {void}\n */\n this.scrollHandler = function () {\n if (_this.scrollTimer) {\n clearTimeout(_this.scrollTimer);\n }\n _this.clearContent();\n _this.isScrollHandler = true;\n if (!Browser.isDevice && !_this.isComposingIME) {\n _this.iframe.style.top = _this.owner.viewer.containerTop + 'px';\n _this.iframe.style.left = _this.owner.viewer.containerLeft + 'px';\n }\n _this.owner.viewer.updateScrollBars();\n var vtHeight = _this.owner.viewer.containerTop + _this.visibleBounds.height - (_this.owner.viewer.padding.top + _this.owner.viewer.padding.bottom);\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.owner.viewer.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n if (_this.owner.viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n _this.isScrollHandler = false;\n _this.scrollTimer = setTimeout(function () {\n if (!_this.isScrollHandler && !isNullOrUndefined(_this.owner) && _this.owner.isSpellCheck) {\n _this.isScrollToSpellCheck = true;\n _this.owner.viewer.updateScrollBars();\n }\n }, 200);\n };\n /**\n * Fires when the window gets resized.\n *\n * @private\n * @returns {void}\n */\n this.onWindowResize = function () {\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n _this.resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.element)) {\n _this.updateViewerSize();\n _this.clearContent();\n _this.owner.viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n _this.updateTouchMarkPosition();\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n }\n }, 200);\n };\n /**\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n if (_this.isMouseDown) {\n _this.isMouseDown = false;\n }\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n * Called on mouse down.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onMouseDownInternal = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(target) && target !== _this.viewerContainer) || _this.isTouchInput ||\n event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n _this.isFootnoteWidget = false;\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n if (_this.formFillPopup) {\n _this.formFillPopup.hidePopup();\n }\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n if (_this.selection.isInShape) {\n var textFram = _this.owner.selection.getCurrentTextFrame();\n var shape = textFram.containerShape;\n _this.selection.selectShape(shape);\n }\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n if (event.which === 3 && !_this.owner.selection.isEmpty\n && _this.selection.checkCursorIsInSelection(_this.getLineWidget(touchPoint), touchPoint)) {\n event.preventDefault();\n return;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* eslint-disable @typescript-eslint/indent */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount > 1) {\n _this.tapCount = 1;\n }\n }, 100);\n }\n };\n /**\n * Called on mouse move.\n *\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onMouseMoveInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n var table = _this.owner.editorModule.tableResize.currentResizingTable;\n var startPosition = _this.selection.setPositionForBlock(table, true);\n var endPosition = _this.selection.setPositionForBlock(table, false);\n if (!(_this.owner.documentHelper.isDocumentProtected) || _this.selection.checkSelectionIsAtEditRegion(startPosition, endPosition)) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n }\n else {\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event)) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selection.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible\n || _this.owner.imageResizerModule.isShapeResize) {\n _this.owner.selection.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * @private\n * @param {MouseEvent} event - Specifies mouse event\n * @returns {void}\n */\n this.onMouseLeaveInternal = function (event) {\n event.preventDefault();\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.isMouseDown) {\n var viewerTop = _this.viewerContainer.scrollTop;\n if (event.offsetY + viewerTop > viewerTop) {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollForwardOnSelection(cursorPoint);\n }, 100);\n }\n else {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollBackwardOnSelection(cursorPoint);\n }, 100);\n }\n if (_this.isMouseEntered) {\n _this.isMouseEntered = false;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onMouseEnterInternal = function (event) {\n if (!_this.isMouseEntered) {\n _this.owner.viewer.updateScrollBars();\n }\n _this.isMouseEntered = true;\n if (_this.scrollMoveTimer) {\n clearInterval(_this.scrollMoveTimer);\n }\n if (!_this.isLeftButtonPressed(event)) {\n _this.onMouseUpInternal(event);\n }\n };\n /**\n * Fired on double tap.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onDoubleTap = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.owner.viewer.findFocusedPage(cursorPoint, true))) {\n return;\n }\n var widget = _this.getLineWidget(touchPoint);\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField();\n }\n if (!_this.isDocumentProtected && _this.owner.enableFormField) {\n var formatType = _this.selection.getFormFieldType(formField);\n if (formatType) {\n if (formatType.toString() !== '') {\n _this.selection.selectField(formField);\n }\n switch (formatType) {\n case 'Text':\n _this.owner.textFormFieldDialogModule.show();\n break;\n case 'CheckBox':\n _this.owner.checkBoxFormFieldDialogModule.show();\n break;\n case 'DropDown':\n _this.owner.dropDownFormFieldDialogModule.show();\n break;\n }\n }\n }\n else if (_this.isDocumentProtected && formField && formField.formFieldData instanceof TextFormField\n && formField.formFieldData.type === 'Text') {\n _this.selection.selectField();\n }\n var startPosition = _this.selection.start.clone();\n var endPosition = _this.selection.end.clone();\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, 0);\n var inline = inlineObj.element;\n if (_this.owner.layoutType === 'Pages') {\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n var footnotes = _this.currentPage.footnoteWidget;\n var i = void 0;\n for (i = 0; i <= footnotes.bodyWidgets.length; i++) {\n var footnoteText = (footnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === footnoteText.text) {\n break;\n }\n }\n startPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n else {\n var endnotes = _this.pages[_this.pages.length - 1].endnoteWidget;\n var i = void 0;\n if (!isNullOrUndefined(endnotes)) {\n for (i = 0; i <= endnotes.childWidgets.length; i++) {\n var endnoteText = (endnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === endnoteText.text) {\n break;\n }\n }\n }\n startPosition.setPositionParagraph(endnotes.childWidgets[i].childWidgets[0], 0);\n endPosition.setPositionParagraph(endnotes.childWidgets[i].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n }\n else {\n if (inline instanceof TextElementBox && (_this.selection.isinEndnote || _this.selection.isinFootnote)) {\n _this.selection.footnoteReferenceElement(startPosition, endPosition, inline);\n }\n }\n }\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n _this.owner.selection.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @return {void}\n */\n /* eslint-disable */\n this.onMouseUpInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n if (!isNullOrUndefined(_this.currentSelectedComment) && _this.owner.commentReviewPane\n && !_this.owner.commentReviewPane.commentPane.isEditMode) {\n _this.currentSelectedComment = undefined;\n }\n }\n var isCtrlkeyPressed = _this.isIosDevice ? event.metaKey : event.ctrlKey;\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (_this.owner.selection.isEmpty || _this.owner.selection.isImageSelected) &&\n (((isCtrlkeyPressed && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (_this.isMouseDown && _this.isLeftButtonPressed(event) && _this.isDocumentProtected\n && _this.protectionType === 'FormFieldsOnly' && _this.selection) {\n var widget = _this.getLineWidget(touchPoint);\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField(true);\n }\n if (formField && formField.formFieldData && formField.formFieldData.enabled && !_this.selection.isInlineFormFillMode(formField)) {\n var data = { 'fieldName': formField.formFieldData.name };\n if (formField.formFieldData instanceof TextFormField) {\n data.value = formField.resultText;\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n data.value = formField.formFieldData.checked;\n }\n else {\n data.value = formField.formFieldData.selectedIndex;\n }\n _this.owner.trigger(beforeFormFieldFillEvent, data);\n if (_this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Popup' && !(formField.formFieldData instanceof CheckBoxFormField)\n || (formField.formFieldData instanceof TextFormField && !(formField.formFieldData.type === 'Text'))\n || formField.formFieldData instanceof DropDownFormField) {\n _this.formFillPopup.showPopUp(formField);\n }\n else {\n _this.owner.editor.toggleCheckBoxFormField(formField);\n data.value = formField.formFieldData.checked;\n data.isCanceled = false;\n _this.owner.trigger(afterFormFieldFillEvent, data);\n }\n }\n if (!formField && _this.isFormFillProtectedMode) {\n _this.selection.navigateToNextFormField();\n }\n }\n else if (_this.isMouseDown) {\n if (_this.formFields.length > 0) {\n var formField = _this.selection.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof TextFormField) {\n _this.selection.selectField();\n }\n else if (_this.isLeftButtonPressed(event) && formField && formField.formFieldData instanceof DropDownFormField) {\n var offset = formField.line.getOffset(formField, 0);\n var point = _this.selection.getPhysicalPositionInternal(formField.line, offset, false);\n _this.selection.selectInternal(formField.line, formField, 0, point);\n }\n }\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n _this.isMouseDown = false;\n _this.isFootnoteWidget = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n _this.updateFocus();\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n };\n /**\n * Fired on touch start.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isTouchMoved = false;\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.owner.viewer.findFocusedPage(point, true, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n var x = _this.owner.selection.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selection.end, _this.owner.selection.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selection.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selection.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selection.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.longTouchTimer = setTimeout(_this.onLongTouch, 500, event);\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n }\n };\n /**\n * Fired on long touch\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onLongTouch = function (event) {\n if (isNullOrUndefined(_this.owner) || isNullOrUndefined(_this.viewerContainer) || _this.isTouchMoved || event.touches.length !== 1) {\n return;\n }\n var point = _this.getTouchOffsetValue(event);\n var pointRelToPage = _this.owner.viewer.findFocusedPage(point, true);\n var selStart = _this.selection.start;\n var selEnd = _this.selection.end;\n var updateSel = false;\n if (!_this.selection.isForward) {\n selStart = _this.selection.end;\n selEnd = _this.selection.start;\n }\n var selStartPt = selStart.location;\n var selEndPt = selEnd.location;\n if (selStart.currentWidget !== selEnd.currentWidget) {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n && !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n else {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n || !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n if (event.changedTouches.length === 1 && updateSel) {\n _this.updateSelectionOnTouch(point, pointRelToPage);\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.selection.isEmpty) {\n _this.selection.selectCurrentWord();\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchMoveInternal = function (event) {\n _this.isTouchMoved = true;\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selection.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selection.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n _this.updateTouchMarkPosition();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n };\n /**\n * Fired on touch up.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n if (!_this.isTouchMoved || (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing)) {\n _this.updateSelectionOnTouch(point, touchPoint);\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n };\n /**\n * Fired on keyup event.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice && event.target === _this.editableDiv) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyDownInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.editableDiv) {\n return;\n }\n var isHandled = false;\n var keyEventArgs = { 'event': event, 'isHandled': false, source: _this.owner };\n _this.owner.trigger(keyDownEvent, keyEventArgs);\n if (keyEventArgs.isHandled) {\n return;\n }\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (isHandled) {\n event.preventDefault();\n }\n };\n this.owner = owner;\n this.pages = [];\n this.lists = [];\n this.abstractLists = [];\n this.render = new Renderer(this);\n this.characterFormat = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.renderedLevelOverrides = [];\n this.headersFooters = [];\n this.styles = new WStyles();\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n this.editRanges = new Dictionary();\n this.isIosDevice = /Mac|iPad|iPod/i.test(navigator.userAgent);\n this.isMobileDevice = /Android|Windows Phone|webOS/i.test(navigator.userAgent);\n this.formFillPopup = new FormFieldPopUp(this.owner);\n this.customXmlData = new Dictionary();\n this.contentControlCollection = [];\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n }\n Object.defineProperty(DocumentHelper.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n *\n * @private\n * @returns {Rect} - Returns visible bounds.\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerCanvas\", {\n //Document Protection Properties Ends\n //#region Properties\n /**\n * Gets container canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns page canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns selection canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerContext\", {\n /**\n * Gets container context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns page canvas context.\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns selection canvas context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n *\n * @returns {Page} - Returns current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n *\n * @private\n * @returns {number} - Returns zoom factor value.\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor();\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selection\", {\n /**\n * Gets the selection.\n *\n * @private\n * @returns {Selection} - Returns selection module.\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n *\n * @private\n * @returns {Page} - Return selection start page.\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n *\n * @private\n * @returns {Page} - Return selection end page.\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog(this.owner.enableRtl);\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2(this.owner.enableRtl);\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog3\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal3) {\n this.initDialog3(this.owner.enableRtl);\n }\n return this.dialogInternal3;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedComment\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedCommentInternal;\n },\n set: function (value) {\n if (this.owner && this.owner.commentReviewPane) {\n this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n }\n this.currentSelectedCommentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedRevision\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n // if (this.owner && this.owner.commentReviewPane) {\n // this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n // }\n this.currentSelectedRevisionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isInlineFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isFormFillProtectedMode && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'FormFieldsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isCommentOnlyMode\", {\n /**\n * @private\n * @returns {Boolean}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'CommentsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isTrackedOnlyMode\", {\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'RevisionsOnly';\n },\n enumerable: true,\n configurable: true\n });\n DocumentHelper.prototype.initalizeStyles = function () {\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n this.preDefinedStyles.add('Toc1', '{\"type\":\"Paragraph\",\"name\":\"Toc1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc2', '{\"type\":\"Paragraph\",\"name\":\"Toc2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc3', '{\"type\":\"Paragraph\",\"name\":\"Toc3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc4', '{\"type\":\"Paragraph\",\"name\":\"Toc4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc5', '{\"type\":\"Paragraph\",\"name\":\"Toc5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc6', '{\"type\":\"Paragraph\",\"name\":\"Toc6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc7', '{\"type\":\"Paragraph\",\"name\":\"Toc7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc8', '{\"type\":\"Paragraph\",\"name\":\"Toc8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Toc9', '{\"type\":\"Paragraph\",\"name\":\"Toc9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearDocumentItems = function () {\n this.editRanges.clear();\n this.headersFooters = [];\n this.fields = [];\n this.formFields = [];\n this.currentSelectedComment = undefined;\n this.currentSelectedRevision = undefined;\n for (var i = 0; i < this.comments.length; i++) {\n var commentStart = this.comments[i].commentStart;\n if (commentStart) {\n commentStart.destroy();\n }\n }\n this.comments = [];\n this.bookmarks.clear();\n this.styles.clear();\n this.authors.clear();\n this.revisionsInternal.clear();\n this.owner.revisions.destroy();\n this.characterFormat.clearFormat();\n this.paragraphFormat.clearFormat();\n if (this.owner.trackChangesPane) {\n this.owner.trackChangesPane.clear();\n }\n this.setDefaultCharacterValue(this.characterFormat);\n this.setDefaultParagraphValue(this.paragraphFormat);\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.clear();\n }\n this.isHeaderFooter = false;\n this.defaultTabWidth = 36;\n this.isDocumentProtected = false;\n this.protectionType = 'NoProtection';\n this.restrictFormatting = false;\n this.hashValue = '';\n this.saltValue = '';\n this.userCollection = [];\n if (this.formFillPopup) {\n this.formFillPopup.hidePopup();\n }\n this.customXmlData.clear();\n this.contentControlCollection = [];\n this.endnotes.clear();\n this.footnotes.clear();\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n this.abstractLists = [];\n this.lists = [];\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.setDefaultDocumentFormat = function () {\n this.owner.parser.parseCharacterFormat(this.owner.characterFormat, this.characterFormat);\n this.owner.parser.parseParagraphFormat(this.owner.paragraphFormat, this.paragraphFormat);\n };\n DocumentHelper.prototype.setDefaultCharacterValue = function (characterFormat) {\n characterFormat.bold = false;\n characterFormat.italic = false;\n characterFormat.fontFamily = 'Calibri';\n characterFormat.fontSize = 11;\n characterFormat.underline = 'None';\n characterFormat.strikethrough = 'None';\n characterFormat.fontSizeBidi = 11;\n characterFormat.fontFamilyBidi = 'Calibri';\n characterFormat.baselineAlignment = 'Normal';\n characterFormat.highlightColor = 'NoColor';\n characterFormat.fontColor = '#00000000';\n characterFormat.allCaps = false;\n };\n DocumentHelper.prototype.setDefaultParagraphValue = function (paragraphFormat) {\n paragraphFormat.leftIndent = 0;\n paragraphFormat.rightIndent = 0;\n paragraphFormat.firstLineIndent = 0;\n paragraphFormat.textAlignment = 'Left';\n paragraphFormat.beforeSpacing = 0;\n paragraphFormat.afterSpacing = 0;\n paragraphFormat.lineSpacing = 1;\n paragraphFormat.lineSpacingType = 'Multiple';\n paragraphFormat.bidi = false;\n paragraphFormat.keepWithNext = false;\n paragraphFormat.keepLinesTogether = false;\n paragraphFormat.widowControl = true;\n };\n /**\n * @private\n * @param {number} id - Specfies abstract list id.\n * @returns {WAbstractList} - Returns abstract list.\n */\n DocumentHelper.prototype.getAbstractListById = function (id) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (abstractList instanceof WAbstractList && abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {number} id - Specfies list id.\n * @returns {WAbstractList} - Returns list.\n */\n DocumentHelper.prototype.getListById = function (id) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n if (!isNullOrUndefined(this.lists[i]) && this.lists[i].listId === id) {\n return this.lists[i];\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {WListLevel} listLevel - Specfies list level.\n * @returns {number} - Returns list level number.\n */\n DocumentHelper.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * Gets the bookmarks.\n *\n * @private\n * @param {boolean} includeHidden - Include hidden bookmark.\n * @returns {string[]} - Returns bookmars present in current document.\n */\n DocumentHelper.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n DocumentHelper.prototype.selectComment = function (comment) {\n var _this = this;\n if (this.owner.selection && this.owner.commentReviewPane) {\n this.owner.showComments = true;\n setTimeout(function () {\n if (_this.owner && _this.owner.selection) {\n _this.owner.selection.selectComment(comment);\n }\n });\n }\n };\n DocumentHelper.prototype.showComments = function (show) {\n if (this.owner && show && this.owner.enableComment) {\n var eventArgs = { type: 'Comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.reviewTab.hideTab(1, false);\n this.owner.commentReviewPane.showHidePane(show && this.owner.enableComment, 'Comments');\n };\n DocumentHelper.prototype.showRevisions = function (show) {\n var isCommentTabVisible = false;\n this.showRevision = show;\n if (this.owner && show) {\n var eventArgs = { type: 'comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n if (!show && this.owner.showComments) {\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.showHidePane(true, 'Comments');\n }\n else {\n this.owner.commentReviewPane.showHidePane(show, 'Changes');\n if (!this.owner.enableComment) {\n isCommentTabVisible = true;\n }\n // this.owner.commentReviewPane.reviewTab.hideTab(0, isCommentTabVisible);\n this.showRevision = false;\n }\n if (show) {\n this.owner.trackChangesPane.enableDisableButton(!this.owner.isReadOnly && !this.isDocumentProtected);\n }\n };\n /**\n * Initializes components.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.initializeComponents = function () {\n var element = this.owner.element;\n if (isNullOrUndefined(element)) {\n return;\n }\n //let viewer: LayoutViewer = this;\n this.optionsPaneContainer = createElement('div', {\n className: 'e-documenteditor-optionspane'\n });\n this.optionsPaneContainer.contentEditable = 'false';\n element.appendChild(this.optionsPaneContainer);\n var isRtl = this.owner.enableRtl;\n var viewerContainerStyle;\n if (isRtl) {\n viewerContainerStyle = 'direction:ltr;';\n }\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto;' + viewerContainerStyle;\n this.optionsPaneContainer.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = 0;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n if (Browser.isDevice) {\n this.createEditableDiv(element);\n }\n else {\n this.createEditableIFrame();\n }\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n this.initTouchEllipse();\n this.wireEvent();\n this.restrictEditingPane = new RestrictEditing(this);\n this.owner.commentReviewPane = new CommentReviewPane(this.owner);\n this.owner.trackChangesPane = new TrackChangesPane(this.owner, this.owner.commentReviewPane);\n createSpinner({ target: this.owner.element, cssClass: 'e-spin-overlay' });\n };\n DocumentHelper.prototype.measureScrollbarWidth = function (element) {\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'visibility:hidden;overflow:scroll');\n element.appendChild(parentDiv);\n var childDiv = document.createElement('div');\n parentDiv.appendChild(childDiv);\n this.scrollbarWidth = (parentDiv.getBoundingClientRect().width - childDiv.getBoundingClientRect().width);\n parentDiv.parentNode.removeChild(parentDiv);\n };\n DocumentHelper.prototype.createEditableDiv = function (element) {\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n };\n DocumentHelper.prototype.createEditableIFrame = function () {\n this.iframe = createElement('iframe', {\n attrs: {\n 'scrolling': 'no',\n 'style': 'pointer-events:none;position:absolute;left:0px;top:0px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden'\n },\n className: 'e-de-text-target'\n });\n this.viewerContainer.appendChild(this.iframe);\n this.initIframeContent();\n };\n DocumentHelper.prototype.initIframeContent = function () {\n var style = 'background-color:transparent;width:100%;height:100%;padding: 0px; margin: 0px;';\n var innerHtml = ''\n + ''\n + ''\n + '
    '\n + ''\n + '';\n if (!isNullOrUndefined(this.iframe.contentDocument)) {\n this.iframe.contentDocument.open();\n this.iframe.contentDocument.write(innerHtml);\n this.iframe.contentDocument.close();\n this.editableDiv = this.iframe.contentDocument.body.children[0];\n }\n };\n /**\n * Wires events and methods.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.selection)) {\n this.selection.initCaret();\n }\n this.wireInputEvents();\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.addEventListener('load', this.onIframeLoad.bind(this));\n }\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('keydown', this.onKeyDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('mouseleave', this.onMouseLeaveInternal);\n this.viewerContainer.addEventListener('mouseenter', this.onMouseEnterInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer.bind(this));\n window.addEventListener('touchend', this.onImageResizer.bind(this));\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal.bind(this));\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal.bind(this));\n };\n DocumentHelper.prototype.wireInputEvents = function () {\n if (isNullOrUndefined(this.editableDiv)) {\n return;\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n if (!Browser.isDevice) {\n this.editableDiv.addEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.addEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n };\n DocumentHelper.prototype.onIframeLoad = function () {\n if (!isNullOrUndefined(this.iframe) && this.iframe.contentDocument.body.children.length === 0) {\n this.initIframeContent();\n this.wireInputEvents();\n }\n };\n DocumentHelper.prototype.getEditableDivTextContent = function () {\n return this.editableDiv.textContent;\n };\n DocumentHelper.prototype.updateAuthorIdentity = function () {\n var revisions = this.owner.revisions.changes;\n for (var i = 0; i < revisions.length; i++) {\n this.getAuthorColor(revisions[i].author);\n }\n };\n DocumentHelper.prototype.getAvatar = function (userInfo, userName, comment, revision) {\n var author;\n var userinitial;\n if (!isNullOrUndefined(comment)) {\n author = comment.author;\n userinitial = comment.initial;\n }\n else {\n author = revision.author;\n }\n if (!isNullOrUndefined(author)) {\n var avatarDiv = createElement('div', { className: 'e-de-cmt-avatar' });\n var avatar = createElement('div', { className: 'e-de-ff-cmt-avatar' });\n avatar.style.backgroundColor = this.owner.documentHelper.getAuthorColor(author);\n if (userinitial === '' || isNullOrUndefined(userinitial)) {\n var authorName = author.split(' ');\n var initial = authorName[0].charAt(0);\n if (authorName.length > 1) {\n initial += authorName[authorName.length - 1][0];\n }\n avatar.innerText = initial.toUpperCase();\n }\n else {\n if (userinitial.length > 2) {\n avatar.innerText = userinitial.substring(0, 2);\n }\n else {\n avatar.innerText = userinitial;\n }\n }\n avatarDiv.appendChild(avatar);\n avatarDiv.appendChild(userName);\n userInfo.appendChild(avatarDiv);\n }\n };\n /**\n * @private\n * @param {string} author - Specifies author name.\n * @returns {string} - Return autor color.\n */\n DocumentHelper.prototype.getAuthorColor = function (author) {\n if (this.authors.containsKey(author)) {\n return this.authors.get(author);\n }\n var color;\n if (this.authors.length === 0) {\n color = '#b5082e'; //dark red\n }\n else {\n color = this.generateRandomColor();\n }\n this.authors.add(author, color);\n return color;\n };\n DocumentHelper.prototype.generateRandomColor = function () {\n var userColors = ['#b5082e',\n '#2e97d3',\n '#bb00ff',\n '#f37e43',\n '#03a60b',\n '#881824',\n '#e09a2b',\n '#50565e']; //dark grey\n return userColors[(this.authors.length % 8)];\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.positionEditableTarget = function () {\n var point = this.selection.getRect(this.selection.start);\n var page = this.selection.getSelectionPage(this.selection.start);\n // const caretInfo: CaretHeightInfo = this.selection.updateCaretSize(this.owner.selection.start);\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var left = page.boundingRectangle.x + (HelperMethods.convertPointToPixel(sectionFormat.leftMargin) * this.zoomFactor);\n var top = point.y;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n var iframeStyle = 'left:' + left + 'px;';\n iframeStyle += 'top:' + top + 'px;';\n iframeStyle += 'width:' + (HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor) + 'px;';\n iframeStyle += 'height:250px;outline-style:none;position:absolute';\n this.iframe.setAttribute('style', iframeStyle);\n var style = 'background-color:transparent;width:100%;height:250px;padding: 0px; margin: 0px;';\n style += 'text-indent:' + (point.x - left) + 'px;';\n style += 'color:transparent;pointer-events:none;outline-style:none;';\n style += 'font-size:' + (HelperMethods.convertPointToPixel(this.selection.characterFormat.fontSize) * this.zoomFactor) + 'px;';\n style += 'font-family' + this.selection.characterFormat.fontFamily + ';';\n style += 'overflow:hidden;text-decoration:none;white-space:normal;';\n this.editableDiv.setAttribute('style', style);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n DocumentHelper.prototype.onImageResizer = function (args) {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.imageResizerModule) &&\n this.owner.imageResizerModule.isImageResizerVisible && this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n this.onTouchUpInternal(args);\n }\n }\n if (this.scrollMoveTimer) {\n this.isMouseEntered = true;\n clearInterval(this.scrollMoveTimer);\n }\n };\n DocumentHelper.prototype.initDialog = function (isRtl) {\n if (!this.dialogInternal) {\n this.dialogTarget1 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget1.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget1);\n if (isRtl) {\n this.dialogTarget1.classList.add('e-de-rtl');\n }\n this.dialogInternal = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex + 20,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal.isStringTemplate = true;\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget1);\n }\n };\n DocumentHelper.prototype.initDialog3 = function (isRtl) {\n if (!this.dialogInternal3) {\n this.dialogTarget3 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget3.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget3);\n if (isRtl) {\n this.dialogTarget3.classList.add('e-de-rtl');\n }\n this.dialogInternal3 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal3.isStringTemplate = true;\n this.dialogInternal3.open = this.selection.hideCaret;\n this.dialogInternal3.beforeClose = this.updateFocus;\n this.dialogInternal3.appendTo(this.dialogTarget3);\n }\n };\n DocumentHelper.prototype.hideDialog = function () {\n this.dialog.hide();\n this.updateFocus();\n };\n DocumentHelper.prototype.initDialog2 = function (isRtl) {\n if (!this.dialogInternal2) {\n this.dialogTarget2 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget2.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget2);\n if (isRtl) {\n this.dialogTarget2.classList.add('e-de-rtl');\n }\n this.dialogInternal2 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: this.owner.zIndex + 10\n });\n this.dialogInternal2.isStringTemplate = true;\n this.dialogInternal2.appendTo(this.dialogTarget2);\n }\n };\n /**\n * Clears the context.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // Hide comment mark\n if (this.pageContainer) {\n var commentMarkElement = this.pageContainer.getElementsByClassName('e-de-cmt-mark');\n for (var i = 0; i < commentMarkElement.length; i++) {\n commentMarkElement[i].style.display = 'none';\n }\n }\n if (this.pageContainer) {\n var editRangeStart = this.pageContainer.getElementsByClassName('e-de-lock-mark');\n for (var i = 0; i < editRangeStart.length; i++) {\n editRangeStart[i].style.display = 'none';\n }\n }\n };\n /**\n * Fired when the document gets changed.\n *\n * @private\n * @param {BodyWidget[]} sections - Specified document content.\n * @returns {void}\n */\n DocumentHelper.prototype.onDocumentChanged = function (sections) {\n var _this = this;\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n this.layout.isDocumentContainsRtl = false;\n this.updateAuthorIdentity();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].bodyWidgets[0].destroy();\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.renderedLevelOverrides)) {\n this.renderedLevelOverrides = [];\n }\n if (!isNullOrUndefined(this.owner.editorHistory)) {\n this.owner.editorHistory.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.layout.isInitialLoad = true;\n this.layout.layoutItems(sections, false);\n if (this.owner.selection) {\n this.selection.previousSelectedFormField = undefined;\n if (this.formFields.length > 0) {\n this.owner.selection.highlightFormFields();\n }\n this.owner.selection.editRangeCollection = [];\n this.owner.selection.selectRange(this.owner.documentStart, this.owner.documentStart);\n if (this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(true);\n }\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.restrictEditingPane.restrictPane && !this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(false);\n }\n if (!isNullOrUndefined(this.owner.selection) && this.owner.selection.isViewPasteOptions) {\n this.owner.selection.isViewPasteOptions = false;\n this.owner.selection.showHidePasteOptions(undefined, undefined);\n }\n this.owner.fireDocumentChange();\n setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && _this.owner.showRevisions) {\n _this.showRevisions(true);\n }\n });\n };\n /**\n * Initialize touch ellipse.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;box-sizing: unset;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var pageTop = (page.boundingRectangle.y - (this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1));\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n DocumentHelper.prototype.scrollForwardOnSelection = function (cursorPoint) {\n if (this.viewerContainer) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop + 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selection.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.owner.selection.moveTextPosition(touchPoint, textPosition, true);\n }\n }\n };\n DocumentHelper.prototype.scrollBackwardOnSelection = function (cursorPoint) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop - 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selection.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.owner.selection.moveTextPosition(touchPoint, textPosition, true);\n }\n };\n DocumentHelper.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInShapeBorder = function (floatElement, cursorPoint) {\n if (!isNullOrUndefined(floatElement)) {\n var width = floatElement.width;\n var height = floatElement.height;\n if (this.isInsideRect(floatElement.x - floatElement.margin.left, floatElement.y - floatElement.margin.top, width, height, cursorPoint)) {\n // this.selectionLineWidget = this.getLineWidget(cursorPoint);\n if (floatElement instanceof ImageElementBox) {\n return true;\n }\n else if (floatElement instanceof ShapeElementBox) {\n var lineWidth = floatElement.lineFormat.weight;\n if (!(this.isInsideRect(floatElement.x + lineWidth, floatElement.y + lineWidth + floatElement.textFrame.marginTop, width - (lineWidth * 2), height - ((lineWidth * 2) + floatElement.textFrame.marginTop + floatElement.textFrame.marginBottom), cursorPoint))) {\n return true;\n }\n }\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n *\n * @private\n * @param {number} x - Specifies left position.\n * @param {number} y - Specifies top position.\n * @param {number} width - Specifies width.\n * @param {number} height - Specifies height\n * @param {Point} touchPoint - Specifies the point to check.\n * @returns {boolean} - Return true if points intersect.\n */\n DocumentHelper.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n DocumentHelper.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n *\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {boolean} - Returns true if left mouse button is clicked.\n */\n DocumentHelper.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n DocumentHelper.prototype.updateSelectionOnTouch = function (point, touchPoint) {\n this.zoomX = undefined;\n this.zoomY = undefined;\n if (this.isMouseDown && !this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (this.touchDownOnSelectionMark === 0) {\n this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), this.tapCount);\n if (this.tapCount === 2) {\n this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (this.owner.selection.isEmpty) {\n this.selection.updateCaretPosition();\n }\n this.selection.checkForCursorVisibility();\n if (!isNullOrUndefined(this.currentSelectedComment) && this.owner.commentReviewPane\n && !this.owner.commentReviewPane.commentPane.isEditMode) {\n this.currentSelectedComment = undefined;\n }\n }\n };\n /**\n * Gets touch offset value.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {Point} - Returns modified touch offset\n */\n DocumentHelper.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.pageX - offset.left;\n var offsetY = touchOffsetValues.pageY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {void}\n */\n DocumentHelper.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * @private\n */\n DocumentHelper.prototype.linkPageToHeaderFooter = function (currentPage) {\n if (currentPage.headerWidgetIn && currentPage.footerWidgetIn\n && isNullOrUndefined(currentPage.headerWidgetIn.parentHeaderFooter)\n && isNullOrUndefined(currentPage.footerWidgetIn.parentHeaderFooter)) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n if (page != currentPage) {\n if (page.headerWidgetIn.parentHeaderFooter === currentPage.headerWidgetIn) {\n page.headerWidgetIn = currentPage.headerWidget;\n page.headerWidgetIn.page = page;\n page.footerWidgetIn = currentPage.footerWidget;\n page.footerWidgetIn.page = page;\n break;\n }\n }\n }\n }\n };\n /**\n * Removes specified page.\n * @private\n * @param {Page} page - Specifies page to remove\n * @returns {void}\n */\n DocumentHelper.prototype.removePage = function (page, updateHeaderFooterPage) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n if (page.headerWidgetIn) {\n page.headerWidgetIn.page = undefined;\n }\n if (page.footerWidgetIn) {\n page.footerWidgetIn.page = undefined;\n }\n this.linkPageToHeaderFooter(page);\n var index = this.pages.indexOf(page);\n // if (index > -1) {\n this.pages.splice(index, 1);\n // } \n //this.removeRenderedPages();\n if (!isNullOrUndefined(this.owner.viewer.visiblePages)) {\n if ((this.owner.viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (this.owner.viewer.visiblePages).indexOf(page);\n (this.owner.viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n page.repeatHeaderRowTableWidget = false;\n }\n }\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var currentPage = start.paragraph.containerWidget.page;\n if (updateHeaderFooterPage) {\n this.owner.viewer.findFocusedPage(start.location, true, true, currentPage);\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateViewerSize = function () {\n var _this = this;\n var element = this.owner.getDocumentEditorElement();\n this.updateViewerSizeInternal(element);\n this.owner.viewer.updateScrollBars();\n if (this.owner.viewer instanceof WebLayoutViewer && (!isNullOrUndefined(this.owner)) && (!isNullOrUndefined(element))) {\n if (this.resizerTimer) {\n clearTimeout(this.resizerTimer);\n }\n /* eslint-disable @typescript-eslint/indent */\n this.resizerTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner)) {\n var currentVisibleWidth = void 0;\n if (!isNullOrUndefined(_this.visibleBounds)) {\n currentVisibleWidth = _this.visibleBounds.width;\n }\n else {\n currentVisibleWidth = 0;\n }\n if (isNullOrUndefined(_this.owner.viewer.preVisibleWidth)) {\n _this.owner.viewer.preVisibleWidth = 0;\n }\n if ((!isNullOrUndefined(_this.visibleBounds) && (currentVisibleWidth !== _this.owner.viewer.preVisibleWidth))) {\n _this.owner.editorModule.layoutWholeDocument();\n _this.owner.viewer.preVisibleWidth = currentVisibleWidth;\n }\n if (_this.resizerTimer) {\n clearTimeout(_this.resizerTimer);\n }\n }\n }, 50);\n }\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n };\n DocumentHelper.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var rect = element.getBoundingClientRect();\n var width = 0;\n var height = 0;\n height = rect.height > 0 ? rect.height : 200;\n var restrictPaneRect = this.restrictEditingPane && this.restrictEditingPane.isShowRestrictPane ?\n this.restrictEditingPane.restrictPane.getBoundingClientRect() : undefined;\n var optionsRect = this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow ?\n this.owner.optionsPaneModule.optionsPane.getBoundingClientRect() : undefined;\n var commentPane = this.owner.commentReviewPane && this.owner.commentReviewPane.parentPaneElement ?\n this.owner.commentReviewPane.parentPaneElement.getBoundingClientRect() : undefined;\n if (restrictPaneRect || optionsRect || commentPane) {\n var paneWidth = restrictPaneRect ? restrictPaneRect.width : 0;\n paneWidth += optionsRect ? optionsRect.width : 0;\n paneWidth += commentPane ? commentPane.width : 0;\n width = (rect.width - paneWidth) > 0 ? (rect.width - paneWidth) : 200;\n }\n else {\n width = rect.width > 0 ? rect.width : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n this.measureScrollbarWidth(element);\n }\n };\n /**\n * Inserts page in specified index.\n *\n * @private\n * @param {number} index - Specifes index to insert page\n * @param {Page} page - Page to insert.\n * @returns {void}\n */\n DocumentHelper.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(index, 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n DocumentHelper.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selection.selectCurrentWord();\n }\n else {\n this.owner.selection.selectParagraph();\n }\n }\n }\n };\n DocumentHelper.prototype.scrollToPosition = function (startPosition, endPosition, skipCursorUpdate) {\n if (this.skipScrollToPosition || this.isWebPrinting) {\n this.skipScrollToPosition = false;\n return;\n }\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var horizontalWidth = 0;\n var isPageLayout = this.owner.viewer instanceof PageLayoutViewer;\n var pageLayout = this.owner.viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * this.owner.viewer.pageGap * (1 - this.zoomFactor);\n var scrollTop = this.owner.viewer.containerTop;\n var scrollLeft = this.owner.viewer.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n if (!skipCursorUpdate) {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (this.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (this.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n }\n };\n DocumentHelper.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n DocumentHelper.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n var shapeElementInfo = this.checkFloatingItems(childWidgets, cursorPoint, isMouseDragged);\n if (shapeElementInfo.isShapeSelected) {\n if (shapeElementInfo.isInShapeBorder) {\n return shapeElementInfo.element.line;\n }\n return this.selection.getLineWidgetBodyWidget(shapeElementInfo.element.textFrame, cursorPoint);\n }\n else {\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n }\n else {\n var shapeInfo = this.checkFloatingItems(this.currentPage.bodyWidgets[0], cursorPoint, isMouseDragged, false);\n var behindShapeInfo = this.checkFloatingItems(this.currentPage.bodyWidgets[0], cursorPoint, isMouseDragged, true);\n if (shapeInfo.isShapeSelected && !this.isEmptyShape(shapeInfo)) {\n if (shapeInfo.isInShapeBorder) {\n return shapeInfo.element.line;\n }\n if (shapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(shapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (isMouseDragged && this.isFootnoteWidget) {\n if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined && this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n }\n else if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined &&\n this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget\n && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Endnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n }\n }\n else {\n if (!isMouseDragged && this.currentPage.footnoteWidget && this.isInFootnoteWidget(this.currentPage.footnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else if (!isMouseDragged && this.currentPage.endnoteWidget &&\n this.isInFootnoteWidget(this.currentPage.endnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else {\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidgets = this.currentPage.bodyWidgets[i];\n widget = this.selection.getLineWidgetBodyWidget(bodyWidgets, cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n }\n }\n var inlineShapeInfo = this.checkInlineShapeItems(widget, cursorPoint, isMouseDragged);\n if (inlineShapeInfo.isShapeSelected) {\n if (inlineShapeInfo.isInShapeBorder) {\n return inlineShapeInfo.element.line;\n }\n if (inlineShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(inlineShapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (!this.checkPointIsInLine(widget, cursorPoint) && behindShapeInfo.isShapeSelected) {\n if (behindShapeInfo.isInShapeBorder) {\n return behindShapeInfo.element.line;\n }\n if (behindShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(behindShapeInfo.element.textFrame, cursorPoint);\n }\n }\n }\n }\n return widget;\n };\n DocumentHelper.prototype.checkInlineShapeItems = function (widget, cursorPoint, isMouseDragged) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatingElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selection.getCurrentTextFrame();\n if (textFrame) {\n floatingElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = 0; i < widget.children.length; i++) {\n if (!(widget.children[i] instanceof ShapeElementBox && widget.children[i].textWrappingStyle === 'Inline')) {\n continue;\n }\n floatingElement = widget.children[i];\n if (cursorPoint.x < floatingElement.x + floatingElement.margin.left + floatingElement.width &&\n cursorPoint.x > floatingElement.x && cursorPoint.y < floatingElement.y + floatingElement.margin.top +\n floatingElement.height && cursorPoint.y > floatingElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatingElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatingElement,\n 'caretPosition': cursorPoint,\n 'isInShapeBorder': isInShapeBorder,\n 'isShapeSelected': isInShape\n };\n };\n /**\n * @private\n */\n DocumentHelper.prototype.checkPointIsInLine = function (widget, cursorPoint) {\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n var element = void 0;\n var left = widget.paragraph.x;\n var top_1 = this.selection.getTop(widget);\n for (var i = widget.children.indexOf(widget.children[0]); i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (cursorPoint.x < left + element.margin.left + element.width + element.padding.left\n && cursorPoint.x > left && cursorPoint.y < top_1 + widget.height && cursorPoint.y > top_1) {\n return true;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInFootnoteWidget = function (footnoteWidget, point) {\n for (var i = 0; i < footnoteWidget.bodyWidgets.length; i++) {\n for (var j = 0; j < footnoteWidget.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnoteWidget.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n return true;\n }\n }\n }\n return false;\n };\n DocumentHelper.prototype.checkFloatingItems = function (blockContainer, cursorPoint, isMouseDragged, isBehind) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (blockContainer.floatingElements.length > 0) {\n var page = this.currentPage;\n /* eslint-disable */\n blockContainer.floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selection.getCurrentTextFrame();\n if (textFrame) {\n floatElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = 0; i < blockContainer.floatingElements.length; i++) {\n if (blockContainer.floatingElements[i] instanceof TableWidget\n || (!isNullOrUndefined(isBehind) && isBehind ? blockContainer.floatingElements[i].textWrappingStyle !== 'Behind' : blockContainer.floatingElements[i].textWrappingStyle === 'Behind')) {\n continue;\n }\n floatElement = blockContainer.floatingElements[i];\n if (cursorPoint.x < floatElement.x + floatElement.margin.left + floatElement.width &&\n cursorPoint.x > floatElement.x && cursorPoint.y < floatElement.y + floatElement.margin.top +\n floatElement.height && cursorPoint.y > floatElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': cursorPoint,\n 'isShapeSelected': isInShape,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n DocumentHelper.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n if (block instanceof TextFrame) {\n block = block.containerShape.paragraph;\n }\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n DocumentHelper.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selection.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[0].childWidgets.length === 0) {\n if (j === this.pages.length - 1 && this.owner.viewer instanceof PageLayoutViewer && this.owner.viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n DocumentHelper.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = '';\n if (fieldCodes.length > 1) {\n if (fieldCodes[1] !== ' MERGEFORMAT') {\n fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n }\n }\n if (fieldPattern == '') {\n fieldPattern = page.bodyWidgets[0].sectionFormat.pageNumberStyle;\n }\n fieldCategory = (!fieldCategory.match('numpages') && !fieldCategory.match('sectionpages') &&\n fieldCategory.match('page')) ? 'page' : fieldCategory;\n switch (fieldCategory) {\n case 'page':\n if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex !== 0) {\n var currentSectionIndex_1 = page.sectionIndex;\n var previousPage = page.previousPage;\n if (currentSectionIndex_1 !== previousPage.sectionIndex) {\n page.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n if (previousPage.currentPageNum === 1) {\n previousPage.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n }\n page.currentPageNum = previousPage.currentPageNum + 1;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n else if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex === 0) {\n page.currentPageNum = page.bodyWidgets[0].sectionFormat.pageStartingNumber + page.index;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n page.currentPageNum = (!isNullOrUndefined(page.previousPage)) ? page.previousPage.currentPageNum + 1 : page.index + 1;\n page.currentPageNum = page.index + 1;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n case 'numpages':\n return this.getFieldText(fieldPattern, page.documentHelper.pages.length);\n case 'sectionpages':\n var currentSectionIndex = page.sectionIndex;\n var currentPageCount = 0;\n for (var i = 0; i < page.documentHelper.pages.length; i++) {\n if (page.documentHelper.pages[i].sectionIndex === currentSectionIndex) {\n currentPageCount++;\n }\n else if (currentPageCount !== 0) {\n break;\n }\n }\n return this.getFieldText(fieldPattern, currentPageCount);\n default:\n break;\n }\n }\n return '';\n };\n DocumentHelper.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanUpper':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanLower':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'LetterUpper':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'LetterLower':\n return this.layout.getAsLetter(value).toLowerCase();\n default:\n return value.toString();\n }\n };\n DocumentHelper.prototype.isEmptyShape = function (shape) {\n var isEmpty = true;\n if (shape.element instanceof ImageElementBox) {\n return isEmpty;\n }\n var textFrame = shape.element.textFrame;\n if (textFrame.childWidgets.length === 0) {\n return isEmpty;\n }\n else if (textFrame.childWidgets.length === 1 && textFrame.childWidgets[0] instanceof ParagraphWidget && (textFrame.childWidgets[0].childWidgets.length === 0 ||\n (textFrame.childWidgets[0].childWidgets.length === 1 && textFrame.childWidgets[0].childWidgets[0].children.length === 0))) {\n return isEmpty;\n }\n else {\n return false;\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n this.pages = [];\n this.pages = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n this.abstractLists = [];\n this.abstractLists = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.renderedLists.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.authors.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.revisionsInternal.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.preDefinedStyles.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.bookmarks.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.editRanges.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.customXmlData.destroy();\n }\n this.blockToShift = undefined;\n this.cachedPages = [];\n this.cachedPages = undefined;\n this.characterFormat = undefined;\n this.comments = [];\n this.comments = undefined;\n this.compositionEnd = undefined;\n this.compositionStart = undefined;\n this.compositionUpdated = undefined;\n this.contentControlCollection = [];\n this.contentControlCollection = undefined;\n this.fieldCollection = [];\n this.fieldCollection = undefined;\n this.renderedLevelOverrides = [];\n this.renderedLevelOverrides = undefined;\n this.headersFooters = [];\n this.headersFooters = undefined;\n this.lists = [];\n this.lists = undefined;\n this.comments = [];\n this.comments = undefined;\n this.listParagraphs = [];\n this.listParagraphs = undefined;\n this.formFields = [];\n this.formFields = undefined;\n this.fieldCollection = [];\n this.fieldCollection = undefined;\n this.userCollection = [];\n this.userCollection = undefined;\n this.cachedPages = [];\n this.cachedPages = undefined;\n this.footnoteCollection = [];\n this.footnoteCollection = undefined;\n this.endnoteCollection = [];\n this.endnoteCollection = undefined;\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogInternal2) {\n this.dialogInternal2.destroy();\n this.dialogInternal2 = undefined;\n }\n if (this.dialogInternal3) {\n this.dialogInternal3.destroy();\n this.dialogInternal3 = undefined;\n }\n if (this.dialogTarget1 && this.dialogTarget1.parentElement) {\n this.dialogTarget1.parentElement.removeChild(this.dialogTarget1);\n }\n this.dialogTarget1 = undefined;\n if (this.dialogTarget2 && this.dialogTarget2.parentElement) {\n this.dialogTarget2.parentElement.removeChild(this.dialogTarget2);\n }\n this.dialogTarget2 = undefined;\n if (this.dialogTarget3 && this.dialogTarget3.parentElement) {\n this.dialogTarget3.parentElement.removeChild(this.dialogTarget3);\n }\n this.dialogTarget3 = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n }\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n this.touchStart = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n this.editableDiv.parentElement.removeChild(this.editableDiv);\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n }\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.innerHTML = '';\n this.iframe = undefined;\n }\n this.viewerContainer = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n };\n /**\n * Un-Wires events and methods\n *\n * @returns {void}\n */\n DocumentHelper.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n if (!Browser.isDevice) {\n this.editableDiv.removeEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.removeEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.removeEventListener('load', this.onIframeLoad);\n }\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer.bind(this));\n window.removeEventListener('touchend', this.onImageResizer.bind(this));\n };\n DocumentHelper.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var footnoteElement = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.owner.viewer.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var floatItemInfo = this.selection.checkAllFloatingElements(widget, touchPoint);\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n var formField = undefined;\n var referenceField = undefined;\n var isInInline = this.checkPointIsInLine(widget, touchPoint);\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n if (isNullOrUndefined(hyperlinkField)) {\n formField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n }\n if (!isNullOrUndefined(hyperlinkField)) {\n var code = this.selection.getFieldCode(hyperlinkField);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n hyperlinkField = undefined;\n }\n }\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n if (isNullOrUndefined(hyperlinkField) && !isNullOrUndefined(formField) && this.isDocumentProtected &&\n this.protectionType === 'FormFieldsOnly' && !this.isFormFilling) {\n this.selection.setHyperlinkContentToToolTip(formField, widget, touchPoint.x, true);\n }\n else {\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x, false);\n }\n if (formField) {\n var isInlineFormFillMode = (formField.formFieldData instanceof TextFormField) && formField.formFieldData.type === 'Text';\n if (this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline' && isInlineFormFillMode) {\n //Update text cursor in text form field.\n formField = undefined;\n }\n }\n if (this.owner.enableLockAndEdit) {\n var isLocked = false;\n var block = widget.paragraph;\n if (block.isInsideTable) {\n block = this.layout.getParentTable(block);\n }\n if (block.locked && block.lockedBy !== this.owner.currentUser) {\n isLocked = true;\n }\n var sectionFormat = widget.paragraph.bodyWidget.sectionFormat;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor;\n if (this.viewer instanceof WebLayoutViewer) {\n pageWidth = (this.visibleBounds.width - (this.viewer.padding.right * 5)) / this.zoomFactor;\n }\n if (isLocked && touchPoint.x >= lineLeft && touchPoint.x < lineLeft + pageWidth) {\n this.selection.setLockInfoTooptip(widget, touchPoint.x, block.lockedBy);\n }\n else {\n this.selection.setLockInfoTooptip(undefined, touchPoint.x, '');\n }\n }\n }\n if (!isNullOrUndefined(widget)) {\n if (isNullOrUndefined(footnoteElement) && this.owner.layoutType == 'Pages') {\n footnoteElement = this.selection.getFootNoteElementInCurrentSelection(widget, touchPoint);\n if (footnoteElement instanceof FootnoteElementBox) {\n this.selection.setFootnoteContentToToolTip(footnoteElement, widget, touchPoint.x);\n }\n }\n }\n var isCtrlkeyPressed = this.isIosDevice ? event.metaKey : event.ctrlKey;\n if ((!isNullOrUndefined(hyperlinkField) && (isCtrlkeyPressed &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) || formField) {\n if (!isNullOrUndefined(formField)) {\n if (this.isFormFillProtectedMode) {\n div.style.cursor = 'default';\n }\n }\n else {\n div.style.cursor = 'pointer';\n }\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n if (!this.owner.imageResizerModule.isShapeResize || this.owner.imageResizerModule.isShapeResize && resizePosition !== 'move') {\n div.style.cursor = resizePosition;\n }\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n if (floatItemInfo.isInShapeBorder && !isInInline) {\n div.style.cursor = 'all-scroll';\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.updateDialogTabHeight = function (dialogElement, targetElement) {\n var header = dialogElement.getElementsByClassName('e-dlg-header-content')[0];\n var contentElement = dialogElement.getElementsByClassName('e-dlg-content')[0];\n var footer = dialogElement.getElementsByClassName('e-footer-content')[0];\n var contentStyle = getComputedStyle(contentElement);\n var dialogStyle = getComputedStyle(dialogElement);\n var paddingTop = parseInt(contentStyle.paddingTop, 10);\n var paddingBottom = parseInt(contentStyle.paddingBottom, 10);\n var paddingVertical = (isNaN(paddingTop) ? 0 : paddingTop) + (isNaN(paddingBottom) ? 0 : paddingBottom);\n var borderTop = parseInt(dialogStyle.borderTop, 10);\n var borderBottom = parseInt(dialogStyle.borderBottom, 10);\n var borderVertical = (isNaN(borderTop) ? 0 : borderTop) + (isNaN(borderBottom) ? 0 : borderBottom);\n var contentHeight = dialogElement.offsetHeight - (header.offsetHeight + footer.offsetHeight + paddingVertical + borderVertical);\n targetElement.style.height = contentHeight + 'px';\n var paddingLeft = parseInt(contentStyle.paddingLeft, 10);\n var paddingRight = parseInt(contentStyle.paddingRight, 10);\n var paddingHorizontal = (isNaN(paddingLeft) ? 0 : paddingLeft) + (isNaN(paddingRight) ? 0 : paddingRight);\n var borderLeft = parseInt(dialogStyle.borderLeft, 10);\n var borderRight = parseInt(dialogStyle.borderRight, 10);\n var borderHorizontal = (isNaN(borderLeft) ? 0 : borderLeft) + (isNaN(borderRight) ? 0 : borderRight);\n var contentWidth = dialogElement.offsetWidth - (paddingHorizontal + borderHorizontal);\n return contentWidth;\n };\n /**\n *\n * @private\n */\n DocumentHelper.prototype.canRenderBorder = function (paragraph) {\n var skipTopBorder = false;\n var skipBottomBorder = false;\n var isSamePreviousBorder;\n var isSameNextBorder;\n var isSameTopBorder;\n var isSameBottomBorder;\n var isSameLeftBorder;\n var isSameRightBorder;\n var previousBlock = paragraph.previousRenderedWidget;\n var nextBlock = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(previousBlock) && previousBlock instanceof ParagraphWidget && paragraph.x === previousBlock.x) {\n isSamePreviousBorder = paragraph.paragraphFormat.borders.top.isEqualFormat(previousBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = paragraph.paragraphFormat.borders.left.isEqualFormat(previousBlock.paragraphFormat.borders.left, true);\n isSameRightBorder = paragraph.paragraphFormat.borders.right.isEqualFormat(previousBlock.paragraphFormat.borders.right, true);\n if (isSamePreviousBorder && isSameLeftBorder && isSameRightBorder\n && previousBlock.paragraphFormat.borders.horizontal.lineStyle === 'None') {\n skipTopBorder = true;\n }\n }\n if (!isNullOrUndefined(nextBlock) && nextBlock instanceof ParagraphWidget && paragraph.x === nextBlock.x) {\n isSameNextBorder = paragraph.paragraphFormat.borders.bottom.isEqualFormat(nextBlock.paragraphFormat.borders.top);\n isSameTopBorder = paragraph.paragraphFormat.borders.top.isEqualFormat(nextBlock.paragraphFormat.borders.top);\n isSameBottomBorder = paragraph.paragraphFormat.borders.bottom.isEqualFormat(nextBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = paragraph.paragraphFormat.borders.left.isEqualFormat(nextBlock.paragraphFormat.borders.left, true);\n isSameRightBorder = paragraph.paragraphFormat.borders.right.isEqualFormat(nextBlock.paragraphFormat.borders.right, true);\n if (isSameNextBorder && isSameBottomBorder && isSameTopBorder && isSameLeftBorder && isSameRightBorder) {\n skipBottomBorder = true;\n }\n }\n return {\n 'skipTopBorder': skipTopBorder,\n 'skipBottomBorder': skipBottomBorder\n };\n };\n return DocumentHelper;\n}());\nexport { DocumentHelper };\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n function LayoutViewer(owner) {\n /**\n * @private\n */\n this.visiblePages = [];\n /**\n * @private\n */\n this.padding = new Padding(10, 10, 10, 10);\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n this.owner = owner;\n }\n Object.defineProperty(LayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.updateClientArea = function (sectionFormat, page, isReLayout) {\n var width = 0;\n var height = 0;\n if (this instanceof WebLayoutViewer) {\n var top_2 = 0;\n width = (this.documentHelper.visibleBounds.width - (this.padding.right * 4) - (this.padding.left * 2)) / this.documentHelper.zoomFactor;\n if (width < 0) {\n width = 0;\n }\n height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(this.padding.left / this.documentHelper.zoomFactor, top_2, width, height);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n else {\n var top_3 = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(sectionFormat)) {\n top_3 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n var isEmptyWidget = false;\n if (!isNullOrUndefined(page.headerWidget)) {\n isEmptyWidget = page.headerWidget.isEmpty;\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n top_3 = Math.min(Math.max(headerDistance + page.headerWidget.height, top_3), pageHeight / 100 * 40);\n }\n }\n var bottom = 0.667 + bottomMargin;\n if (!isNullOrUndefined(page.footerWidget)) {\n isEmptyWidget = page.footerWidget.isEmpty;\n var footnoteHeight = !isNullOrUndefined(page.footnoteWidget) ? page.footnoteWidget.height : 0;\n footnoteHeight = Math.min(footnoteHeight, ((pageHeight - top_3 - bottom) / 100 * 90));\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n bottom = 0.667 + Math.min(pageHeight / 100 * 40, Math.max(footerDistance + page.footerWidget.height, bottomMargin));\n }\n bottom += footnoteHeight;\n }\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = pageHeight - top_3 - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top_3, width, pageHeight - top_3 - bottom);\n if (page.footnoteWidget && isReLayout && !this.documentHelper.owner.editor.isFootNote) {\n if (page.footnoteWidget.y !== 0 && this.clientArea.y + this.clientArea.height > page.footnoteWidget.y) {\n var sub = (this.clientArea.y + this.clientArea.height - page.footnoteWidget.y);\n this.clientArea.height -= sub / 2;\n }\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForTextBoxShape = function (textBox, beforeLayout) {\n if (textBox.textWrappingStyle === 'Inline') {\n textBox.y = this.clientActiveArea.y;\n textBox.x = this.clientActiveArea.x;\n }\n if (beforeLayout) {\n var marginLeft = HelperMethods.convertPointToPixel(textBox.textFrame.marginLeft);\n var marginRight = HelperMethods.convertPointToPixel(textBox.textFrame.marginRight);\n var marginTop = HelperMethods.convertPointToPixel(textBox.textFrame.marginTop);\n var marginBottom = HelperMethods.convertPointToPixel(textBox.textFrame.marginBottom);\n var width = textBox.width;\n var height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(textBox.x + marginLeft, textBox.y + marginTop, width - marginLeft - marginRight, height - marginTop - marginBottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaByWidgetFootNote = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTextWrap = function (area) {\n this.clientActiveArea = new Rect(area.x, area.y, area.width, area.height);\n };\n LayoutViewer.prototype.updateClientAreaByWidget = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n var bidi = block.bidi;\n var width = 0;\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n }\n else {\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (tableAlignment !== 'Left') {\n var tableWidth = 0;\n // If the grid is calculated, we can direclty get the width from the grid.\n // Otherwise, calculate the width.\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.getTotalWidth(0));\n tableWidth = tableWidth === 0 ? block.tableHolder.tableWidth === 0 ?\n block.getTableClientWidth(block.getOwnerWidth(false)) : block.tableHolder.tableWidth : tableWidth;\n // Fore resizing table, the tableholder table width taken for updated width. \n // Since, the columns will be cleared if we performed resizing.\n if (this.owner.editor && this.owner.editor.tableResize.currentResizingTable === block\n && this.owner.editor.tableResize.resizerPosition === 0) {\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.tableWidth);\n }\n if (tableAlignment === 'Center') {\n tableWidth = block.getTableCellWidth();\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n if (bidi) {\n leftIndent = leftIndent - HelperMethods.convertPointToPixel(block.leftIndent);\n rightIndent = leftIndent;\n }\n if (!block.isInsideTable) {\n //leftIndent = (block.tableFormat.horizontalPositionAbs === 'Left') ? block.tableFormat.horizontalPosition : leftIndent;\n }\n this.documentHelper.tableLefts.push(leftIndent);\n }\n }\n width = this.clientArea.width - (leftIndent + HelperMethods.convertPointToPixel(block.rightIndent));\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x + (bidi ? rightIndent : leftIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n }\n }\n else {\n // Clears table left for table with right or center alignment.\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n if (tableAlignment !== 'Left' && this.documentHelper.tableLefts.length > 0) {\n leftIndent = this.documentHelper.tableLefts.pop();\n if (bidi) {\n rightIndent = leftIndent;\n }\n }\n }\n width = this.clientArea.width + leftIndent + HelperMethods.convertPointToPixel(block.rightIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x - (bidi ? rightIndent : leftIndent);\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n };\n LayoutViewer.prototype.tableAlignmentForBidi = function (block, bidi) {\n var tableAlignment = block.tableFormat.tableAlignment;\n if (bidi) {\n if (tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n return tableAlignment;\n };\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n LayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage, updateHeaderFooterPage, updatePage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.documentHelper.viewerContainer.scrollLeft;\n point.y += this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.documentHelper.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = void 0;\n if (this instanceof PageLayoutViewer) {\n pageRight = ((page.boundingRectangle.right - pageLeft) * this.documentHelper.zoomFactor) + pageLeft;\n }\n else {\n pageRight = page.boundingRectangle.right + pageLeft;\n }\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.documentHelper.currentPage = page;\n if (updateHeaderFooterPage) {\n this.updateHeaderFooterPageInstance(page);\n }\n }\n point.y = (point.y - (pageTop)) / this.documentHelper.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.documentHelper.zoomFactor;\n }\n return point;\n }\n if (!isNullOrUndefined(updatePage)) {\n this.updateHeaderFooterPageInstance(updatePage);\n }\n }\n if (!isNullOrUndefined(updatePage)) {\n this.updateHeaderFooterPageInstance(updatePage);\n }\n return point;\n };\n LayoutViewer.prototype.updateHeaderFooterPageInstance = function (page) {\n if (!isNullOrUndefined(page.headerWidget)) {\n page.headerWidget.page = page;\n }\n if (!isNullOrUndefined(page.footerWidget)) {\n page.footerWidget.page = page;\n }\n };\n LayoutViewer.prototype.getPageHeightAndWidth = function (height, width, viewerWidth, viewerHeight) {\n height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n height = height + this.documentHelper.pages[i].boundingRectangle.height;\n }\n width = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (width < this.documentHelper.pages[i].boundingRectangle.width) {\n width = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n //this.documentHelper.visibleBoundsIn = new Rect(0, 0, width, height);\n viewerWidth = this.documentHelper.visibleBounds.width;\n viewerHeight = this.documentHelper.visibleBounds.height;\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight\n };\n };\n LayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.documentHelper.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n this.owner.viewer.renderPage(page, x, y, width, height);\n }\n };\n /* eslint-disable */\n LayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.documentHelper.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.documentHelper.selection && isNullOrUndefined(this.documentHelper.zoomX && isNullOrUndefined(this.documentHelper.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.documentHelper.selection.getPage(this.documentHelper.selection.end.currentWidget.paragraph);\n x = (this.documentHelper.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.documentHelper.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.documentHelper.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.documentHelper.selection.end.location.x) * prevScaleFactor;\n y += (this.documentHelper.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.documentHelper.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.documentHelper.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n verticalHeight = verticalHeight + this.documentHelper.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (horizontalWidth < this.documentHelper.pages[i].boundingRectangle.width) {\n horizontalWidth = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n var height = (verticalHeight * this.documentHelper.zoomFactor + (this.documentHelper.pages.length + 1) * this.pageGap * (1 - this.documentHelper.zoomFactor)) - this.documentHelper.visibleBounds.height;\n var horWidth = horizontalWidth * this.documentHelper.zoomFactor - this.documentHelper.visibleBounds.width;\n if (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.documentHelper.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.documentHelper.pages.length) {\n break;\n }\n page = this.documentHelper.pages[pageIndex];\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.documentHelper.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.documentHelper.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n this.documentHelper.viewerContainer.scrollTop = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.documentHelper.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.documentHelper.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n this.documentHelper.viewerContainer.scrollLeft = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.documentHelper.scrollToPosition(this.documentHelper.selection.start, this.documentHelper.selection.end);\n }\n if (this instanceof WebLayoutViewer) {\n this.owner.editorModule.layoutWholeDocument();\n }\n };\n LayoutViewer.prototype.updateCanvasWidthAndHeight = function (viewerWidth, viewerHeight, containerHeight, containerWidth, width, height) {\n if (this instanceof PageLayoutViewer) {\n if (this.documentHelper.visibleBounds.width !== this.documentHelper.viewerContainer.clientWidth) {\n viewerWidth -= (this.documentHelper.visibleBounds.width - this.documentHelper.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.viewerContainer.offsetWidth - this.documentHelper.viewerContainer.clientWidth;\n }\n }\n else {\n if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.scrollbarWidth;\n containerWidth -= this.documentHelper.scrollbarWidth;\n }\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= this.documentHelper.scrollbarWidth;\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.documentHelper.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.documentHelper.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.documentHelper.pageContainer.style.width = width.toString() + 'px';\n this.documentHelper.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.documentHelper.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.documentHelper.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.documentHelper.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.containerCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.containerCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.documentHelper.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.selectionCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.selectionCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight,\n 'containerHeight': containerHeight,\n 'containerWidth': containerWidth\n };\n };\n LayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n this.owner.viewer.containerTop = this.documentHelper.viewerContainer.scrollTop;\n this.documentHelper.containerCanvas.style.position = 'absolute';\n this.documentHelper.containerCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.documentHelper.selectionCanvas.style.position = 'absolute';\n this.documentHelper.selectionCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.owner.viewer.containerLeft = this.documentHelper.viewerContainer.scrollLeft;\n this.documentHelper.containerCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n this.documentHelper.selectionCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n };\n LayoutViewer.prototype.destroy = function () {\n this.clientArea = undefined;\n this.clientActiveArea = undefined;\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n // if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n // return;\n // }\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(PageLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.pageGap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page(this.documentHelper);\n this.updatePageBoundingRectangle(section, page, yPos);\n if (isNullOrUndefined(index)) {\n this.documentHelper.pages.push(page);\n }\n else {\n this.documentHelper.pages.splice(index, 0, page);\n }\n this.updateClientArea(section.sectionFormat, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n if (this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo && this.owner.editorHistory.currentHistoryInfo.action === 'Paste') {\n this.documentHelper.layout.layoutHeaderFooter(page.previousPage.bodyWidgets[0], viewer, page.previousPage);\n }\n this.documentHelper.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section.sectionFormat, page);\n return page;\n };\n PageLayoutViewer.prototype.updatePageBoundingRectangle = function (section, page, yPosition) {\n //page.viewer = this;\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.documentHelper.visibleBounds.width - pageWidth * this.documentHelper.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPosition, pageWidth, pageHeight);\n };\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.documentHelper.visibleBounds.width;\n var height = this.documentHelper.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.documentHelper.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.documentHelper.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(this.owner.selection.start) &&\n !isNullOrUndefined(this.owner.selection.end)) {\n this.documentHelper.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n }\n else {\n this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.documentHelper.zoomFactor = (this.documentHelper.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.documentHelper.zoomFactor = 100 / 100;\n break;\n }\n };\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n var page = section.page;\n if (section.sectionFormat.differentFirstPage && (isNullOrUndefined(page.previousPage) || page.sectionIndex !== page.previousPage.sectionIndex)) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && this.documentHelper.pages.length % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.documentHelper.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n var currentSecIndex = sectionIndex > 0 ? sectionIndex - 1 : sectionIndex;\n while (!headerFooter && currentSecIndex !== -1 && this.documentHelper.headersFooters[currentSecIndex][index]) {\n headerFooter = this.documentHelper.headersFooters[currentSecIndex][index];\n currentSecIndex--;\n }\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n headerFooter.isEmpty = true;\n }\n this.documentHelper.headersFooters[sectionIndex][index] = headerFooter;\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n return headerFooter;\n };\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, Number.POSITIVE_INFINITY);\n }\n else {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, Number.POSITIVE_INFINITY);\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n PageLayoutViewer.prototype.updateHeaderFooterClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n };\n PageLayoutViewer.prototype.updateFootnoteClientArea = function (sectionFormat, footnote, footNoteType, para) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n var left = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var top = HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - Math.max(footerDistance + footnote.page.footerWidget.height, bottomMargin);\n this.clientArea = new Rect(left, top, width, Number.POSITIVE_INFINITY);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, Number.POSITIVE_INFINITY);\n };\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n top = this.documentHelper.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.documentHelper.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = (updatePositionObj.width * this.documentHelper.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (updatePositionObj.height * this.documentHelper.zoomFactor) + (this.documentHelper.pages.length + 1) * this.pageGap;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n containerHeight = updateObj.containerHeight;\n containerWidth = updateObj.containerWidth;\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var left = (updateObj.width - this.documentHelper.pages[i].boundingRectangle.width * this.documentHelper.zoomFactor) / 2;\n if (left > this.pageLeft) {\n this.documentHelper.pages[i].boundingRectangle = new Rect(left, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n else {\n this.documentHelper.pages[i].boundingRectangle = new Rect(this.pageLeft, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n // Clears the container first.\n this.visiblePages = [];\n var height = this.documentHelper.visibleBounds.height;\n var vertical = this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var pageH = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var left = page.boundingRectangle.x;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, left, y);\n }\n }\n };\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.owner.isSpellCheck && this.owner.spellChecker.enableOptimizedSpellCheck && (this.documentHelper.triggerElementsOnLoading || this.documentHelper.isScrollHandler) && this.documentHelper.cachedPages.indexOf(page.index) < 0) {\n this.documentHelper.cachedPages.push(page.index);\n var content = this.owner.spellChecker.getPageContent(page);\n if (content.trim().length > 0) {\n page.allowNextPageRendering = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellChecker.callSpellChecker(this.owner.spellChecker.languageID, content, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n _this.owner.spellChecker.updateUniqueWords(jsonObject.SpellCollection);\n page.allowNextPageRendering = true;\n _this.documentHelper.triggerSpellCheck = true;\n _this.renderPage(page, x, y, width, height);\n _this.documentHelper.triggerSpellCheck = false;\n _this.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\nvar WebLayoutViewer = /** @class */ (function (_super) {\n __extends(WebLayoutViewer, _super);\n function WebLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n /**\n * @private\n */\n _this.visiblePages = [];\n /* if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return;\n }*/\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(WebLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WebLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates new page.\n * @private\n */\n WebLayoutViewer.prototype.createNewPage = function (section, index) {\n var page;\n var yPos = 0;\n var x = 10;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom;\n }\n page = new Page(this.documentHelper);\n if (this.documentHelper.pages.length === 0) {\n page.boundingRectangle = new Rect(x, yPos, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n else {\n page.boundingRectangle = new Rect(x, yPos - 20, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n this.documentHelper.pages.push(page);\n this.updateClientArea(undefined, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n return page;\n };\n WebLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n this.documentHelper.zoomFactor = 1;\n };\n WebLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n this.updateScrollBars();\n };\n WebLayoutViewer.prototype.getContentHeight = function () {\n var height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if (i === 0) {\n height += this.padding.top;\n page.boundingRectangle.y = this.padding.top;\n }\n else {\n page.boundingRectangle.y = this.documentHelper.pages[i - 1].boundingRectangle.bottom;\n }\n page.boundingRectangle.height = page.bodyWidgets[0].height;\n height += page.bodyWidgets[0].height;\n if (i === this.documentHelper.pages.length - 1) {\n height += this.padding.bottom;\n }\n }\n return height;\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.getContentWidth = function () {\n var width = this.documentHelper.visibleBounds.width;\n var currentWidth = width;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets[0].childWidgets.length; j++) {\n if (page.bodyWidgets[0].childWidgets[j] instanceof TableWidget) {\n var tableWidget = page.bodyWidgets[0].childWidgets[j];\n var tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth()) *\n this.documentHelper.zoomFactor + this.padding.left * 4 + this.padding.right * 4\n + page.boundingRectangle.x;\n if (currentWidth < tableWidth) {\n width = tableWidth;\n currentWidth = tableWidth;\n }\n }\n }\n page.boundingRectangle.width = width;\n }\n return width;\n };\n WebLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = this.getContentWidth() * this.documentHelper.zoomFactor + this.padding.left + this.padding.right;\n var containerHeight = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n WebLayoutViewer.prototype.updateVisiblePages = function () {\n this.visiblePages = [];\n var page;\n var y;\n var height = this.documentHelper.visibleBounds.height;\n var vertical = this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n page = this.documentHelper.pages[i];\n y = (page.boundingRectangle.y) * this.documentHelper.zoomFactor;\n var pageH = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, this.padding.left, y);\n }\n }\n };\n WebLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = this.getContentWidth();\n var height = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.documentHelper.owner.isSpellCheck && this.documentHelper.owner.spellChecker.enableOptimizedSpellCheck && (this.owner.documentHelper.triggerElementsOnLoading || this.owner.documentHelper.isScrollHandler) && this.documentHelper.cachedPages.indexOf(page.index) < 0) {\n this.owner.documentHelper.cachedPages.push(page.index);\n var contentlen = this.documentHelper.owner.spellChecker.getPageContent(page);\n if (contentlen.trim().length > 0) {\n page.allowNextPageRendering = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellChecker.callSpellChecker(this.owner.spellChecker.languageID, contentlen, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObj = JSON.parse(data);\n _this.owner.spellChecker.updateUniqueWords(jsonObj.SpellCollection);\n page.allowNextPageRendering = true;\n _this.owner.documentHelper.triggerSpellCheck = true;\n _this.renderPage(page, x, y, width, height);\n _this.owner.documentHelper.triggerSpellCheck = false;\n _this.owner.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return WebLayoutViewer;\n}(LayoutViewer));\nexport { WebLayoutViewer };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/* eslint-disable */\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CharacterRangeType } from '../../base/types';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { WebLayoutViewer } from './viewer';\nimport { Revision } from '../track-changes/track-changes';\n/**\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param currentBound\n * @private\n */\n Rect.prototype.isIntersecting = function (currentBound) {\n if (currentBound.y > this.bottom || this.y > currentBound.bottom ||\n currentBound.x > this.right || this.x > currentBound.right) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Rect.prototype.clone = function () {\n return new Rect(this.x, this.y, this.width, this.height);\n };\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Padding = /** @class */ (function () {\n function Padding(right, left, top, bottom) {\n this.right = 10;\n this.left = 10;\n this.top = 10;\n this.bottom = 10;\n this.right = right;\n this.left = left;\n this.top = top;\n this.bottom = bottom;\n }\n return Padding;\n}());\nexport { Padding };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n if (this.containerWidget instanceof FootNoteWidget) {\n return this.containerWidget.bodyWidgets.indexOf(this);\n }\n else {\n return this.page.bodyWidgets.indexOf(this);\n }\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof FootNoteWidget) {\n return 0;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n get: function () {\n if (this.childWidgets) {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else if ((widget.containerWidget instanceof FootNoteWidget) && !widget.page.documentHelper.owner.editor.removeEditRange) {\n if (index <= 0) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.previousPage) {\n page = page.previousPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n previousContainer = widget.containerWidget.previousWidget ? widget.containerWidget.previousWidget : widget.containerWidget.previousRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else if (widget.containerWidget instanceof FootNoteWidget) {\n if (index >= widget.containerWidget.bodyWidgets.length - 1 && !widget.page.documentHelper.owner.editor.removeEditRange) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index + 1];\n }\n else if (widget.page.allowNextPageRendering) {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n else {\n widget = undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.allowNextPageRendering && page.nextPage) {\n page = page.nextPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n nextContainer = widget.containerWidget.nextWidget ? widget.containerWidget.nextWidget : widget.containerWidget.nextRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0 && !(nextContainer instanceof TableCellWidget)) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (widget instanceof BodyWidget && previous instanceof BodyWidget && widget.equals(previous)) {\n return previous;\n }\n else if (previous instanceof BlockWidget && widget.index === previous.index && widget.equals(previous)) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (widget instanceof BodyWidget && next instanceof BodyWidget && widget.equals(next)) {\n return next;\n }\n else if (next instanceof BlockWidget && widget.index === next.index && widget.equals(next)) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n }\n return widgets;\n };\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n this.childWidgets.push(widget);\n }\n };\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.floatingElements = [];\n /**\n * @private\n */\n _this.footNoteReference = undefined;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (!isNullOrUndefined(container.page.bodyWidgets) && container.page) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockContainer.prototype, \"sectionIndex\", {\n get: function () {\n var container = this;\n var index = 0;\n if (container instanceof BodyWidget) {\n index = container.index;\n }\n else if (container.page) {\n index = container.page.bodyWidgets[0].index;\n }\n return index;\n },\n enumerable: true,\n configurable: true\n });\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else if (node instanceof FootNoteWidget) {\n if (node.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node.containerWidget instanceof FootNoteWidget) {\n hierarchicalIndex = node.containerWidget.bodyWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.containerWidget.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var childWidget = this.childWidgets[i];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= touchPoint.x && (childWidget.x + tableWidth) >= touchPoint.x &&\n childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y))) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormat) {\n // this.sectionFormat.destroy();\n // }\n this.sectionFormat = undefined;\n if (this.page && this.page.headerWidgetIn) {\n this.page.headerWidgetIn.page = undefined;\n }\n if (this.page && this.page.footerWidgetIn) {\n this.page.footerWidgetIn.page = undefined;\n }\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isEmpty = false;\n _this.headerFooterType = type;\n return _this;\n }\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var child = this.childWidgets[i];\n var tableWidth = 0;\n if (child.wrapTextAround) {\n tableWidth = child.getTableCellWidth();\n }\n if (!(child.wrapTextAround) && child.y <= point.y && (child.y + child.height) >= point.y) {\n return child.getTableCellWidget(point);\n }\n if ((child.wrapTextAround &&\n (child.x <= point.x && (child.x + tableWidth) >= point.x &&\n child.y <= point.y && (child.y + child.height) >= point.y))) {\n return child.getTableCellWidget(point);\n }\n }\n }\n var tableCell = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCell = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCell = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCell;\n };\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.isEmpty = this.isEmpty;\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isLayouted = false;\n /**\n * @private\n */\n _this.locked = false;\n /**\n * @private\n */\n _this.lockedBy = '';\n return _this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof TextFrame) {\n var paragraph = widget.containerWidget.containerShape.line.paragraph;\n if (paragraph) {\n return paragraph.bodyWidget;\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Check whether the paragraph contains only page break.\n *\n * @private\n * @returns {boolean}: Returns true if paragraph contains page break alone.\n */\n BlockWidget.prototype.isPageBreak = function () {\n var isPageBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var pageBreak = paragraph.firstChild.children[0];\n isPageBreak = pageBreak.isPageBreak;\n }\n }\n return isPageBreak;\n };\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof TextFrame) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n var block = this;\n if ((block instanceof TableWidget) && block.tableFormat.preferredWidthType === 'Auto' && this.associatedCell.ownerTable.isGridUpdated) {\n var containerWidth = 0;\n var columnSpan = this.associatedCell.cellFormat.columnSpan;\n var columnIndex = this.associatedCell.columnIndex;\n for (var i = 0; i < columnSpan; i++) {\n containerWidth += this.associatedCell.ownerTable.tableHolder.columns[columnIndex].preferredWidth;\n columnIndex++;\n }\n if (containerWidth > 0) {\n return containerWidth;\n }\n }\n return this.associatedCell.getCellWidth(this);\n }\n if (this.containerWidget instanceof TextFrame) {\n var shape = this.containerWidget.containerShape;\n return HelperMethods.convertPixelToPoint(shape.width) - HelperMethods.convertPixelToPoint(shape.textFrame.marginLeft)\n - HelperMethods.convertPixelToPoint(shape.textFrame.marginRight);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n }\n };\n Object.defineProperty(BlockWidget.prototype, \"bidi\", {\n get: function () {\n if (this instanceof ParagraphWidget && this.paragraphFormat instanceof WParagraphFormat) {\n return this.paragraphFormat.bidi;\n }\n if (this instanceof TableWidget && this.tableFormat instanceof WTableFormat) {\n return this.tableFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar FootNoteWidget = /** @class */ (function (_super) {\n __extends(FootNoteWidget, _super);\n function FootNoteWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.bodyWidgets = [];\n return _this;\n }\n FootNoteWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n throw new Error('Method not implemented.');\n };\n FootNoteWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n FootNoteWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof FootNoteWidget\n && widget.containerWidget === this.containerWidget;\n };\n FootNoteWidget.prototype.clone = function () {\n var footNote = new FootNoteWidget();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n footNote.childWidgets.push(block);\n block.index = i;\n block.containerWidget = footNote;\n }\n footNote.block = this.block;\n return footNote;\n };\n FootNoteWidget.prototype.destroyInternal = function (viewer) {\n this.block = undefined;\n _super.prototype.destroy.call(this);\n };\n return FootNoteWidget;\n}(BlockContainer));\nexport { FootNoteWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isChangeDetected = false;\n /**\n * @private\n */\n _this.floatingElements = [];\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithPageBreak\", {\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithPageBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n ParagraphWidget.prototype.isContainsShapeAlone = function () {\n var containsShape = false;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var lineWidget = this.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (!(inline instanceof ShapeBase) || (inline instanceof ShapeBase && inline.textWrappingStyle === 'Inline')) {\n return false;\n }\n else {\n containsShape = true;\n }\n }\n }\n return containsShape ? true : false;\n };\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof ChartElementBox || inline instanceof ShapeElementBox\n || inline instanceof ContentControl\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof ShapeElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ChartElementBox) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n ParagraphWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n minimumWordWidth = HelperMethods.convertPointToPixel(minimumWordWidth);\n maximumWordWidth = HelperMethods.convertPointToPixel(maximumWordWidth);\n if (this.childWidgets.length > 0) {\n var element = this.childWidgets[0].children[0];\n var text = '';\n var elements = new Dictionary();\n var imageWidths = [];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n elements.add(element, text.length);\n text += (element.text);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n imageWidths.push(element.width);\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n var pattern = new RegExp('\\\\b\\\\w+\\\\b', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(text))) {\n matches.push(matchInfo);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var width = 0;\n text = '';\n var matchedValue = '';\n var wordStartIndex = 0;\n var wordEndIndex = match.index;\n var index = match.index;\n for (var j = 0; j < elements.keys.length; j++) {\n var span = elements.keys[j];\n var startIndex = elements.get(span);\n var spanLength = span.length;\n if (index <= startIndex + spanLength) {\n wordStartIndex = index - startIndex;\n if (match.index + match[0].length <= startIndex + spanLength) {\n wordEndIndex = (match.index + match[0].length) - (startIndex + wordStartIndex);\n }\n else {\n wordEndIndex = spanLength - wordStartIndex;\n index += wordEndIndex;\n }\n text = span.text.substring(wordStartIndex, wordStartIndex + wordEndIndex);\n matchedValue = matchedValue + text;\n }\n if (text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(text, span.characterFormat);\n }\n if (matchedValue === match[0]) {\n break;\n }\n }\n if (width !== 0) {\n if (minimumWordWidth === 0 || width > minimumWordWidth) {\n minimumWordWidth = width;\n }\n }\n }\n // Check the image widths present in the paragraph. Consider the maximum image width as minimum word width.\n var imageWidth = 0;\n if (imageWidths.length > 0) {\n imageWidth = Math.max.apply(null, imageWidths);\n }\n if (minimumWordWidth === 0 || imageWidth > minimumWordWidth) {\n minimumWordWidth = imageWidth;\n }\n var maximum = this.measureParagraph();\n if (maximumWordWidth === 0 || maximum > maximumWordWidth) {\n maximumWordWidth = maximum;\n }\n }\n return {\n 'maximumWordWidth': HelperMethods.convertPixelToPoint(maximumWordWidth),\n 'minimumWordWidth': HelperMethods.convertPixelToPoint(minimumWordWidth)\n };\n };\n ParagraphWidget.prototype.measureParagraph = function () {\n var width = 0;\n var element = this.childWidgets[0].children[0];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(element.text, element.characterFormat);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (fieldBegin.fieldEnd != null) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n width += element.width;\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n // Considered the left and right indent.\n if (this.leftIndent > 0) {\n width += this.leftIndent;\n }\n if (this.rightIndent > 0) {\n width += this.rightIndent;\n }\n return width;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.splitLtrAndRtlText = function (lineIndex) {\n var isPrevLTRText = null;\n var iIncrementer = 1;\n var hasRTLCharacter = false;\n var characterRangeTypes = [];\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n if (this.childWidgets.length > 0) {\n var lineWidget = this.childWidgets[lineIndex];\n for (var i = lineIndex + 1; i < this.childWidgets.length; i++) {\n var nextLineWidget = this.childWidgets[i];\n for (var m = 0; m < nextLineWidget.children.length; m++) {\n var element = nextLineWidget.children[m];\n lineWidget.children.push(element);\n element.line = lineWidget;\n }\n this.childWidgets.splice(i, 1);\n i--;\n }\n for (var i = 0; i < lineWidget.children.length; i += iIncrementer) {\n var elementBox = lineWidget.children[i];\n iIncrementer = 1;\n ////Gets the span to split.\n var textElement = undefined;\n if (elementBox instanceof TextElementBox) {\n textElement = elementBox;\n }\n if (elementBox instanceof FieldElementBox && elementBox.fieldType == 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (textElement != undefined && !isField) {\n var text = textElement.text;\n var isTextBidi = textElement.characterFormat.bidi;\n var isRTLLang = false;\n var charTypeIndex = characterRangeTypes.length;\n if (isTextBidi) {\n isRTLLang = textHelper.isRightToLeftLanguage(elementBox.characterFormat.localeIdBidi);\n }\n ////Split the text as consicutive LTR and RTL\n var splitedTextCollection = textHelper.splitTextByConsecutiveLtrAndRtl(text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter);\n if (splitedTextCollection.length > 1) {\n for (var j = 0; j < splitedTextCollection.length; j++) {\n text = splitedTextCollection[j];\n if (j > 0) {\n ////Clone the source span.\n var clonedTextElement = textElement.clone();\n clonedTextElement.text = text;\n clonedTextElement.characterRange = characterRangeTypes[j + charTypeIndex];\n ////Inert the splitted span in order.\n lineWidget.children.splice(i + j, 0, clonedTextElement);\n clonedTextElement.line = lineWidget;\n iIncrementer++;\n if (textElement.revisions.length > 0) {\n this.updateTextElementInRevisionRange(textElement, clonedTextElement);\n }\n }\n else {\n ////Replace the source span with splitted text.\n textElement.text = text;\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n else if (splitedTextCollection.length > 0) {\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n characterRangeTypes.length = 0;\n }\n };\n ParagraphWidget.prototype.updateTextElementInRevisionRange = function (inline, splittedElementBox) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n var inlineIndex = revision.range.indexOf(inline);\n revision.range.splice(inlineIndex + 1, 0, splittedElementBox);\n splittedElementBox.revisions.push(revision);\n splittedElementBox.removedIds = [];\n }\n };\n /**\n * Combine the spans by consecutive LTR and RTL texts.\n * @private\n */\n ParagraphWidget.prototype.combineconsecutiveRTL = function (lineIndex) {\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n for (var j = lineIndex; j < this.childWidgets.length; j++) {\n var lineWidget = this.childWidgets[j];\n for (var i = 0; i <= lineWidget.children.length - 2; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox && elementBox.fieldType === 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (!isField && elementBox instanceof TextElementBox && lineWidget.children[i + 1] instanceof TextElementBox) {\n var currentTxtRange = elementBox;\n var nextTxtRange = lineWidget.children[i + 1];\n if (currentTxtRange.characterRange == CharacterRangeType.RightToLeft && nextTxtRange.characterRange == CharacterRangeType.RightToLeft &&\n currentTxtRange.text.length > 0 && nextTxtRange.text.length > 0 &&\n textHelper.isWordSplitChar(currentTxtRange.text[currentTxtRange.text.length - 1]) && textHelper.isWordSplitChar(nextTxtRange.text[0])\n && currentTxtRange.characterFormat.isEqualFormat(nextTxtRange.characterFormat)) {\n currentTxtRange.text = currentTxtRange.text + nextTxtRange.text;\n lineWidget.children.splice(i + 1, 1);\n i--;\n }\n }\n }\n }\n };\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n for (var j = 0; j < cloneLine.children.length; j++) {\n var element = cloneLine.children[j];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(element);\n }\n }\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n if (this.contentControlProperties) {\n paragraph.contentControlProperties = this.contentControlProperties;\n }\n return paragraph;\n };\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TablePosition = /** @class */ (function () {\n function TablePosition() {\n }\n /**\n * @private\n */\n TablePosition.prototype.clone = function () {\n var positioning = new TablePosition();\n positioning.allowOverlap = this.allowOverlap;\n positioning.distanceTop = this.distanceTop;\n positioning.distanceRight = this.distanceRight;\n positioning.distanceLeft = this.distanceLeft;\n positioning.distanceBottom = this.distanceBottom;\n positioning.verticalAlignment = this.verticalAlignment;\n positioning.verticalOrigin = this.verticalOrigin;\n positioning.verticalPosition = this.verticalPosition;\n positioning.horizontalAlignment = this.horizontalAlignment;\n positioning.horizontalOrigin = this.horizontalOrigin;\n positioning.horizontalPosition = this.horizontalPosition;\n return positioning;\n };\n return TablePosition;\n}());\nexport { TablePosition };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n /**\n * @private\n */\n _this.isDefaultFormatUpdated = false;\n /**\n * @private\n */\n _this.isContainInsideTable = false;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"isBidiTable\", {\n get: function () {\n return ((this.flags & 0x10) >> 4) !== 0;\n },\n set: function (value) {\n this.flags = ((this.flags & 0xEF) | ((value ? 1 : 0) << 4));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidth = function () {\n var width = 0;\n for (var k = 0; k < this.childWidgets.length; k++) {\n var rowWidth = 0;\n var rowWidget = this.childWidgets[k];\n for (var m = 0; m < rowWidget.childWidgets.length; m++) {\n var cellWidget = rowWidget.childWidgets[m];\n var cellWidth = cellWidget.width;\n if (cellWidth === 0) {\n cellWidth = cellWidget.cellFormat.cellWidth;\n if (cellWidth > cellWidget.cellFormat.preferredWidth &&\n cellWidget.cellFormat.preferredWidth !== 0 && cellWidget.cellFormat.preferredWidthType !== 'Percent') {\n cellWidth = cellWidget.cellFormat.preferredWidth;\n }\n cellWidth = HelperMethods.convertPointToPixel(cellWidth - (cellWidget.margin.left + cellWidget.margin.right));\n }\n rowWidth += (cellWidth + cellWidget.margin.left + cellWidget.margin.right);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n else if (!isNullOrUndefined(cell)) {\n cellWidth = this.getMinimumPreferredWidth(cell);\n }\n return cellWidth;\n };\n TableWidget.prototype.getMinimumPreferredWidth = function (cell) {\n var defaultWidth = 0;\n ////For fixed table, cell width (grid column width) should be considered as default width, When the preferred cell width is zero.\n if (cell.cellFormat.preferredWidth === 0 && cell.cellFormat.cellWidth !== 0) {\n defaultWidth = cell.cellFormat.cellWidth;\n }\n else {\n defaultWidth = cell.getMinimumPreferredWidth();\n }\n return defaultWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n row.childWidgets[j].cellFormat.preferredWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n /* eslint-disable */\n TableWidget.prototype.calculateGrid = function () {\n var tempGrid = [];\n var tempSpanDecimal = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n this.tableCellInfo = new Dictionary();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowCellInfo = new Dictionary();\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n tempSpanDecimal.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n tempSpanDecimal.push(currOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n columnSpan = spannedCells[k].columnIndex + spannedCells[k].cellFormat.columnSpan;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n // Add start offset of each cell based on its index\n if (!rowCellInfo.containsKey(cell.cellIndex)) {\n rowCellInfo.add(cell.cellIndex, parseFloat((currOffset - startOffset).toFixed(2)));\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n tempSpanDecimal.push(currOffset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(parseFloat(currOffset.toFixed(2))) < 0) {\n tempGrid.push(parseFloat(currOffset.toFixed(2)));\n tempSpanDecimal.push(currOffset);\n }\n columnSpan += rowFormat.gridAfter;\n }\n // Add rowindex and its cells info for each row\n if (!this.tableCellInfo.containsKey(row.rowIndex)) {\n this.tableCellInfo.add(row.rowIndex, rowCellInfo);\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n tempSpanDecimal.sort(function (a, b) { return a - b; });\n if (this.tableHolder.columns.length > 0 && tempGrid.length - 1 !== this.tableHolder.columns.length) {\n this.updateColumnSpans(tempGrid, tableWidth, tempSpanDecimal);\n }\n this.tableCellInfo.clear();\n this.tableCellInfo = undefined;\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth, tempSpan) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, undefined, -1, containerWidth, tempSpan);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell, cell.getIndex(), containerWidth, tempSpan);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, undefined, row.childWidgets.length, containerWidth, tempSpan);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n this.checkTableColumns();\n var tableWidth = this.tableHolder.getTotalWidth(1);\n if (tableWidth > minimumWordWidth) {\n minimumWordWidth = tableWidth;\n }\n tableWidth = this.tableHolder.getTotalWidth(2);\n if (tableWidth > maximumWordWidth) {\n maximumWordWidth = tableWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableWidget.prototype.checkTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n var isAutoFit = this.isAutoFit();\n if (isAutoFit || this.tableHolder.columns.length === 0) {\n this.buildTableColumns();\n }\n this.isGridUpdated = false;\n };\n /**\n * @private\n */\n TableWidget.prototype.isAutoFit = function () {\n var bodyWidget = this.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page)) {\n return bodyWidget.page.documentHelper.layout.getParentTable(this).tableFormat.allowAutoFit;\n }\n return false;\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n var isAutoFit = this.tableFormat.allowAutoFit;\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n if (((!isNullOrUndefined(this.bodyWidget.page)) && this.bodyWidget.page.viewer instanceof WebLayoutViewer && isAutoFit && !this.isInsideTable && !(this.containerWidget instanceof TextFrame))) {\n containerWidth = HelperMethods.convertPixelToPoint(this.bodyWidget.page.viewer.clientArea.width - this.bodyWidget.page.viewer.padding.right * 3);\n }\n else {\n containerWidth = this.getOwnerWidth(true);\n }\n containerWidth = (this.tableFormat.preferredWidth > containerWidth) ? this.tableFormat.preferredWidth : containerWidth;\n var isZeroWidth = (isAutoWidth && this.tableFormat.preferredWidth === 0 && !isAutoFit);\n tableWidth = this.getTableClientWidth(containerWidth);\n if (isZeroWidth && !this.isDefaultFormatUpdated && isAutoFit) {\n this.splitWidthToTableCells(tableWidth, isZeroWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var sizeInfo = new ColumnSizeInfo();\n var offset = 0;\n if (rowFormat.gridBefore > 0 && (row.rowFormat.beforeWidth !== 0 || row.rowFormat.gridBeforeWidth !== 0) && ((this.bodyWidget.page.documentHelper.alignTablesRowByRow) ? row.ownerTable.tableFormat.tableAlignment === 'Left' : true)) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, sizeInfo, offset = cellWidth, 'Point');\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n sizeInfo = rowSpannedCell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n // If the table gird alone calculated then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level operations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n else {\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n var insertIndex = 0;\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n insertIndex = m - 1;\n }\n }\n rowSpannedCells.splice(insertIndex, 0, cell);\n }\n }\n sizeInfo = cell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n sizeInfo.minimumWordWidth = sizeInfo.maximumWordWidth = sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, sizeInfo, offset += cellWidth, 'Point');\n }\n }\n }\n if (isZeroWidth && !this.isDefaultFormatUpdated) {\n this.isDefaultFormatUpdated = true;\n }\n this.tableHolder.validateColumnWidths();\n if (isAutoFit) {\n // Fits the column width automatically based on contents.\n this.tableHolder.autoFitColumn(containerWidth, tableWidth, isAutoWidth, this.isInsideTable, this.leftIndent + this.rightIndent);\n }\n else {\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth, this.leftIndent + this.rightIndent);\n }\n // if (!isAutoFit && isAutoWidth) {\n // tableWidth = this.tableHolder.tableWidth;\n // }\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.updateProperties = function (updateAllowAutoFit, currentSelectedTable, autoFitBehavior) {\n if (updateAllowAutoFit) {\n this.tableFormat.allowAutoFit = autoFitBehavior !== 'FixedColumnWidth';\n }\n if (this !== currentSelectedTable) {\n currentSelectedTable.updateProperties(false, currentSelectedTable, autoFitBehavior);\n return;\n }\n if (autoFitBehavior === 'FixedColumnWidth') {\n // Clear the table widths and set the preferred width for cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.preferredWidthType = 'Point';\n cellWidget.cellFormat.preferredWidth = cellWidget.cellFormat.cellWidth;\n }\n }\n }\n else if (autoFitBehavior === 'FitToWindow') {\n // Set the preferred width for table and cells in percentage.\n var tableWidth = this.tableHolder.getTotalWidth(0);\n this.tableFormat.leftIndent = 0;\n this.tableFormat.preferredWidth = 100;\n this.tableFormat.preferredWidthType = 'Percent';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var z = 0; z < row.childWidgets.length; z++) {\n var cell = row.childWidgets[z];\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidthType = 'Percent';\n cell.cellFormat.preferredWidth = (cell.cellFormat.cellWidth / tableWidth) * 100;\n }\n }\n }\n }\n else {\n // Clear the preferred width for table and cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.beforeWidth = 0;\n row.rowFormat.gridBefore = 0;\n row.rowFormat.gridBeforeWidth = 0;\n row.rowFormat.gridBeforeWidthType = 'Auto';\n row.rowFormat.afterWidth = 0;\n row.rowFormat.gridAfter = 0;\n row.rowFormat.gridAfterWidth = 0;\n row.rowFormat.gridAfterWidthType = 'Auto';\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.cellFormat.preferredWidth = 0;\n cell.cellFormat.preferredWidthType = 'Auto';\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth(0);\n var ownerWidth = this.getOwnerWidth(true);\n var containerWidth = this.getTableClientWidth(ownerWidth);\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n else { //ToDo:Need to analyze more the Percentage calculation for table width.\n var value = (totalPreferredWidth / ownerWidth) * 100;\n this.tableFormat.preferredWidth = value;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n TableWidget.prototype.updateChildWidgetLeft = function (left) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n rowWidget.x = left;\n rowWidget.updateChildWidgetLeft(left);\n }\n };\n /**\n * Shift the widgets for right to left aligned table.\n * @private\n */\n TableWidget.prototype.shiftWidgetsForRtlTable = function (clientArea, tableWidget) {\n var clientAreaX = tableWidget.x;\n var clientAreaRight = clientArea.right;\n var cellSpace = 0;\n if (tableWidget.tableFormat && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n var rowX = rowWidget.x;\n var left = clientAreaRight - (rowX - clientAreaX);\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n left = left -\n (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.rightBorderWidth + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n if (this.wrapTextAround) {\n table.wrapTextAround = this.wrapTextAround;\n table.positioning = this.positioning.clone();\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.containerWidget = this.containerWidget;\n if (this.contentControlProperties) {\n table.contentControlProperties = this.contentControlProperties;\n }\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth, isZeroWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth, isZeroWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex, isInsertRow) {\n for (var i = tableRows.length - 1; i >= 0; i--) {\n var row = tableRows.splice(i, 1)[0];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, row);\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n if (isInsertRow) {\n this.buildTableColumns();\n }\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellStartOffset = function (cell) {\n var offset = 0;\n if (cell && this.tableCellInfo) {\n if (this.tableCellInfo.containsKey(cell.ownerRow.rowIndex)) {\n var rowCellInfo = this.tableCellInfo.get(cell.ownerRow.rowIndex);\n if (rowCellInfo.containsKey(cell.cellIndex)) {\n offset = rowCellInfo.get(cell.cellIndex);\n }\n }\n }\n return offset;\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (this.containerWidget instanceof BodyWidget) {\n if (this.containerWidget.floatingElements.indexOf(this) !== -1) {\n this.containerWidget.floatingElements.splice(this.containerWidget.floatingElements.indexOf(this), 1);\n }\n }\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n if (this.spannedRowCollection) {\n this.spannedRowCollection.destroy();\n }\n this.spannedRowCollection = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.description = undefined;\n this.title = undefined;\n this.isDefaultFormatUpdated = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.index === cellIndex) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth, isZeroWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n if (isZeroWidth && cells[cell].cellFormat.preferredWidth === 0) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n this.ownerTable.isDefaultFormatUpdated = false;\n }\n else if (isZeroWidth) {\n this.ownerTable.isDefaultFormatUpdated = true;\n break;\n }\n else {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, cell, index, containerWidth, tempSpan) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index >= 0) {\n prevOffset += ownerTable.getCellStartOffset(cell);\n }\n if (index < this.childWidgets.length) {\n var preferredWidth = cell.cellFormat.cellWidth;\n if (preferredWidth === 0) {\n preferredWidth = cell.cellFormat.preferredWidth;\n }\n width = ownerTable.getCellWidth(preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var tabIndex = tableGrid.indexOf(prevOffset);\n var tabGrid = tempSpan[tabIndex];\n var gridEndIndex;\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridWidth = parseFloat((width + prevOffset).toFixed(2));\n var gridDecimalWidth = parseFloat((width + tabGrid).toFixed(2));\n if (gridDecimalWidth !== gridWidth && !isNullOrUndefined(tabGrid)) {\n gridEndIndex = this.getOffsetIndex(tableGrid, tabGrid + width);\n }\n else {\n gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n }\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = parseFloat(offset.toFixed(2));\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n if (this.contentControlProperties) {\n row.contentControlProperties = this.contentControlProperties;\n }\n return row;\n };\n /**\n * Updates the child widgets left.\n * @param left\n * @private\n */\n TableRowWidget.prototype.updateChildWidgetLeft = function (left) {\n // TODO: Cell spacing calculation.\n var spacing = 0;\n if (this.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = this.ownerTable.tableFormat.cellSpacing;\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellWidget = this.childWidgets[i];\n left += spacing + cellWidget.margin.left;\n cellWidget.x = left;\n cellWidget.updateChildWidgetLeft(cellWidget.x);\n left += cellWidget.width + cellWidget.margin.right;\n }\n };\n /**\n * Shift the widgets for RTL table.\n * @param tableWidget\n * @private\n */\n TableRowWidget.prototype.shiftWidgetForRtlTable = function () {\n var tableWidget = this.ownerTable;\n var clientAreaX = tableWidget.x;\n var cellSpace = 0;\n var tableWidth = 0;\n if (tableWidget.tableFormat != null && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth());\n var rowX = this.x;\n var clientAreaRight = clientAreaX + tableWidth;\n var left = clientAreaRight - (rowX - clientAreaX);\n for (var j = 0; j < this.childWidgets.length; j++) {\n var cellWidget = this.childWidgets[j];\n left = left - (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.rightBorderWidth + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left);\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.rowFormat = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.sizeInfoInternal = new ColumnSizeInfo();\n /**\n * @private\n */\n _this.updatedTopBorders = [];\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('leftMargin')) {\n return this.ownerRow.rowFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('topMargin')) {\n return this.ownerRow.rowFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('rightMargin')) {\n return this.ownerRow.rowFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('bottomMargin')) {\n return this.ownerRow.rowFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"sizeInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.sizeInfoInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.index);\n if (previousCell && this.equals(previousCell)) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.index);\n if (nextCell && this.equals(nextCell)) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellWidth = function (block) {\n var ownerTable = this.ownerTable;\n var containerWidth = ownerTable ? ownerTable.getTableClientWidth(ownerTable.getOwnerWidth(true)) : 0;\n var cellWidth = containerWidth;\n var leftMargin = !isNullOrUndefined(this.leftMargin) ? this.leftMargin : 0;\n var rightMargin = !isNullOrUndefined(this.rightMargin) ? this.rightMargin : 0;\n if (ownerTable && ownerTable.tableFormat.preferredWidthType === 'Auto' && ownerTable.tableFormat.allowAutoFit) {\n if (this.cellFormat.preferredWidth === 0) {\n cellWidth = containerWidth;\n }\n else {\n // If cell has prefferd width, we need to consider prefferd width.\n cellWidth = this.cellFormat.preferredWidth;\n }\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n cellWidth = (this.cellFormat.preferredWidth * containerWidth) / 100 - leftMargin - rightMargin;\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Percent') {\n cellWidth = this.cellFormat.cellWidth - leftMargin - rightMargin;\n }\n else {\n cellWidth = this.cellFormat.preferredWidth - leftMargin - rightMargin;\n }\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n return cellWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n prevCell = tableCell.previousWidget;\n }\n else if ((tableCell.cellFormat.columnSpan > 1 || tableCell.columnIndex >= 1) && tableCell.ownerRow.rowIndex > 0) {\n var previousRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(previousRow) && previousRow.childWidgets.length > 0) {\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var prevRowCell = previousRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = previousRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevCell)) {\n break;\n }\n previousRow = previousRow.previousWidget;\n }\n }\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n // Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n // For normal table cells only left border is rendered. for last cell left and right border is rendered.\n // this border widths are not included in margins.\n borderWidth = TableCellWidget.getCellLeftBorder(this).getLineWidth();\n // need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n borderWidth = TableCellWidget.getCellRightBorder(this).getLineWidth();\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSizeInfo = function (isAutoFit) {\n var isSetWidth = true;\n var layout = undefined;\n if (!isNullOrUndefined(this.bodyWidget) && !isNullOrUndefined(this.bodyWidget.page)) {\n if (!isNullOrUndefined(this.bodyWidget.page.documentHelper)) {\n layout = this.bodyWidget.page.documentHelper.layout;\n }\n }\n if (!isNullOrUndefined(layout) && !isNullOrUndefined(layout.currentCell)) {\n isSetWidth = false;\n if (this === layout.currentCell) {\n isSetWidth = true;\n }\n }\n // Gets the minimum preferred width for the table cell.\n if (isSetWidth && !this.sizeInfo.hasMinimumWidth) {\n this.sizeInfo.minimumWidth = this.getMinimumPreferredWidth();\n }\n // Gets the minimum and maximum word widths.\n if (isAutoFit) {\n if (isSetWidth && !this.sizeInfo.hasMinimumWordWidth) {\n var size = this.getMinimumAndMaximumWordWidth(0, 0);\n this.sizeInfo.minimumWordWidth = size.minimumWordWidth + this.sizeInfo.minimumWidth;\n this.sizeInfo.maximumWordWidth = size.maximumWordWidth + this.sizeInfo.minimumWidth;\n // if minimum and maximum width values are equal, set value as zero.\n // later, preferred width value is considered for all width values.\n // if (this.sizeInfo.minimumWidth === this.sizeInfo.minimumWordWidth\n // && this.sizeInfo.minimumWordWidth === this.sizeInfo.maximumWordWidth) {\n // this.sizeInfo.minimumWordWidth = 0;\n // this.sizeInfo.maximumWordWidth = 0;\n // this.sizeInfo.minimumWidth = 0;\n // }\n }\n }\n var sizeInfo = new ColumnSizeInfo();\n sizeInfo.minimumWidth = this.sizeInfo.minimumWidth;\n sizeInfo.minimumWordWidth = this.sizeInfo.minimumWordWidth;\n sizeInfo.maximumWordWidth = this.sizeInfo.maximumWordWidth;\n return sizeInfo;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n leftBorder = this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousCell)) {\n return leftBorder;\n }\n else {\n var prevCellRightBorder = undefined;\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = HelperMethods.convertHexToRgb(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = HelperMethods.convertHexToRgb(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(leftBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstCell = false;\n if (ownerCell.columnIndex === 0 || (ownerCell.cellIndex === 0 && ownerCell.ownerRow.rowFormat.gridBefore > 0)) {\n isFirstCell = true;\n }\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None' && !leftBorder.isBorderDefined) || isNullOrUndefined(leftBorder)) {\n if (isFirstCell) {\n leftBorder = rowBorders.left;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.left;\n }\n }\n else {\n leftBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.vertical;\n }\n }\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = undefined;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n nextCell = tableCell.nextWidget;\n }\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n rightBorder = this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextCell)) {\n return rightBorder;\n }\n else {\n var nextCellLeftBorder = undefined;\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(rightBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastCell = false;\n //Have to check lastcell logic\n if ((ownerCell.columnIndex + ownerCell.cellFormat.columnSpan) === ownerCell.ownerTable.tableHolder.columns.length\n || (ownerCell.cellIndex === ownerCell.ownerRow.childWidgets.length - 1)) {\n isLastCell = true;\n }\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None' && !rightBorder.isBorderDefined) || isNullOrUndefined(rightBorder)) {\n if (isLastCell) {\n rightBorder = rowBorders.right;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.right;\n }\n }\n else {\n rightBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.vertical;\n }\n }\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = undefined;\n //ToDo: Need to analyze more to get the previous cell.\n var prevRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(prevRow) && prevRow.childWidgets.length > 0) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan - 1 >= tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevTopCell)) {\n break;\n }\n prevRow = prevRow.previousWidget;\n //If all the previous rows checked and the previous top cell is null\n // then TableCell previus row matched column index cell is taken for border calculation.\n if (isNullOrUndefined(prevRow) && isNullOrUndefined(prevTopCell)) {\n prevRow = tableCell.ownerRow.previousWidget;\n if (tableCell.columnIndex < prevRow.childWidgets.length) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex === tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n //If table cell Column index is greater than previous row cells count then last cell is taken as previous top cell.\n }\n else {\n prevTopCell = tableCell.ownerRow.previousWidget.childWidgets[tableCell.ownerRow.previousWidget.childWidgets.length - 1];\n }\n }\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n topBorder = this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousTopCell)) {\n return topBorder;\n }\n else {\n var prevTopCellBottomBorder = undefined;\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom)) {\n prevTopCellBottomBorder = this.getBottomBorderToRenderByHierarchy(previousTopCell.cellFormat.borders.bottom, previousTopCell.ownerRow.rowFormat.borders, previousTopCell.ownerTable.tableFormat.borders);\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(topBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstRow = isNullOrUndefined(ownerCell.ownerRow.previousWidget);\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None' && !topBorder.isBorderDefined) || isNullOrUndefined(topBorder)) {\n if (isFirstRow) {\n topBorder = rowBorders.top;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.top;\n }\n }\n else {\n topBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = tableCell.ownerRow.nextWidget;\n if (!isNullOrUndefined(nextRow) && tableCell.columnIndex < nextRow.childWidgets.length) {\n nextBottomCell = nextRow.childWidgets[tableCell.columnIndex];\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n bottomBorder = this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextBottomCell)) {\n return bottomBorder;\n }\n else {\n var prevBottomCellTopBorder = undefined;\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(bottomBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastRow = isNullOrUndefined(ownerCell.ownerRow.nextWidget);\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None' && !bottomBorder.isBorderDefined) || isNullOrUndefined(bottomBorder)) {\n if (isLastRow) {\n bottomBorder = rowBorders.bottom;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.bottom;\n }\n }\n else {\n bottomBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * Updates the Widget left.\n * @private\n */\n TableCellWidget.prototype.updateWidgetLeft = function (x) {\n this.x = x;\n this.updateChildWidgetLeft(x);\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateChildWidgetLeft = function (left) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n this.childWidgets[i].x = left;\n if (this.childWidgets[i] instanceof TableWidget) {\n var tableWidget = this.childWidgets[i];\n tableWidget.updateChildWidgetLeft(left);\n if (tableWidget.isBidiTable) {\n var clientArea = new Rect(tableWidget.x, tableWidget.y, tableWidget.width, tableWidget.height);\n tableWidget.shiftWidgetsForRtlTable(clientArea, tableWidget);\n }\n }\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i];\n var widthInfo = block.getMinimumAndMaximumWordWidth(minimumWordWidth, maximumWordWidth);\n minimumWordWidth = widthInfo.minimumWordWidth;\n maximumWordWidth = widthInfo.maximumWordWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n if (this.contentControlProperties) {\n cell.contentControlProperties = this.contentControlProperties;\n }\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.marginTop = 0;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"renderedElements\", {\n /**\n * Rendered elements contains reordered element for RTL layout\n */\n get: function () {\n if (!isNullOrUndefined(this.layoutedElements)) {\n return this.layoutedElements;\n }\n return this.children;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isPageBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithLineBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.text === '\\v';\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && (this.paragraph.previousSplitWidget === undefined || (this.paragraph.previousSplitWidget instanceof ParagraphWidget && this.paragraph.previousSplitWidget.isEndsWithPageBreak))) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof EditRangeEndElementBox || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof ContentControl || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline, bidi, isInsert) {\n bidi = isNullOrUndefined(bidi) ? this.paragraph.bidi : bidi;\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof ShapeElementBox || inlineElement instanceof ContentControl\n || inlineElement instanceof BookmarkElementBox || inlineElement instanceof EditRangeEndElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n //if (inlineElement instanceof BookmarkElementBox) {\n // offset += inlineElement.length;\n // count += inlineElement.length;\n // continue;\n //}\n if (inlineElement instanceof TextElementBox && (inlineElement.text === ' ' && inlineElement.revisions.length === 0 && isInsert)) {\n var currentElement = this.getNextTextElement(this, i + 1);\n inlineElement = !isNullOrUndefined(currentElement) ? currentElement : inlineElement;\n indexInInline = isNullOrUndefined(currentElement) ? (offset - count) : 0;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n else if (offset === count + inlineElement.length && this.children[i + 1] instanceof FootnoteElementBox) {\n return { 'element': this.children[i + 1], 'index': indexInInline };\n }\n else {\n indexInInline = (offset - count);\n }\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * Method to retrieve next element\n * @param line\n * @param index\n */\n LineWidget.prototype.getNextTextElement = function (line, index) {\n if (index < line.children.length - 1 && line.children[index]) {\n return line.children[index];\n }\n return null;\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.padding = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.isRightToLeft = false;\n /**\n * @private\n */\n this.canTrigger = false;\n /**\n * @private\n */\n this.ischangeDetected = false;\n /**\n * @private\n */\n this.isVisible = false;\n /**\n * @private\n */\n this.isSpellChecked = false;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.canTrack = false;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.isMarkedForRevision = false;\n /**\n * @private\n */\n this.characterRange = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n Object.defineProperty(ElementBox.prototype, \"isPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === '\\f';\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isValidNodeForTracking\", {\n /**\n * @private\n * Method to indicate whether current element is trackable.\n */\n get: function () {\n if (this instanceof BookmarkElementBox || this instanceof CommentCharacterElementBox || this instanceof EditRangeStartElementBox || this instanceof EditRangeEndElementBox || this instanceof ContentControl) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isCheckBoxElement\", {\n /**\n * @private\n */\n get: function () {\n var element = this;\n if (element instanceof TextElementBox && !isNullOrUndefined(element.text)) {\n return element.text === String.fromCharCode(9745) || element.text === String.fromCharCode(9744);\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (documentHelper) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (documentHelper.fields.indexOf(fieldBegin) === -1) {\n documentHelper.fields.push(fieldBegin);\n }\n if (!isNullOrUndefined(fieldBegin.formFieldData) &&\n documentHelper.formFields.indexOf(fieldBegin) === -1) {\n documentHelper.formFields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n //Links to field end traversing from field separator.\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isNullOrUndefined(fieldSeparator.fieldEnd) && isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (fieldBegin.fieldSeparator && isNullOrUndefined(fieldBegin.fieldSeparator.fieldBegin)) {\n fieldBegin.fieldSeparator.fieldBegin = fieldBegin;\n }\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n fieldBegin.fieldSeparator.fieldEnd = fieldBegin.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget\n && line.paragraph.nextRenderedWidget.childWidgets.length > 0) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.nextNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.previousNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.fieldCodeType = '';\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n /**\n * @private\n */\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"resultText\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.formFieldData) && this.fieldType === 0 &&\n !isNullOrUndefined(this.fieldSeparator) && !isNullOrUndefined(this.fieldEnd)) {\n var textElement = this.fieldSeparator.nextElement;\n var text = '';\n do {\n if (textElement instanceof TextElementBox) {\n text += textElement.text;\n }\n textElement = textElement.nextNode;\n if (textElement === this.fieldEnd) {\n break;\n }\n } while (textElement);\n return text;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n if (this.fieldType === 0 && !isNullOrUndefined(this.formFieldData)) {\n field.formFieldData = this.formFieldData.clone();\n }\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n field.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n field.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n field.removedIds = this.removedIds.slice();\n }\n }\n field.fieldCodeType = this.fieldCodeType;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar FormField = /** @class */ (function () {\n function FormField() {\n /*\n * @private\n */\n this.name = '';\n /**\n * @private\n */\n this.enabled = true;\n /**\n * @private\n */\n this.helpText = '';\n /**\n * @private\n */\n this.statusText = '';\n }\n return FormField;\n}());\nexport { FormField };\n/**\n * @private\n */\nvar TextFormField = /** @class */ (function (_super) {\n __extends(TextFormField, _super);\n function TextFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.type = 'Text';\n /**\n * @private\n */\n _this.maxLength = 0;\n /**\n * @private\n */\n _this.defaultValue = '';\n /**\n * @private\n */\n _this.format = '';\n return _this;\n }\n /**\n * @private\n */\n TextFormField.prototype.clone = function () {\n var textForm = new TextFormField();\n textForm.type = this.type;\n textForm.name = this.name;\n textForm.enabled = this.enabled;\n textForm.helpText = this.helpText;\n textForm.statusText = this.statusText;\n textForm.maxLength = this.maxLength;\n textForm.defaultValue = this.defaultValue;\n textForm.format = this.format;\n return textForm;\n };\n /**\n * @private\n */\n TextFormField.prototype.getFormFieldInfo = function () {\n var textFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n format: this.format,\n helpText: this.helpText,\n maxLength: this.maxLength,\n type: this.type\n };\n return textFormField;\n };\n /**\n * @private\n */\n TextFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.format)) {\n this.format = info.format;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.maxLength)) {\n this.maxLength = info.maxLength;\n }\n if (!isNullOrUndefined(info.type)) {\n this.type = info.type;\n }\n };\n return TextFormField;\n}(FormField));\nexport { TextFormField };\n/**\n * @private\n */\nvar CheckBoxFormField = /** @class */ (function (_super) {\n __extends(CheckBoxFormField, _super);\n function CheckBoxFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sizeType = 'Auto';\n /**\n * @private\n */\n _this.size = 11;\n /**\n * @private\n */\n _this.defaultValue = false;\n /**\n * @private\n */\n _this.checked = false;\n return _this;\n }\n /**\n * @private\n */\n CheckBoxFormField.prototype.clone = function () {\n var checkBoxForm = new CheckBoxFormField();\n checkBoxForm.name = this.name;\n checkBoxForm.enabled = this.enabled;\n checkBoxForm.helpText = this.helpText;\n checkBoxForm.statusText = this.statusText;\n checkBoxForm.sizeType = this.sizeType;\n checkBoxForm.size = this.size;\n checkBoxForm.defaultValue = this.defaultValue;\n checkBoxForm.checked = this.checked;\n return checkBoxForm;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.getFormFieldInfo = function () {\n var checkBoxFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n helpText: this.helpText,\n size: this.size,\n sizeType: this.sizeType\n };\n return checkBoxFormField;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n this.checked = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.size)) {\n this.size = info.size;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.sizeType)) {\n this.sizeType = info.sizeType;\n }\n };\n return CheckBoxFormField;\n}(FormField));\nexport { CheckBoxFormField };\n/**\n * @private\n */\nvar DropDownFormField = /** @class */ (function (_super) {\n __extends(DropDownFormField, _super);\n function DropDownFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.dropdownItems = [];\n /**\n * @private\n */\n _this.selectedIndex = 0;\n return _this;\n }\n /**\n * @private\n */\n DropDownFormField.prototype.clone = function () {\n var dropDown = new DropDownFormField();\n dropDown.name = this.name;\n dropDown.enabled = this.enabled;\n dropDown.helpText = this.helpText;\n dropDown.statusText = this.statusText;\n dropDown.dropdownItems = this.dropdownItems.slice();\n dropDown.selectedIndex = this.selectedIndex;\n return dropDown;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.getFormFieldInfo = function () {\n var dropDownFormField = {\n dropdownItems: this.dropdownItems.slice(),\n enabled: this.enabled,\n helpText: this.helpText\n };\n return dropDownFormField;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.dropdownItems)) {\n this.dropdownItems = info.dropdownItems;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n };\n return DropDownFormField;\n}(FormField));\nexport { DropDownFormField };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.ignoreOnceItems = [];\n /**\n * @private\n */\n _this.istextCombined = false;\n _this.errorCollection = [];\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var textEle = new TextElementBox();\n textEle.characterFormat.copyFormat(this.characterFormat);\n textEle.text = this.text;\n if (this.margin) {\n textEle.margin = this.margin.clone();\n }\n textEle.baselineOffset = this.baselineOffset;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n textEle.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n textEle.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n textEle.removedIds = this.removedIds.slice();\n }\n }\n textEle.width = this.width;\n textEle.height = this.height;\n if (this.contentControlProperties) {\n textEle.contentControlProperties = this.contentControlProperties;\n }\n return textEle;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar Footnote = /** @class */ (function () {\n function Footnote() {\n this.separator = [];\n this.continuationNotice = [];\n this.continuationSeparator = [];\n }\n /**\n * @private\n */\n Footnote.prototype.clear = function () {\n this.separator = [];\n this.continuationSeparator = [];\n this.continuationNotice = [];\n };\n Footnote.prototype.destroy = function () {\n this.separator = [];\n this.continuationSeparator = [];\n this.continuationNotice = [];\n };\n return Footnote;\n}());\nexport { Footnote };\n/**\n * @private\n */\nvar FootnoteElementBox = /** @class */ (function (_super) {\n __extends(FootnoteElementBox, _super);\n function FootnoteElementBox() {\n var _this = _super.call(this) || this;\n _this.isLayout = false;\n _this.bodyWidget = new BodyWidget();\n _this.bodyWidget.footNoteReference = _this;\n return _this;\n }\n FootnoteElementBox.prototype.clone = function () {\n var span = new FootnoteElementBox();\n span.text = this.text;\n span.characterFormat.copyFormat(this.characterFormat);\n span.height = this.height;\n span.footnoteType = this.footnoteType;\n span.width = this.width;\n span.symbolCode = this.symbolCode;\n span.bodyWidget.childWidgets = this.bodyWidget.childWidgets;\n span.bodyWidget.page = this.bodyWidget.page;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n return span;\n };\n FootnoteElementBox.prototype.getLength = function () {\n return 1;\n };\n FootnoteElementBox.prototype.destroy = function () {\n this.symbolCode = '';\n this.symbolFontName = '';\n this.customMarker = '';\n this.bodyWidget = undefined;\n };\n return FootnoteElementBox;\n}(TextElementBox));\nexport { FootnoteElementBox };\n/**\n * @private\n */\nvar ErrorTextElementBox = /** @class */ (function (_super) {\n __extends(ErrorTextElementBox, _super);\n function ErrorTextElementBox() {\n var _this = _super.call(this) || this;\n _this.startIn = undefined;\n _this.endIn = undefined;\n return _this;\n }\n Object.defineProperty(ErrorTextElementBox.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ErrorTextElementBox.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ErrorTextElementBox.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return ErrorTextElementBox;\n}(TextElementBox));\nexport { ErrorTextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var fieldSpan = new FieldTextElementBox();\n fieldSpan.characterFormat.copyFormat(this.characterFormat);\n fieldSpan.fieldBegin = this.fieldBegin;\n fieldSpan.text = this.text;\n if (this.margin) {\n fieldSpan.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChanges = this.revisions[i];\n fieldSpan.revisions.push(revisionChanges.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n fieldSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n fieldSpan.removedIds = this.removedIds.slice();\n }\n }\n fieldSpan.width = this.width;\n fieldSpan.height = this.height;\n return fieldSpan;\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var tabSpan = new TabElementBox();\n tabSpan.characterFormat.copyFormat(this.characterFormat);\n tabSpan.tabText = this.tabText;\n tabSpan.tabLeader = this.tabLeader;\n tabSpan.text = this.text;\n if (this.margin) {\n tabSpan.margin = this.margin.clone();\n }\n tabSpan.width = this.width;\n tabSpan.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n tabSpan.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n tabSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n tabSpan.removedIds = this.removedIds.slice();\n }\n }\n return tabSpan;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n if (this.contentControlProperties) {\n span.contentControlProperties = this.contentControlProperties;\n }\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ContentControl = /** @class */ (function (_super) {\n __extends(ContentControl, _super);\n function ContentControl(widgetType) {\n var _this = _super.call(this) || this;\n _this.contentControlWidgetType = widgetType;\n _this.contentControlProperties = new ContentControlProperties(widgetType);\n return _this;\n }\n /**\n * @private\n */\n ContentControl.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ContentControl.prototype.clone = function () {\n var span = new ContentControl(this.contentControlWidgetType);\n span.characterFormat.copyFormat(this.characterFormat);\n span.contentControlProperties = this.contentControlProperties;\n span.contentControlWidgetType = this.contentControlWidgetType;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChange = this.revisions[i];\n span.revisions.push(revisionChange.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n span.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n span.removedIds = this.removedIds.slice();\n }\n }\n span.type = this.type;\n span.width = this.width;\n span.height = this.height;\n span.reference = this.reference;\n return span;\n };\n /**\n * @private\n */\n ContentControl.prototype.destroy = function () {\n this.contentControlProperties = undefined;\n this.contentControlWidgetType = undefined;\n _super.prototype.destroy.call(this);\n };\n return ContentControl;\n}(ElementBox));\nexport { ContentControl };\n/**\n * @private\n */\n/**\n * @private\n */\nvar ContentControlProperties = /** @class */ (function () {\n function ContentControlProperties(widgetType) {\n /**\n * @private\n */\n this.contentControlListItems = [];\n this.contentControlWidgetType = widgetType;\n this.characterFormat = new WCharacterFormat();\n }\n /**\n * @private\n */\n ContentControlProperties.prototype.destroy = function () {\n this.lockContentControl = undefined;\n this.lockContents = undefined;\n this.tag = undefined;\n this.color = undefined;\n this.title = undefined;\n this.appearance = undefined;\n this.type = undefined;\n this.hasPlaceHolderText = undefined;\n this.multiline = undefined;\n this.isTemporary = undefined;\n this.isChecked = undefined;\n this.dateCalendarType = undefined;\n this.dateStorageFormat = undefined;\n this.dateDisplayLocale = undefined;\n this.dateDisplayFormat = undefined;\n };\n /**\n * @private\n */\n ContentControlProperties.prototype.clone = function () {\n var span = new ContentControlProperties(this.contentControlWidgetType);\n span.lockContentControl = this.lockContentControl;\n span.lockContents = this.lockContents;\n span.tag = this.tag;\n span.color = this.color;\n span.title = this.title;\n span.appearance = this.appearance;\n span.type = this.type;\n span.hasPlaceHolderText = this.hasPlaceHolderText;\n span.multiline = this.multiline;\n span.isTemporary = this.isTemporary;\n span.isChecked = this.isChecked;\n span.dateCalendarType = this.dateCalendarType;\n span.dateStorageFormat = this.dateStorageFormat;\n span.dateDisplayLocale = this.dateDisplayLocale;\n span.dateDisplayFormat = this.dateDisplayFormat;\n if (this.contentControlListItems.length > 0) {\n for (var i = 0; i < this.contentControlListItems.length; i++) {\n span.contentControlListItems.push(this.contentControlListItems[i].clone());\n }\n }\n if (this.checkedState) {\n span.checkedState = this.checkedState.clone();\n }\n if (this.uncheckedState) {\n span.uncheckedState = this.uncheckedState.clone();\n }\n if (this.xmlMapping) {\n span.xmlMapping = this.xmlMapping.clone();\n }\n return span;\n };\n return ContentControlProperties;\n}());\nexport { ContentControlProperties };\n/**\n * @private\n */\nvar ContentControlListItems = /** @class */ (function () {\n function ContentControlListItems() {\n }\n /**\n * @private\n */\n ContentControlListItems.prototype.destroy = function () {\n this.displayText = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n ContentControlListItems.prototype.clone = function () {\n var span = new ContentControlListItems();\n span.displayText = this.displayText;\n span.value = this.value;\n return span;\n };\n return ContentControlListItems;\n}());\nexport { ContentControlListItems };\n/**\n * @private\n */\nvar CheckBoxState = /** @class */ (function () {\n function CheckBoxState() {\n }\n /**\n * @private\n */\n CheckBoxState.prototype.destroy = function () {\n this.font = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n CheckBoxState.prototype.clone = function () {\n var span = new CheckBoxState();\n span.font = this.font;\n span.value = this.value;\n return span;\n };\n return CheckBoxState;\n}());\nexport { CheckBoxState };\n/**\n * @private\n */\nvar XmlMapping = /** @class */ (function () {\n function XmlMapping() {\n }\n /**\n * @private\n */\n XmlMapping.prototype.destroy = function () {\n this.isMapped = undefined;\n this.isWordMl = undefined;\n this.prefixMapping = undefined;\n this.xPath = undefined;\n this.storeItemId = undefined;\n this.customXmlPart = undefined;\n };\n /**\n * @private\n */\n XmlMapping.prototype.clone = function () {\n var span = new XmlMapping();\n span.isMapped = this.isMapped;\n span.isWordMl = this.isWordMl;\n span.prefixMapping = this.prefixMapping;\n span.xPath = this.xPath;\n span.storeItemId = this.storeItemId;\n if (this.customXmlPart) {\n span.customXmlPart = this.customXmlPart.clone();\n }\n return span;\n };\n return XmlMapping;\n}());\nexport { XmlMapping };\n/**\n * @private\n */\nvar CustomXmlPart = /** @class */ (function () {\n function CustomXmlPart() {\n }\n /**\n * @private\n */\n CustomXmlPart.prototype.destroy = function () {\n this.id = undefined;\n this.xml = undefined;\n };\n /**\n * @private\n */\n CustomXmlPart.prototype.clone = function () {\n var span = new CustomXmlPart();\n span.id = this.id;\n span.xml = this.xml;\n return span;\n };\n return CustomXmlPart;\n}());\nexport { CustomXmlPart };\n/**\n * @private\n */\nvar ShapeCommon = /** @class */ (function (_super) {\n __extends(ShapeCommon, _super);\n function ShapeCommon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.name = '';\n /**\n * @private\n */\n _this.alternativeText = '';\n /**\n * @private\n */\n _this.title = '';\n return _this;\n }\n /**\n *\n * @private\n */\n ShapeCommon.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ShapeCommon.prototype.clone = function () {\n var shape = new ShapeElementBox();\n return shape;\n };\n return ShapeCommon;\n}(ElementBox));\nexport { ShapeCommon };\n/**\n * @private\n */\nvar ShapeBase = /** @class */ (function (_super) {\n __extends(ShapeBase, _super);\n function ShapeBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.verticalPosition = 0;\n /**\n * @private\n */\n _this.horizontalPosition = 0;\n /**\n * @private\n */\n _this.textWrappingStyle = 'Inline';\n /**\n * @private\n */\n _this.distanceBottom = 0;\n /**\n * @private\n */\n _this.distanceLeft = 0;\n /**\n * @private\n */\n _this.distanceRight = 0;\n /**\n * @private\n */\n _this.distanceTop = 0;\n return _this;\n }\n return ShapeBase;\n}(ShapeCommon));\nexport { ShapeBase };\n/**\n * @private\n */\nvar ShapeElementBox = /** @class */ (function (_super) {\n __extends(ShapeElementBox, _super);\n function ShapeElementBox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @private\n */\n ShapeElementBox.prototype.clone = function () {\n var shape = new ShapeElementBox();\n shape.characterFormat.copyFormat(this.characterFormat);\n shape.x = this.x;\n shape.y = this.y;\n shape.width = this.width;\n shape.height = this.height;\n shape.shapeId = this.shapeId;\n shape.name = this.name;\n shape.alternativeText = this.alternativeText;\n shape.title = this.title;\n shape.widthScale = this.widthScale;\n shape.heightScale = this.heightScale;\n shape.visible = this.visible;\n shape.verticalPosition = this.verticalPosition;\n shape.verticalAlignment = this.verticalAlignment;\n shape.verticalOrigin = this.verticalOrigin;\n shape.verticalRelativePercent = this.verticalRelativePercent;\n shape.horizontalPosition = this.horizontalPosition;\n shape.horizontalAlignment = this.horizontalAlignment;\n shape.horizontalOrigin = this.horizontalOrigin;\n shape.horizontalRelativePercent = this.horizontalRelativePercent;\n shape.zOrderPosition = this.zOrderPosition;\n shape.allowOverlap = this.allowOverlap;\n shape.textWrappingStyle = this.textWrappingStyle;\n shape.textWrappingType = this.textWrappingType;\n shape.distanceBottom = this.distanceBottom;\n shape.distanceLeft = this.distanceLeft;\n shape.distanceRight = this.distanceRight;\n shape.distanceTop = this.distanceTop;\n shape.layoutInCell = this.layoutInCell;\n shape.lockAnchor = this.lockAnchor;\n shape.autoShapeType = this.autoShapeType;\n if (this.lineFormat) {\n shape.lineFormat = this.lineFormat.clone();\n }\n if (this.fillFormat) {\n shape.fillFormat = this.fillFormat.clone();\n }\n if (this.textFrame) {\n shape.textFrame = this.textFrame.clone();\n shape.textFrame.containerShape = shape;\n }\n if (this.margin) {\n shape.margin = this.margin.clone();\n }\n return shape;\n };\n return ShapeElementBox;\n}(ShapeBase));\nexport { ShapeElementBox };\n/**\n * @private\n */\nvar TextFrame = /** @class */ (function (_super) {\n __extends(TextFrame, _super);\n function TextFrame() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.marginLeft = 0;\n /**\n * @private\n */\n _this.marginRight = 0;\n /**\n * @private\n */\n _this.marginTop = 0;\n /**\n * @private\n */\n _this.marginBottom = 0;\n return _this;\n }\n TextFrame.prototype.equals = function () {\n return false;\n };\n TextFrame.prototype.destroyInternal = function () {\n //return;\n };\n TextFrame.prototype.getHierarchicalIndex = function (index) {\n var line = this.containerShape.line;\n var offset = line.getOffset(this.containerShape, 0).toString();\n return line.getHierarchicalIndex(offset);\n };\n TextFrame.prototype.getTableCellWidget = function () {\n return undefined;\n };\n /**\n * @private\n */\n TextFrame.prototype.clone = function () {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = this.textVerticalAlignment;\n textFrame.marginBottom = this.marginBottom;\n textFrame.marginLeft = this.marginLeft;\n textFrame.marginRight = this.marginRight;\n textFrame.marginTop = this.marginTop;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n textFrame.childWidgets.push(block);\n block.index = i;\n block.containerWidget = textFrame;\n }\n return textFrame;\n };\n return TextFrame;\n}(Widget));\nexport { TextFrame };\n/**\n * @private\n */\nvar LineFormat = /** @class */ (function () {\n function LineFormat() {\n }\n /**\n * @private\n */\n LineFormat.prototype.clone = function () {\n var lineFormat = new LineFormat();\n lineFormat.lineFormatType = this.lineFormatType;\n lineFormat.color = this.color;\n lineFormat.weight = this.weight;\n lineFormat.dashStyle = this.dashStyle;\n lineFormat.line = this.line;\n return lineFormat;\n };\n return LineFormat;\n}());\nexport { LineFormat };\n/**\n * @private\n */\nvar FillFormat = /** @class */ (function () {\n function FillFormat() {\n }\n /**\n * @private\n */\n FillFormat.prototype.clone = function () {\n var fillFormat = new FillFormat();\n fillFormat.color = this.color;\n fillFormat.fill = this.fill;\n return fillFormat;\n };\n return FillFormat;\n}());\nexport { FillFormat };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n _this.crop = false;\n /**\n * @private\n */\n _this.left = 0;\n /**\n * @private\n */\n _this.top = 0;\n /**\n * @private\n */\n _this.right = 0;\n /**\n * @private\n */\n _this.bottom = 0;\n /**\n * @private\n */\n _this.isMetaFile = false;\n /**\n * @private\n */\n _this.isCompressed = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isCrop\", {\n /**\n * @private\n */\n get: function () {\n return this.crop;\n },\n set: function (value) {\n this.crop = value;\n if (value) {\n var right = 0;\n var bottom = 0;\n if (this.left !== 0) {\n this.cropX = (this.left * this.cropWidthScale) / 100;\n }\n else {\n this.cropX = 0;\n }\n if (this.top !== 0) {\n this.cropY = (this.top * this.cropHeightScale) / 100;\n }\n else {\n this.cropY = 0;\n }\n if (this.right !== 0) {\n right = (this.right * this.cropWidthScale) / 100;\n }\n if (this.bottom !== 0) {\n bottom = (this.bottom * this.cropHeightScale) / 100;\n }\n this.cropWidth = (this.cropWidthScale - (this.cropX + right));\n this.cropHeight = (this.cropHeightScale - (this.cropY + bottom));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n if (!isNullOrUndefined(value)) {\n this.element.src = this.imageStr;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.isMetaFile = this.isMetaFile;\n image.isCompressed = this.isCompressed;\n image.metaFileImageString = this.metaFileImageString;\n image.width = this.width;\n image.height = this.height;\n image.top = this.top;\n image.left = this.left;\n image.bottom = this.bottom;\n image.right = this.right;\n image.cropHeightScale = this.cropHeightScale;\n image.cropWidthScale = this.cropWidthScale;\n image.cropX = this.cropX;\n image.cropY = this.cropY;\n image.isCrop = this.isCrop;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n image.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n image.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n image.removedIds = this.removedIds.slice();\n }\n }\n image.name = this.name;\n image.alternativeText = this.alternativeText;\n image.title = this.title;\n image.visible = this.visible;\n image.widthScale = this.widthScale;\n image.heightScale = this.heightScale;\n image.verticalPosition = this.verticalPosition;\n image.verticalOrigin = this.verticalOrigin;\n image.verticalAlignment = this.verticalAlignment;\n image.horizontalPosition = this.horizontalPosition;\n image.horizontalOrigin = this.horizontalOrigin;\n image.horizontalAlignment = this.horizontalAlignment;\n image.allowOverlap = this.allowOverlap;\n image.textWrappingStyle = this.textWrappingStyle;\n image.textWrappingType = this.textWrappingType;\n image.layoutInCell = this.layoutInCell;\n image.zOrderPosition = this.zOrderPosition;\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ShapeBase));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar EditRangeEndElementBox = /** @class */ (function (_super) {\n __extends(EditRangeEndElementBox, _super);\n function EditRangeEndElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.editRangeStart = undefined;\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.destroy = function () {\n this.editRangeStart = undefined;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.clone = function () {\n var end = new EditRangeEndElementBox();\n end.editRangeStart = this.editRangeStart;\n end.editRangeId = this.editRangeId;\n return end;\n };\n return EditRangeEndElementBox;\n}(ElementBox));\nexport { EditRangeEndElementBox };\n/**\n * @private\n */\nvar EditRangeStartElementBox = /** @class */ (function (_super) {\n __extends(EditRangeStartElementBox, _super);\n function EditRangeStartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.columnFirst = -1;\n /**\n * @private\n */\n _this.columnLast = -1;\n /**\n * @private\n */\n _this.user = '';\n /**\n * @private\n */\n _this.group = '';\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.renderLockMark = function (currentUser, locale) {\n if (isNullOrUndefined(this.editRangeMark)) {\n var user = currentUser === this.user ? 'you' : this.user;\n this.editRangeMark = document.createElement('div');\n this.editRangeMark.style.display = 'none';\n this.editRangeMark.classList.add('e-de-lock-mark');\n var span = document.createElement('span');\n span.className = 'e-icons e-de-ctnr-lock';\n this.editRangeMark.appendChild(span);\n this.editRangeMark.title = locale.getConstant('This region is locked by') + ' ' + user;\n }\n if (this.line && isNullOrUndefined(this.editRangeMark.parentElement)) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n documentHelper.pageContainer.appendChild(this.editRangeMark);\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.removeEditRangeMark = function () {\n if (this.editRangeMark) {\n this.editRangeMark.parentElement.removeChild(this.editRangeMark);\n this.editRangeMark = undefined;\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.destroy = function () {\n this.user = undefined;\n this.columnFirst = undefined;\n this.columnLast = undefined;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.clone = function () {\n var start = new EditRangeStartElementBox();\n start.columnFirst = this.columnFirst;\n start.columnLast = this.columnLast;\n start.user = this.user;\n start.group = this.group;\n start.editRangeEnd = this.editRangeEnd;\n start.editRangeId = this.editRangeId;\n return start;\n };\n return EditRangeStartElementBox;\n}(ElementBox));\nexport { EditRangeStartElementBox };\n/**\n * @private\n */\nvar ChartElementBox = /** @class */ (function (_super) {\n __extends(ChartElementBox, _super);\n /**\n * @private\n */\n function ChartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.chartTitle = '';\n /**\n * @private\n */\n _this.chartType = '';\n /**\n * @private\n */\n _this.chartElement = undefined;\n /**\n * @private\n */\n _this.chartCategory = [];\n /**\n * @private\n */\n _this.chartSeries = [];\n _this.chartArea = new ChartArea();\n _this.chartPlotArea = new ChartArea();\n _this.chartTitleArea = new ChartTitleArea();\n _this.chartLegend = new ChartLegend();\n _this.chartPrimaryCategoryAxis = new ChartCategoryAxis();\n _this.chartPrimaryValueAxis = new ChartCategoryAxis();\n _this.chartDataTable = new ChartDataTable();\n return _this;\n }\n /**\n * @private\n */\n ChartElementBox.prototype.getLength = function () {\n return 1;\n };\n Object.defineProperty(ChartElementBox.prototype, \"title\", {\n /**\n * @private\n */\n get: function () {\n return this.chartTitle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartTitle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"type\", {\n /**\n * @private\n */\n get: function () {\n return this.chartType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartGapWidth\", {\n /**\n * @private\n */\n get: function () {\n return this.gapWidth;\n },\n /**\n * @private\n */\n set: function (value) {\n this.gapWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartOverlap\", {\n /**\n * @private\n */\n get: function () {\n return this.overlap;\n },\n /**\n * @private\n */\n set: function (value) {\n this.overlap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"targetElement\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.div)) {\n this.div = createElement('div');\n }\n return this.div;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"officeChart\", {\n /**\n * @private\n */\n get: function () {\n return this.officeChartInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n if (value) {\n this.officeChartInternal = value;\n this.officeChartInternal.chart.loaded = this.onChartLoaded.bind(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n ChartElementBox.prototype.onChartLoaded = function () {\n var _this = this;\n this.officeChart.convertChartToImage(this.officeChart.chart, this.width, this.height).then(function (dataURL) {\n _this.imageString = dataURL;\n });\n };\n /**\n * @private\n */\n ChartElementBox.prototype.clone = function () {\n var chart = new ChartElementBox();\n chart.chartTitle = this.chartTitle;\n chart.chartType = this.chartType;\n chart.height = this.height;\n chart.width = this.width;\n chart.gapWidth = this.gapWidth;\n chart.overlap = this.overlap;\n for (var i = 0; i < this.chartCategory.length; i++) {\n var chartCategory = this.chartCategory[i].clone();\n chart.chartCategory.push(chartCategory);\n }\n for (var i = 0; i < this.chartSeries.length; i++) {\n var series = this.chartSeries[i].clone();\n chart.chartSeries.push(series);\n }\n chart.chartArea = this.chartArea.clone();\n chart.chartPlotArea = this.chartPlotArea.clone();\n chart.chartLegend = this.chartLegend.clone();\n chart.chartTitleArea = this.chartTitleArea.clone();\n chart.chartPrimaryCategoryAxis = this.chartPrimaryCategoryAxis.clone();\n chart.chartPrimaryValueAxis = this.chartPrimaryValueAxis.clone();\n chart.chartDataTable = this.chartDataTable.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartElementBox.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.officeChartInternal) {\n this.officeChartInternal.chart.loaded = undefined;\n this.officeChartInternal.destroy();\n this.officeChartInternal = undefined;\n }\n if (this.div) {\n this.div = undefined;\n }\n this.chartTitle = undefined;\n this.chartType = undefined;\n this.chartArea = undefined;\n this.chartPlotArea = undefined;\n this.chartCategory = [];\n this.chartSeries = [];\n this.chartTitleArea = undefined;\n this.chartLegend = undefined;\n this.chartPrimaryCategoryAxis = undefined;\n this.chartPrimaryValueAxis = undefined;\n this.chartDataTable = undefined;\n this.chartElement = undefined;\n };\n return ChartElementBox;\n}(ImageElementBox));\nexport { ChartElementBox };\n/**\n * @private\n */\nvar ChartArea = /** @class */ (function () {\n function ChartArea() {\n }\n Object.defineProperty(ChartArea.prototype, \"chartForeColor\", {\n /**\n * @private\n */\n get: function () {\n return this.foreColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.foreColor = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartArea.prototype.clone = function () {\n var chart = new ChartArea();\n chart.foreColor = this.foreColor;\n return chart;\n };\n /**\n * @private\n */\n ChartArea.prototype.destroy = function () {\n this.foreColor = undefined;\n };\n return ChartArea;\n}());\nexport { ChartArea };\n/**\n * @private\n */\nvar ChartCategory = /** @class */ (function () {\n function ChartCategory() {\n /**\n * @private\n */\n this.categoryXName = '';\n /**\n * @private\n */\n this.chartData = [];\n }\n Object.defineProperty(ChartCategory.prototype, \"xName\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryXName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryXName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategory.prototype.clone = function () {\n var chart = new ChartCategory();\n chart.categoryXName = this.categoryXName;\n for (var i = 0; i < this.chartData.length; i++) {\n var chartData = this.chartData[i].clone();\n chart.chartData.push(chartData);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartCategory.prototype.destroy = function () {\n this.categoryXName = undefined;\n this.chartData = [];\n };\n return ChartCategory;\n}());\nexport { ChartCategory };\n/**\n * @private\n */\nvar ChartData = /** @class */ (function () {\n function ChartData() {\n }\n Object.defineProperty(ChartData.prototype, \"yAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.yValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.yValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"xAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.xValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.xValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"bubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartData.prototype.clone = function () {\n var chart = new ChartData();\n chart.yValue = this.yValue;\n chart.xValue = this.xValue;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartData.prototype.destroy = function () {\n this.xValue = undefined;\n this.yValue = undefined;\n this.size = undefined;\n };\n return ChartData;\n}());\nexport { ChartData };\n/**\n * @private\n */\nvar ChartLegend = /** @class */ (function () {\n /**\n * @private\n */\n function ChartLegend() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartLegend.prototype, \"chartLegendPostion\", {\n /**\n * @private\n */\n get: function () {\n return this.legendPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.legendPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLegend.prototype.clone = function () {\n var chart = new ChartLegend();\n chart.legendPostion = this.legendPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartLegend.prototype.destroy = function () {\n this.legendPostion = undefined;\n this.chartTitleArea = undefined;\n };\n return ChartLegend;\n}());\nexport { ChartLegend };\n/**\n * @private\n */\nvar ChartSeries = /** @class */ (function () {\n function ChartSeries() {\n /**\n * @private\n */\n this.chartDataFormat = [];\n /**\n * @private\n */\n this.trendLines = [];\n this.errorBar = new ChartErrorBar();\n this.dataLabels = new ChartDataLabels();\n this.seriesFormat = new ChartSeriesFormat();\n }\n Object.defineProperty(ChartSeries.prototype, \"seriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"firstSliceAngle\", {\n /**\n * @private\n */\n get: function () {\n return this.sliceAngle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.sliceAngle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"doughnutHoleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.holeSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.holeSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeries.prototype.clone = function () {\n var chart = new ChartSeries();\n chart.name = this.name;\n chart.sliceAngle = this.sliceAngle;\n chart.holeSize = this.holeSize;\n chart.errorBar = this.errorBar.clone();\n chart.dataLabels = this.dataLabels.clone();\n chart.seriesFormat = this.seriesFormat.clone();\n for (var i = 0; i < this.chartDataFormat.length; i++) {\n var format = (this.chartDataFormat[i].clone());\n chart.chartDataFormat.push(format);\n }\n for (var i = 0; i < this.trendLines.length; i++) {\n var trendLine = (this.trendLines[i].clone());\n chart.trendLines.push(trendLine);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartSeries.prototype.destroy = function () {\n this.name = undefined;\n this.errorBar = undefined;\n this.trendLines = undefined;\n this.chartDataFormat = [];\n };\n return ChartSeries;\n}());\nexport { ChartSeries };\n/**\n * @private\n */\nvar ChartErrorBar = /** @class */ (function () {\n function ChartErrorBar() {\n }\n Object.defineProperty(ChartErrorBar.prototype, \"errorType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorDirection\", {\n /**\n * @private\n */\n get: function () {\n return this.direction;\n },\n /**\n * @private\n */\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorEndStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.endStyle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.endStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"numberValue\", {\n get: function () {\n return this.errorValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.errorValue = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartErrorBar.prototype.clone = function () {\n var chart = new ChartErrorBar();\n chart.type = this.type;\n chart.errorDirection = this.errorDirection;\n chart.endStyle = this.endStyle;\n chart.errorValue = this.errorValue;\n return chart;\n };\n /**\n * @private\n */\n ChartErrorBar.prototype.destroy = function () {\n this.type = undefined;\n this.errorDirection = undefined;\n this.endStyle = undefined;\n };\n return ChartErrorBar;\n}());\nexport { ChartErrorBar };\n/**\n * @private\n */\nvar ChartSeriesFormat = /** @class */ (function () {\n function ChartSeriesFormat() {\n }\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.style;\n },\n /**\n * @private\n */\n set: function (value) {\n this.style = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"numberValue\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeriesFormat.prototype.clone = function () {\n var chart = new ChartSeriesFormat();\n chart.style = this.style;\n chart.color = this.color;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartSeriesFormat.prototype.destroy = function () {\n this.style = undefined;\n this.color = undefined;\n this.size = undefined;\n };\n return ChartSeriesFormat;\n}());\nexport { ChartSeriesFormat };\n/**\n * @private\n */\nvar ChartDataLabels = /** @class */ (function () {\n function ChartDataLabels() {\n }\n Object.defineProperty(ChartDataLabels.prototype, \"labelPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.position;\n },\n /**\n * @private\n */\n set: function (value) {\n this.position = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLegendKey\", {\n /**\n * @private\n */\n get: function () {\n return this.isLegend;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isLegend = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isBubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.isBubble;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBubble = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isCategoryName\", {\n /**\n * @private\n */\n get: function () {\n return this.isCategory;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isCategory = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isSeriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeries;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeries = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isValue\", {\n /**\n * @private\n */\n get: function () {\n return this.isValueEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isValueEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isPercentage\", {\n /**\n * @private\n */\n get: function () {\n return this.isPercentageEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isPercentageEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLeaderLines\", {\n /**\n * @private\n */\n get: function () {\n return this.showLeaderLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.showLeaderLines = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataLabels.prototype.clone = function () {\n var chart = new ChartDataLabels();\n chart.position = this.position;\n chart.name = this.name;\n chart.color = this.color;\n chart.size = this.size;\n chart.isBubble = this.isBubble;\n chart.isLegend = this.isLegend;\n chart.isCategory = this.isCategory;\n chart.isSeries = this.isSeries;\n chart.isValueEnabled = this.isValueEnabled;\n chart.isPercentageEnabled = this.isPercentageEnabled;\n chart.showLeaderLines = this.showLeaderLines;\n return chart;\n };\n /**\n * @private\n */\n ChartDataLabels.prototype.destroy = function () {\n this.position = undefined;\n };\n return ChartDataLabels;\n}());\nexport { ChartDataLabels };\n/**\n * @private\n */\nvar ChartTrendLines = /** @class */ (function () {\n function ChartTrendLines() {\n }\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"interceptValue\", {\n /**\n * @private\n */\n get: function () {\n return this.intercept;\n },\n /**\n * @private\n */\n set: function (value) {\n this.intercept = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"forwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.forward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.forward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"backwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.backward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.backward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayRSquared\", {\n /**\n * @private\n */\n get: function () {\n return this.displayRSquared;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayRSquared = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayEquation\", {\n /**\n * @private\n */\n get: function () {\n return this.displayEquation;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayEquation = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTrendLines.prototype.clone = function () {\n var chart = new ChartTrendLines();\n chart.type = this.type;\n chart.name = this.name;\n chart.forward = this.forward;\n chart.backward = this.backward;\n chart.intercept = this.intercept;\n chart.displayEquation = this.displayEquation;\n chart.displayRSquared = this.displayRSquared;\n return chart;\n };\n /**\n * @private\n */\n ChartTrendLines.prototype.destroy = function () {\n this.type = undefined;\n this.name = undefined;\n this.forward = undefined;\n this.backward = undefined;\n };\n return ChartTrendLines;\n}());\nexport { ChartTrendLines };\n/**\n * @private\n */\nvar ChartTitleArea = /** @class */ (function () {\n /**\n * @private\n */\n function ChartTitleArea() {\n this.dataFormat = new ChartDataFormat();\n this.layout = new ChartLayout();\n }\n Object.defineProperty(ChartTitleArea.prototype, \"chartfontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTitleArea.prototype, \"chartFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTitleArea.prototype.clone = function () {\n var chart = new ChartTitleArea();\n chart.fontName = this.fontName;\n chart.fontSize = this.fontSize;\n chart.dataFormat = this.dataFormat.clone();\n chart.layout = this.layout.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartTitleArea.prototype.destroy = function () {\n this.fontName = undefined;\n this.fontSize = undefined;\n this.dataFormat = undefined;\n this.layout = undefined;\n };\n return ChartTitleArea;\n}());\nexport { ChartTitleArea };\n/**\n * @private\n */\nvar ChartDataFormat = /** @class */ (function () {\n /**\n * @private\n */\n function ChartDataFormat() {\n this.fill = new ChartFill();\n this.line = new ChartFill();\n }\n /**\n * @private\n */\n ChartDataFormat.prototype.clone = function () {\n var chart = new ChartDataFormat();\n chart.fill = this.fill.clone();\n chart.line = this.line.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartDataFormat.prototype.destroy = function () {\n this.fill = undefined;\n this.line = undefined;\n };\n return ChartDataFormat;\n}());\nexport { ChartDataFormat };\n/**\n * @private\n */\nvar ChartFill = /** @class */ (function () {\n function ChartFill() {\n }\n Object.defineProperty(ChartFill.prototype, \"color\", {\n /**\n * @private\n */\n get: function () {\n return this.fillColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartFill.prototype, \"rgb\", {\n /**\n * @private\n */\n get: function () {\n return this.fillRGB;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillRGB = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartFill.prototype.clone = function () {\n var chart = new ChartFill();\n chart.fillColor = this.fillColor;\n chart.fillRGB = this.fillRGB;\n return chart;\n };\n /**\n * @private\n */\n ChartFill.prototype.destroy = function () {\n this.fillColor = undefined;\n this.fillRGB = undefined;\n };\n return ChartFill;\n}());\nexport { ChartFill };\n/**\n * @private\n */\nvar ChartLayout = /** @class */ (function () {\n function ChartLayout() {\n }\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutLeft\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutX;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutTop\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutY;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutY = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLayout.prototype.clone = function () {\n var chart = new ChartLayout();\n chart.layoutX = this.layoutX;\n chart.layoutY = this.layoutY;\n return chart;\n };\n /**\n * @private\n */\n ChartLayout.prototype.destroy = function () {\n this.layoutX = undefined;\n this.layoutY = undefined;\n };\n return ChartLayout;\n}());\nexport { ChartLayout };\n/**\n * @private\n */\nvar ChartCategoryAxis = /** @class */ (function () {\n function ChartCategoryAxis() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.majorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.minorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"tickPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.tickLabelPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tickLabelPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMinorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMinorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMajorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMajorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"interval\", {\n /**\n * @private\n */\n get: function () {\n return this.majorUnit;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorUnit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"max\", {\n /**\n * @private\n */\n get: function () {\n return this.maximumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.maximumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"min\", {\n /**\n * @private\n */\n get: function () {\n return this.minimumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minimumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisTitle\", {\n /**\n * @private\n */\n get: function () {\n return this.title;\n },\n /**\n * @private\n */\n set: function (value) {\n this.title = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisType\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryNumberFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.numberFormat;\n },\n /**\n * @private\n */\n set: function (value) {\n this.numberFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategoryAxis.prototype.clone = function () {\n var chart = new ChartCategoryAxis();\n chart.title = this.title;\n chart.categoryType = this.categoryType;\n chart.numberFormat = this.numberFormat;\n chart.fontSize = this.fontSize;\n chart.fontName = this.fontName;\n chart.hasMajorGridLines = this.hasMajorGridLines;\n chart.hasMinorGridLines = this.hasMinorGridLines;\n chart.minimumValue = this.minimumValue;\n chart.maximumValue = this.maximumValue;\n chart.majorUnit = this.majorUnit;\n chart.majorTickMark = this.majorTickMark;\n chart.minorTickMark = this.minorTickMark;\n chart.tickLabelPostion = this.tickLabelPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartCategoryAxis.prototype.destroy = function () {\n this.title = undefined;\n this.categoryType = undefined;\n this.numberFormat = undefined;\n this.chartTitleArea = undefined;\n this.minimumValue = undefined;\n this.maximumValue = undefined;\n this.fontSize = undefined;\n this.fontName = undefined;\n this.majorUnit = undefined;\n this.majorTickMark = undefined;\n this.minorTickMark = undefined;\n this.tickLabelPostion = undefined;\n };\n return ChartCategoryAxis;\n}());\nexport { ChartCategoryAxis };\n/**\n * @private\n */\nvar ChartDataTable = /** @class */ (function () {\n function ChartDataTable() {\n }\n Object.defineProperty(ChartDataTable.prototype, \"showSeriesKeys\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeriesKeys;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeriesKeys = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasHorzBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isHorzBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHorzBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasVertBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isVertBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isVertBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasBorders\", {\n /**\n * @private\n */\n get: function () {\n return this.isBorders;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataTable.prototype.clone = function () {\n var chart = new ChartDataTable();\n chart.isSeriesKeys = this.isSeriesKeys;\n chart.isHorzBorder = this.isHorzBorder;\n chart.isVertBorder = this.isVertBorder;\n chart.isBorders = this.isBorders;\n return chart;\n };\n /**\n * @private\n */\n ChartDataTable.prototype.destroy = function () {\n this.isSeriesKeys = undefined;\n this.isHorzBorder = undefined;\n this.isVertBorder = undefined;\n this.isBorders = undefined;\n };\n return ChartDataTable;\n}());\nexport { ChartDataTable };\n/**\n * @private\n */\nvar CommentCharacterElementBox = /** @class */ (function (_super) {\n __extends(CommentCharacterElementBox, _super);\n function CommentCharacterElementBox(type) {\n var _this = _super.call(this) || this;\n _this.commentType = 0;\n _this.commentId = '';\n _this.commentType = type;\n return _this;\n }\n Object.defineProperty(CommentCharacterElementBox.prototype, \"comment\", {\n get: function () {\n return this.commentInternal;\n },\n set: function (value) {\n this.commentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentCharacterElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentCharacterElementBox.prototype.clone = function () {\n var comment = new CommentCharacterElementBox(this.commentType);\n comment.commentId = this.commentId;\n comment.commentType = this.commentType;\n return comment;\n };\n CommentCharacterElementBox.prototype.renderCommentMark = function () {\n if (this.commentType === 0 && isNullOrUndefined(this.commentMark)) {\n this.commentMark = document.createElement('div');\n this.commentMark.style.display = 'none';\n this.commentMark.classList.add('e-de-cmt-mark');\n var span = document.createElement('span');\n span.classList.add('e-icons');\n span.classList.add('e-de-cmt-mark-icon');\n this.commentMark.appendChild(span);\n }\n if (this.line && isNullOrUndefined(this.commentMark.parentElement)) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n documentHelper.pageContainer.appendChild(this.commentMark);\n this.commentMark.addEventListener('click', this.selectComment.bind(this));\n }\n };\n CommentCharacterElementBox.prototype.selectComment = function () {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n if (documentHelper.owner) {\n if (!documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n documentHelper.selectComment(this.comment);\n }\n else {\n documentHelper.owner.showComments = true;\n }\n }\n };\n CommentCharacterElementBox.prototype.removeCommentMark = function () {\n if (this.commentMark && this.commentMark.parentElement) {\n this.commentMark.removeEventListener('click', this.selectComment.bind(this));\n this.commentMark.parentElement.removeChild(this.commentMark);\n }\n };\n CommentCharacterElementBox.prototype.destroy = function () {\n if (this.commentMark) {\n this.removeCommentMark();\n }\n };\n return CommentCharacterElementBox;\n}(ElementBox));\nexport { CommentCharacterElementBox };\n/**\n * @private\n */\nvar CommentElementBox = /** @class */ (function (_super) {\n __extends(CommentElementBox, _super);\n function CommentElementBox(date) {\n var _this = _super.call(this, 0) || this;\n _this.authorIn = '';\n _this.initialIn = '';\n _this.done = false;\n _this.textIn = '';\n _this.isReply = false;\n _this.ownerComment = undefined;\n _this.createdDate = date;\n _this.replyComments = [];\n return _this;\n }\n Object.defineProperty(CommentElementBox.prototype, \"commentStart\", {\n get: function () {\n return this.commentStartIn;\n },\n set: function (value) {\n this.commentStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"commentEnd\", {\n get: function () {\n return this.commentEndIn;\n },\n set: function (value) {\n this.commentEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"author\", {\n get: function () {\n return this.authorIn;\n },\n set: function (value) {\n this.authorIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"initial\", {\n get: function () {\n return this.initialIn;\n },\n set: function (value) {\n this.initialIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"isResolved\", {\n get: function () {\n return this.done;\n },\n set: function (value) {\n this.done = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"date\", {\n get: function () {\n return this.createdDate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"text\", {\n get: function () {\n return this.textIn;\n },\n set: function (value) {\n this.textIn = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentElementBox.prototype.clone = function () {\n var comment = new CommentElementBox(this.date);\n comment.author = this.author;\n comment.initial = this.initial;\n comment.commentId = this.commentId;\n comment.replyComments = this.replyComments;\n comment.isResolved = this.isResolved;\n comment.text = this.text;\n return comment;\n };\n CommentElementBox.prototype.destroy = function () {\n this.ownerComment = undefined;\n };\n return CommentElementBox;\n}(CommentCharacterElementBox));\nexport { CommentElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page(documentHelper) {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidgetIn = undefined;\n /**\n * @private\n */\n this.footerWidgetIn = undefined;\n /**\n * @private\n */\n this.footnoteWidget = undefined;\n /**\n * @private\n */\n this.endnoteWidget = undefined;\n /**\n * @private\n */\n this.currentPageNum = 1;\n /**\n * @private\n */\n this.allowNextPageRendering = true;\n this.documentHelper = documentHelper;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"headerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.headerWidgetIn)) {\n if (this.headerWidgetIn.parentHeaderFooter) {\n return this.headerWidgetIn.parentHeaderFooter;\n }\n }\n return this.headerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.headerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"footerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.footerWidgetIn)) {\n if (this.footerWidgetIn.parentHeaderFooter) {\n return this.footerWidgetIn.parentHeaderFooter;\n }\n }\n return this.footerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.footerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.documentHelper.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.documentHelper.pages.length - 1) {\n return this.documentHelper.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidgetIn && !isNullOrUndefined(this.headerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.removeFieldInWidget(this.headerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editor.removeFieldInWidget(this.headerWidgetIn, false, true);\n }\n this.headerWidgetIn.destroy();\n this.headerWidget = undefined;\n }\n if (this.footerWidgetIn && !isNullOrUndefined(this.footerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.removeFieldInWidget(this.footerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editor.removeFieldInWidget(this.footerWidgetIn, false, true);\n }\n this.footerWidgetIn.destroy();\n this.footerWidgetIn = undefined;\n }\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n if (!isNullOrUndefined(this.documentHelper.pages)) {\n this.documentHelper.removePage(this, true);\n }\n }\n this.documentHelper = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, sizeInfo, offset, preferredWidthType) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Grid span > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (sizeInfo.minimumWordWidth > this.columns[columnSpan - 1].minimumWordWidth) {\n this.columns[columnSpan - 1].minimumWordWidth = sizeInfo.minimumWordWidth;\n }\n if (sizeInfo.maximumWordWidth > this.columns[columnSpan - 1].maximumWordWidth) {\n this.columns[columnSpan - 1].maximumWordWidth = sizeInfo.maximumWordWidth;\n }\n if (sizeInfo.minimumWidth > this.columns[columnSpan - 1].minimumWidth) {\n this.columns[columnSpan - 1].minimumWidth = sizeInfo.minimumWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n this.columns[columnSpan - 1].widthType = preferredWidthType;\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function (type) {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += type === 0 ? column.preferredWidth :\n type === 1 ? column.minimumWordWidth :\n type === 2 ? column.maximumWordWidth : column.minimumWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.autoFitColumn = function (containerWidth, preferredTableWidth, isAuto, isNestedTable, indent) {\n // Cell's preferred width should be considered until the table width fits to the container width.\n var maxTotal = 0;\n var minTotal = 0;\n // For preferred width set as 0 pixels (not auto), then minimum word width only need to be considered.\n // But currently there is no way to find any one of cell in particular column has 0 px preferred width set.\n // If all columns are set as 0 pixels, then this will work.\n var remainingWidthTotal = 0;\n var isAllColumnPointWidth = true;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // If preferred width of column is less than column minimum width and also column is empty, considered column preferred width\n if (column.minimumWordWidth === 0 && column.maximumWordWidth === 0 && column.minWidth === 0) {\n column.minimumWordWidth = column.preferredWidth;\n column.maximumWordWidth = column.preferredWidth;\n column.minWidth = column.preferredWidth;\n }\n if (column.widthType !== 'Point') {\n isAllColumnPointWidth = false;\n }\n var difference = 0;\n maxTotal += column.preferredWidth > column.maximumWordWidth ? column.preferredWidth : column.maximumWordWidth;\n minTotal += column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n var preferred = column.preferredWidth === 0 ? column.minimumWordWidth : column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n difference = column.maximumWordWidth - preferred;\n remainingWidthTotal += difference > 0 ? difference : 0;\n }\n // Try to fit maximum word width to match preferredTableWidth.\n if (maxTotal <= preferredTableWidth) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n continue;\n }\n if (column.preferredWidth < column.maximumWordWidth) {\n // if (isNestedTable) {\n // column.preferredWidth = column.minimumWidth + column.minimumWordWidth;\n // } else {\n column.preferredWidth = column.maximumWordWidth;\n //}\n }\n }\n // If the width is defined for table(cells undefined) then fit the columns to preferred table width using FitColumns.\n if (!isAuto) {\n this.fitColumns(containerWidth, preferredTableWidth, isAuto);\n }\n }\n else {\n // If the table preferred table width is set, then check its greater than total minimum word width. \n // If yes then set table preferred table width as container width. Else, check whether the total minimum word width is less than container width.\n // If yes, then set total minimum word width as container width. Else, set the container width to container width.\n if (!isAuto) {\n //let totalMinimumWordWidth: number = this.getTotalWidth(1);\n //if (preferredTableWidth > totalMinimumWordWidth && totalMinimumWordWidth < containerWidth) {\n var considerMinAsTableWidth = false;\n if (preferredTableWidth < minTotal && minTotal + (isNullOrUndefined(indent) ? 0 : indent) < containerWidth) {\n considerMinAsTableWidth = true;\n }\n this.fitColumns(containerWidth, considerMinAsTableWidth ? minTotal : preferredTableWidth, isAuto);\n return;\n //}\n //containerWidth = preferredTableWidth < totalMinimumWordWidth ? totalMinimumWordWidth < containerWidth ? totalMinimumWordWidth : containerWidth : preferredTableWidth;\n }\n // Try to fit minimum word width to match preferredTableWidth or containerWidth.\n if (minTotal <= preferredTableWidth || minTotal <= containerWidth) {\n var availableWidth = containerWidth > preferredTableWidth ? containerWidth : preferredTableWidth;\n availableWidth = availableWidth - minTotal;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n continue;\n }\n if (column.preferredWidth === 0) {\n column.preferredWidth = column.minimumWordWidth;\n }\n else {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n }\n var difference = column.maximumWordWidth - column.preferredWidth;\n difference = difference > 0 ? difference : 0;\n var factor = availableWidth * (difference / remainingWidthTotal);\n column.preferredWidth += isNaN(factor) ? 0 : factor;\n }\n }\n else {\n // Try to fit minimum width for each column and allot remaining space to columns based on their minimum word width.\n var totalMinimumWordWidth = this.getTotalWidth(1);\n var totalMinWidth = this.getTotalWidth(3);\n var totalPreferredWidth = this.getTotalWidth(0);\n if (totalMinWidth > 2112) {\n var cellWidth = 2112 / this.columns.length;\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].preferredWidth = cellWidth;\n }\n }\n else {\n var availableWidth = 0;\n if ((totalMinWidth < containerWidth) && ((containerWidth - totalMinWidth) >= 1) && !isAllColumnPointWidth) {\n availableWidth = containerWidth - totalMinWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // The factor depends of current column's minimum word width and total minimum word width.\n var factor = availableWidth * column.minimumWordWidth / totalMinimumWordWidth;\n factor = isNaN(factor) ? 0 : factor;\n column.preferredWidth = (column.minimumWidth == 0 ? 1 : column.minimumWidth) + factor;\n }\n // table width exceeds container width\n }\n else if (totalPreferredWidth > containerWidth) {\n var factor = containerWidth / totalPreferredWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = column.preferredWidth * factor;\n }\n }\n }\n }\n }\n this.tableWidth = this.getTotalWidth(0);\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth, indent) {\n if (isNullOrUndefined(indent)) {\n indent = 0;\n }\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // Neglected left indent value, because in preferred table width left indent value is neglected\n if (isAutoWidth) {\n totalColumnWidth -= indent;\n }\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = totalColumnWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth) {\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n if (this.columns[i - 1].endOffset === 0) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.getPreviousValidOffset(i - 2);\n }\n else {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n }\n };\n WTableHolder.prototype.getPreviousValidOffset = function (columnIndex) {\n for (var j = columnIndex; j >= 0; j--) {\n if (this.columns[j].endOffset !== 0) {\n return this.columns[j].endOffset;\n }\n }\n return 0;\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n/**\n * @private\n */\nvar ColumnSizeInfo = /** @class */ (function () {\n function ColumnSizeInfo() {\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n /**\n * @private\n */\n this.hasMinimumWidth = false;\n /**\n * @private\n */\n this.hasMinimumWordWidth = false;\n /**\n * @private\n */\n this.hasMaximumWordWidth = false;\n }\n return ColumnSizeInfo;\n}());\nexport { ColumnSizeInfo };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, classList, Browser } from '@syncfusion/ej2-base';\nimport { FieldElementBox, TextFormField, CheckBoxFormField, DropDownFormField } from './viewer/page';\nvar CONTEXTMENU_LOCK = '_contextmenu_lock';\nvar CONTEXTMENU_UNLOCK = '_contextmenu_unlock';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_ADD_COMMENT = '_add_comment';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_PROPERTIES = '_properties';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_AUTO_FIT = '_contextmenu_auto_fit';\nvar CONTEXTMENU_AUTO_FIT_TO_CONTENTS = '_contextmenu_auto_fit_contents';\nvar CONTEXTMENU_AUTO_FIT_TO_WINDOW = '_contextmenu_auto_fit_window';\nvar CONTEXTMENU_FIXED_COLUMN_WIDTH = '_contextmenu_fixed_column_width';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\nvar CONTEXTMENU_SPELLING_DIALOG = '_contextmenu_spelling_dialog';\nvar CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS = '_contextmenu_otherSuggestions_spellcheck_';\nvar CONTEXTMENU_NO_SUGGESTION = '_contextmenu_no_suggestion';\nvar CONTEXTMENU_ACCEPT_CHANGES = '_contextmenu_accept_changes';\nvar CONTEXTMENU_REJECT_CHANGES = '_contextmenu_reject_changes';\nvar CONTEXTMENU_NOTE_OPTIONS = '_contextmenu_note_options';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ContextMenu(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * @private\n */\n this.menuItems = [];\n /**\n * @private\n */\n this.customMenuItems = [];\n /**\n * @private\n */\n this.ids = [];\n this.spellContextItems = [];\n this.customItems = [];\n /**\n * Handles on context menu key pressed.\n * @param {MouseEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n if (_this.documentHelper.owner.isSpellCheck && _this.spellChecker.allowSpellCheckAndSuggestion) {\n event.preventDefault();\n _this.currentContextInfo = _this.spellChecker.findCurretText();\n var splittedSuggestion_1;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var allSuggestions_1;\n var exactData_1 = _this.spellChecker.manageSpecialCharacters(_this.currentContextInfo.text, undefined, true);\n if (!isNullOrUndefined(exactData_1) && _this.spellChecker.errorWordCollection.containsKey(exactData_1)) {\n _this.spellChecker.currentContextInfo = _this.currentContextInfo;\n if (_this.spellChecker.errorSuggestions.containsKey(exactData_1)) {\n allSuggestions_1 = _this.spellChecker.errorSuggestions.get(exactData_1).slice();\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n else {\n if (_this.spellChecker.enableOptimizedSpellCheck) {\n _this.spellChecker.callSpellChecker(_this.spellChecker.languageID, exactData_1, false, true, false, false).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n allSuggestions_1 = jsonObject.Suggestions;\n if (!isNullOrUndefined(allSuggestions_1)) {\n _this.spellChecker.errorSuggestions.add(exactData_1, allSuggestions_1.slice());\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n }\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n });\n }\n else {\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n };\n this.documentHelper = documentHelper;\n this.locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.locale.setLocale(this.documentHelper.owner.locale);\n this.initContextMenu(this.locale, this.documentHelper.owner.enableRtl);\n }\n Object.defineProperty(ContextMenu.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ContextMenu.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellChecker;\n },\n enumerable: true,\n configurable: true\n });\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n *\n * @param localValue Localize value.\n * @private\n */\n /* eslint-disable */\n ContextMenu.prototype.initContextMenu = function (localValue, isRtl) {\n var _this = this;\n var id = this.documentHelper.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.documentHelper.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.contentEditable = 'false';\n ul.style.width = 'auto';\n ul.id = this.documentHelper.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n this.menuItems = [\n {\n text: localValue.getConstant('Lock'),\n iconCss: 'e-icons e-de-ctnr-lock',\n id: id + CONTEXTMENU_LOCK\n },\n {\n text: localValue.getConstant('Unlock'),\n iconCss: 'e-icons',\n id: id + CONTEXTMENU_UNLOCK\n },\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('New Comment'),\n iconCss: 'e-icons e-de-cmt-add',\n id: id + CONTEXTMENU_ADD_COMMENT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Accept Changes'),\n iconCss: 'e-icons e-de-acceptchange',\n id: id + CONTEXTMENU_ACCEPT_CHANGES\n },\n {\n text: localValue.getConstant('Reject Changes'),\n iconCss: 'e-icons e-de-rejectchange',\n id: id + CONTEXTMENU_REJECT_CHANGES\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update-field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field') + '...',\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At') + ' 1',\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink') + '...',\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink') + '...',\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n text: localValue.getConstant('Properties'),\n iconCss: 'e-icons e-de-formproperties',\n id: id + CONTEXTMENU_PROPERTIES\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font') + '...',\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph') + '...',\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n text: localValue.getConstant('Notes Options') + '...',\n id: id + CONTEXTMENU_NOTE_OPTIONS\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Table Properties') + '...',\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-icons e-de-ctnr-mergecell'\n },\n {\n text: localValue.getConstant('AutoFit'),\n id: id + CONTEXTMENU_AUTO_FIT,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('AutoFit to Contents'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS,\n iconCss: 'e-icons e-de-icon-autofit e-de-autofit-contents'\n },\n {\n text: localValue.getConstant('AutoFit to Window'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_WINDOW,\n iconCss: 'e-icons e-de-icon-auto-fitwindow e-de-autofit-window'\n },\n {\n text: localValue.getConstant('Fixed Column Width'),\n id: id + CONTEXTMENU_FIXED_COLUMN_WIDTH,\n iconCss: 'e-icons e-de-icon-fixed-columnwidth e-de-fixed-column'\n }\n ]\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu',\n enableRtl: isRtl,\n items: this.addMenuItems(this.menuItems),\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n for (var index = 0; index < _this.customMenuItems.length; index++) {\n if (typeof _this.customMenuItems[index].id !== 'undefined') {\n _this.ids[index] = _this.customMenuItems[index].id;\n }\n else {\n _this.ids[index] = _this.customMenuItems[index + 1].id;\n }\n }\n _this.documentHelper.owner.fireCustomContextMenuBeforeOpen(_this.ids);\n if (_this.enableCustomContextMenu) {\n for (var index = 0; index < _this.menuItems.length; index++) {\n if (typeof _this.menuItems[index].id !== 'undefined') {\n document.getElementById(_this.menuItems[index].id).style.display = 'none';\n }\n else {\n document.getElementById(_this.menuItems[index - 1].id).nextSibling.style.display = 'none';\n }\n }\n }\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, [], ['e-de-cursor-animation']);\n _this.documentHelper.selection.showCaret();\n }\n };\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, ['e-de-cursor-animation'], []);\n _this.documentHelper.updateFocus();\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.documentHelper.owner.element.id;\n switch (item) {\n case id + CONTEXTMENU_LOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.lockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_UNLOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.unlockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_COPY:\n this.documentHelper.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.documentHelper.owner.editor.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.editorModule.pasteInternal(undefined);\n }\n break;\n case id + CONTEXTMENU_ADD_COMMENT:\n if (!this.documentHelper.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode) {\n this.documentHelper.owner.editor.isUserInsert = true;\n this.documentHelper.owner.editorModule.insertComment();\n this.documentHelper.owner.editor.isUserInsert = false;\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n var isReadOnly = this.documentHelper.owner.isReadOnlyMode;\n if (this.documentHelper.selection.isReferenceField() && (!isReadOnly ||\n (isReadOnly && this.documentHelper.protectionType === 'FormFieldsOnly'))) {\n this.documentHelper.selection.updateRefField();\n }\n else if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.documentHelper.owner.fontDialogModule) {\n this.documentHelper.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.documentHelper.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.documentHelper.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.documentHelper.owner.hyperlinkDialogModule) {\n this.documentHelper.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.documentHelper.owner.editor.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.documentHelper.owner.paragraphDialogModule) {\n this.documentHelper.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.documentHelper.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.documentHelper.owner.editor.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.documentHelper.owner.editor.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.documentHelper.owner.editor.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.documentHelper.owner.editor.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.documentHelper.owner.editor.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.documentHelper.owner.editor.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.documentHelper.owner.editor.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.documentHelper.owner.editor.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.documentHelper.owner.editorModule.applyContinueNumbering();\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.documentHelper.owner.editorModule.applyRestartNumbering(this.documentHelper.selection);\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS:\n this.documentHelper.owner.editor.autoFitTable('FitToContents');\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_WINDOW:\n this.documentHelper.owner.editor.autoFitTable('FitToWindow');\n break;\n case id + CONTEXTMENU_FIXED_COLUMN_WIDTH:\n this.documentHelper.owner.editor.autoFitTable('FixedColumnWidth');\n break;\n case id + CONTEXTMENU_SPELLING_DIALOG:\n var contextInfo = this.spellChecker.retriveText();\n this.currentContextInfo = null;\n this.documentHelper.owner.spellCheckDialog.show(contextInfo.text, contextInfo.element);\n break;\n case id + CONTEXTMENU_ACCEPT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(true);\n break;\n case id + CONTEXTMENU_REJECT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(false);\n break;\n case id + CONTEXTMENU_PROPERTIES:\n var inline = this.documentHelper.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n if (inline.formFieldData instanceof TextFormField) {\n this.documentHelper.owner.textFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof CheckBoxFormField) {\n this.documentHelper.owner.checkBoxFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof DropDownFormField) {\n this.documentHelper.owner.dropDownFormFieldDialogModule.show();\n }\n }\n break;\n case id + CONTEXTMENU_NOTE_OPTIONS:\n this.documentHelper.owner.showFootNotesDialog();\n break;\n default:\n var expectedData = this.documentHelper.owner.element.id + CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS;\n if (item.substring(0, expectedData.length) === expectedData) {\n var content = item.substring(item.lastIndexOf('_') + 1);\n this.callSelectedOption(content);\n break;\n }\n else {\n // fires customContextMenuSelect while selecting the added custom menu item\n this.documentHelper.owner.fireCustomContextMenuSelect(item);\n break;\n }\n }\n };\n /**\n * Method to call the selected item\n * @param {string} content\n */\n ContextMenu.prototype.callSelectedOption = function (content) {\n if (content === 'Add to Dictionary') {\n this.spellChecker.handleAddToDictionary();\n }\n else if (content === 'Ignore All') {\n this.spellChecker.handleIgnoreAllItems();\n }\n else {\n this.spellChecker.manageReplace(content);\n }\n };\n /**\n * To add and customize custom context menu\n * @param {MenuItemModel[]} items - To add custom menu item\n * @param {boolean} isEnable - To hide existing menu item and show custom menu item alone\n * @param {boolean} isBottom - To show the custom menu item in bottom of the existing item\n * @returns {void}\n */\n ContextMenu.prototype.addCustomMenu = function (items, isEnable, isBottom) {\n var menuItems = JSON.parse(JSON.stringify(items));\n this.destroy();\n if (this.spellContextItems.length === 0) {\n this.customItems = items;\n }\n for (var index = 0; index < menuItems.length; index++) {\n this.customMenuItems.push(menuItems[index]);\n this.customMenuItems[index].id = this.documentHelper.owner.element.id + this.customMenuItems[index].id;\n }\n this.enableCustomContextMenu = isEnable;\n this.enableCustomContextMenuBottom = isBottom;\n this.initContextMenu(this.locale);\n };\n /**\n * Context Menu Items.\n * @param {MenuItemModel[]} menuItems - To add MenuItem to context menu\n * @private\n */\n ContextMenu.prototype.addMenuItems = function (menuItems) {\n if (this.enableCustomContextMenuBottom) {\n return menuItems.concat(this.customMenuItems);\n }\n else {\n return this.customMenuItems.concat(menuItems);\n }\n };\n /**\n * Opens context menu.\n * @param {MouseEvent | TouchEvent} event\n */\n ContextMenu.prototype.showContextMenuOnSel = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n var xPos = 0;\n var yPos = 0;\n if (isTouch) {\n var point = this.documentHelper.getTouchOffsetValue(event);\n xPos = point.x;\n yPos = point.y;\n }\n else {\n yPos = ((Browser.isIE) ? event.clientY : event.y) + document.body.scrollTop + document.documentElement.scrollTop;\n xPos = ((Browser.isIE) ? event.clientX : event.x) + document.body.scrollLeft + document.documentElement.scrollLeft;\n }\n if (this.showHideElements(this.documentHelper.selection)) {\n if (isTouch) {\n this.documentHelper.isMouseDown = false;\n }\n this.contextMenuInstance.open(yPos, xPos);\n event.preventDefault();\n }\n };\n /**\n * Method to hide spell context items\n */\n ContextMenu.prototype.hideSpellContextItems = function () {\n if (this.spellContextItems.length > 0) {\n for (var i = 0; i < this.spellContextItems.length; i++) {\n var item = document.getElementById(this.documentHelper.owner.element.id + this.spellContextItems[i].id);\n if (!isNullOrUndefined(item)) {\n item.style.display = 'none';\n }\n }\n }\n };\n /**\n * Method to process suggestions to add in context menu\n * @param {any} allSuggestions\n * @param {string[]} splittedSuggestion\n * @param {MouseEvent} event\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.processSuggestions = function (allSuggestions, splittedSuggestion, event) {\n this.spellContextItems = this.constructContextmenu(allSuggestions, splittedSuggestion);\n this.addCustomMenu(this.spellContextItems);\n this.noSuggestion = document.getElementById(this.documentHelper.owner.element.id + CONTEXTMENU_NO_SUGGESTION);\n if (!isNullOrUndefined(this.noSuggestion)) {\n this.noSuggestion.style.display = 'block';\n classList(this.noSuggestion, ['e-disabled'], ['e-focused']);\n }\n this.showContextMenuOnSel(event);\n };\n /**\n * Method to add inline menu\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.constructContextmenu = function (allSuggestion, splittedSuggestion) {\n var contextMenuItems = this.customItems.length > 0 ? this.customItems.slice() : [];\n // classList(this.noSuggestion,['e-disabled'],[]);\n if (isNullOrUndefined(allSuggestion) || allSuggestion.length === 0) {\n contextMenuItems.push({ text: this.locale.getConstant('no suggestions'), id: CONTEXTMENU_NO_SUGGESTION, classList: ['e-focused'], iconCss: '' });\n }\n else {\n for (var i = 0; i < allSuggestion.length; i++) {\n contextMenuItems.push({ text: allSuggestion[i], id: CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS + allSuggestion[i], iconCss: '' });\n }\n }\n contextMenuItems.push({ separator: true, id: '_contextmenu_suggestion_separator' });\n if (!isNullOrUndefined(splittedSuggestion) && splittedSuggestion.length > 1) {\n contextMenuItems.push({ text: this.locale.getConstant('More Suggestion'), items: splittedSuggestion });\n contextMenuItems.push({ separator: true, id: '_contextmenu_moreSuggestion_separator' });\n }\n else {\n contextMenuItems.push({ text: this.locale.getConstant('Add to Dictionary'), id: '_contextmenu_otherSuggestions_spellcheck_Add to Dictionary', iconCss: '' });\n }\n contextMenuItems.push({ text: this.locale.getConstant('Ignore Once'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore Once', iconCss: '' });\n contextMenuItems.push({ text: this.locale.getConstant('Ignore All'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore All', iconCss: '' });\n contextMenuItems.push({ separator: true, id: '_contextmenu_change_separator' });\n contextMenuItems.push({ text: this.locale.getConstant('Spelling'), id: CONTEXTMENU_SPELLING_DIALOG, iconCss: 'e-icons e-de-spellcheck', items: [] });\n contextMenuItems.push({ separator: true, id: '_contextmenu_spelling_separator' });\n return contextMenuItems;\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n var owner = this.documentHelper.owner;\n var id = owner.element.id;\n var lock = document.getElementById(id + CONTEXTMENU_LOCK);\n var unlock = document.getElementById(id + CONTEXTMENU_UNLOCK);\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var properties = document.getElementById(id + CONTEXTMENU_PROPERTIES);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n var autoFitTable = document.getElementById(id + CONTEXTMENU_AUTO_FIT);\n var addComment = document.getElementById(id + CONTEXTMENU_ADD_COMMENT);\n var editNoteoptions = document.getElementById(id + CONTEXTMENU_NOTE_OPTIONS);\n if (!this.documentHelper.owner.enableLockAndEdit) {\n lock.style.display = 'none';\n unlock.style.display = 'none';\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.documentHelper.owner.currentUser)) {\n lock.style.display = 'none';\n unlock.style.display = 'block';\n if (this.documentHelper.selection.isSelectionInEditRegion()) {\n classList(unlock, ['e-blankicon'], ['e-disabled']);\n }\n else {\n classList(unlock, ['e-disabled', 'e-blankicon'], []);\n }\n }\n else {\n lock.style.display = 'block';\n if (this.documentHelper.owner.collaborativeEditingModule &&\n this.documentHelper.owner.collaborativeEditingModule.canLock()) {\n classList(unlock, ['e-disabled'], []);\n }\n else {\n classList(unlock, [], ['e-disabled']);\n }\n unlock.style.display = 'none';\n }\n }\n var isDialogHidden = false;\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n var acceptChange = document.getElementById(id + CONTEXTMENU_ACCEPT_CHANGES);\n var rejectChange = document.getElementById(id + CONTEXTMENU_REJECT_CHANGES);\n hyperlink.style.display = 'none';\n editNoteoptions.style.display = 'none';\n editNoteoptions.nextSibling.style.display = 'none';\n font.previousSibling.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n properties.style.display = 'none';\n mergeCells.style.display = 'none';\n autoFitTable.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n // (paragraph.nextSibling as HTMLElement).style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n var field = selection.getHyperlinkField();\n var isCrossRefField = false;\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n if (field instanceof FieldElementBox && selection.isReferenceField(field)) {\n isCrossRefField = true;\n }\n if (field instanceof FieldElementBox && isCrossRefField &&\n (this.documentHelper.protectionType === 'FormFieldsOnly' || !this.documentHelper.owner.isReadOnlyMode)) {\n updateField.style.display = 'block';\n }\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n var isSelectionEmpty = selection.isEmpty;\n classList(cut, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n classList(copy, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n var isHideComment = this.documentHelper.owner.isReadOnlyMode || this.documentHelper.owner.enableHeaderAndFooter || !this.documentHelper.owner.enableComment;\n addComment.style.display = isHideComment ? 'none' : 'block';\n if (this.documentHelper.isCommentOnlyMode) {\n addComment.style.display = 'block';\n }\n addComment.previousSibling.style.display = isHideComment ? 'none' : 'block';\n addComment.nextSibling.style.display = isHideComment ? 'none' : 'block';\n if (owner.isReadOnlyMode) {\n return true;\n }\n if (this.viewer && this.documentHelper.owner && this.documentHelper.owner.commentReviewPane &&\n this.documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n classList(addComment, ['e-disabled'], []);\n }\n else {\n classList(addComment, [], ['e-disabled']);\n }\n acceptChange.previousSibling.style.display = 'none';\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n classList(insertTable, ['e-blankicon'], []);\n classList(deleteTable, ['e-blankicon'], []);\n classList(editField, ['e-blankicon'], []);\n classList(autoFitTable, ['e-blankicon'], []);\n var enablePaste = (owner.enableLocalPaste && !isNullOrUndefined(owner.editor.copiedData));\n classList(paste, enablePaste ? [] : ['e-disabled'], enablePaste ? ['e-disabled'] : []);\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.selection.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n if (field instanceof FieldElementBox && !selection.isImageField() && !isCrossRefField) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n isDialogHidden = true;\n properties.style.display = 'none';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n font.previousSibling.style.display = 'block';\n isDialogHidden = true;\n }\n }\n if (selection.isFormField() && this.documentHelper.owner.enableFormField) {\n hyperlink.style.display = 'none';\n properties.style.display = 'block';\n }\n if (field instanceof FieldElementBox && isCrossRefField) {\n hyperlink.style.display = 'none';\n updateField.style.display = 'block';\n }\n }\n if (this.documentHelper.owner.selection.start.paragraph.isInsideTable\n && this.documentHelper.owner.selection.end.paragraph.isInsideTable) {\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.documentHelper.owner.editor.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n autoFitTable.style.display = this.documentHelper.selection.isTableSelected() ? 'block' : 'none';\n }\n if (this.documentHelper.owner.fontDialogModule) {\n font.style.display = 'block';\n }\n if (this.documentHelper.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n else if (!isDialogHidden && !this.documentHelper.owner.fontDialogModule && !isHideComment) {\n addComment.nextSibling.style.display = 'none';\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n font.previousSibling.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n if (this.documentHelper.selection.hasRevisions()) {\n acceptChange.previousSibling.style.display = this.documentHelper.owner.enableHeaderAndFooter ? 'none' : 'block';\n if (this.documentHelper.isTrackedOnlyMode) {\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n }\n else {\n acceptChange.style.display = 'block';\n rejectChange.style.display = 'block';\n }\n }\n if (this.documentHelper.selection.isinFootnote || this.documentHelper.selection.isinEndnote) {\n editNoteoptions.style.display = 'block';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n if (this.contextMenu && this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.contextMenuInstance = undefined;\n this.menuItems = [];\n this.customMenuItems = [];\n this.ids = [];\n this.customItems = [];\n this.spellContextItems = [];\n this.currentContextInfo = undefined;\n this.menuItems = undefined;\n this.customMenuItems = undefined;\n this.ids = undefined;\n this.customItems = undefined;\n this.locale = undefined;\n this.spellContextItems = undefined;\n this.documentHelper = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","/* eslint-disable */\nimport { createElement, L10n, classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentCharacterElementBox } from '../../implementation/viewer/page';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Toolbar, Tab } from '@syncfusion/ej2-navigations';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Dictionary, beforeCommentActionEvent, commentEndEvent, commentBeginEvent, commentDeleteEvent } from '../../base/index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar CommentReviewPane = /** @class */ (function () {\n function CommentReviewPane(owner) {\n var _this = this;\n this.isNewComment = false;\n this.isUserClosed = false;\n /**\n * @private\n */\n this.selectedTab = 0;\n /**\n * @param {SelectEventArgs} arg - Specify the selection event args.\n * @returns {void}\n */\n this.onTabSelection = function (arg) {\n _this.selectedTab = arg.selectedIndex;\n if (_this.selectedTab === 1) {\n _this.owner.trackChangesPane.updateHeight();\n }\n else {\n _this.commentPane.updateHeight();\n }\n setTimeout(function () {\n _this.owner.resize();\n }, 10);\n };\n this.owner = owner;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.initReviewPane(localObj);\n this.parentPaneElement.style.display = 'none';\n }\n Object.defineProperty(CommentReviewPane.prototype, \"previousSelectedComment\", {\n get: function () {\n return this.previousSelectedCommentInt;\n },\n set: function (value) {\n if (!isNullOrUndefined(value) && value !== this.previousSelectedCommentInt) {\n if (this.commentPane.comments.containsKey(value)) {\n var commentStart = this.commentPane.getCommentStart(value);\n var commentMark = commentStart.commentMark;\n if (commentMark) {\n classList(commentMark, [], ['e-de-cmt-mark-selected']);\n this.commentPane.removeSelectionMark('e-de-cmt-selection');\n this.commentPane.removeSelectionMark('e-de-cmt-mark-selected');\n }\n var commentView = this.commentPane.comments.get(value);\n commentView.hideDrawer();\n for (var i = 0; i < value.replyComments.length; i++) {\n commentView = this.commentPane.comments.get(value.replyComments[i]);\n if (commentView) {\n commentView.hideDrawer();\n commentView.hideMenuItems();\n }\n }\n }\n }\n this.previousSelectedCommentInt = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentReviewPane.prototype.selectReviewTab = function (tab) {\n if (tab === 'Changes') {\n this.reviewTab.select(1);\n }\n else {\n this.reviewTab.select(0);\n }\n };\n CommentReviewPane.prototype.showHidePane = function (show, tab) {\n if (this.parentPaneElement) {\n this.updateTabHeaderWidth();\n if (show) {\n this.parentPaneElement.style.display = 'block';\n if (tab === 'Changes') {\n this.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: this.isCommentTabVisible, changes: true });\n this.reviewTab.select(1);\n }\n else {\n this.owner.trackChangesPane.isChangesTabVisible = false;\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible, isUserClosed: false });\n this.reviewTab.select(0);\n }\n this.owner.trackChangesPane.updateTrackChanges(show);\n this.commentPane.updateCommentStatus();\n }\n else {\n this.parentPaneElement.style.display = 'none';\n }\n }\n if (show) {\n this.enableDisableItems();\n this.commentPane.updateHeight();\n }\n if (this.owner) {\n this.owner.resize();\n }\n };\n CommentReviewPane.prototype.reviewPaneHelper = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.isUserClosed)) {\n if (args.isUserClosed !== this.isUserClosed) {\n this.isUserClosed = args.isUserClosed;\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n else {\n return;\n }\n }\n else {\n if (this.isUserClosed) {\n return;\n }\n }\n if (!isNullOrUndefined(args.comment) || !isNullOrUndefined(args.changes)) {\n if ((args.comment || args.changes)) {\n if (this.parentPaneElement.style.display === 'none') {\n this.parentPaneElement.style.display = 'block';\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n }\n else {\n this.parentPaneElement.style.display = 'none';\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n }\n };\n CommentReviewPane.prototype.updateTabHeaderWidth = function () {\n var reviewTabsEle = this.reviewTab.getRootElement().getElementsByClassName('e-tab-wrap');\n reviewTabsEle[0].style.padding = '0 8px';\n reviewTabsEle[1].style.padding = '0 8px';\n };\n CommentReviewPane.prototype.initReviewPane = function (localValue) {\n var reviewContainer = this.owner.documentHelper.optionsPaneContainer;\n reviewContainer.style.display = 'inline-flex';\n this.initPaneHeader(localValue);\n reviewContainer.appendChild(this.addReviewTab(localValue));\n this.initCommentPane();\n this.owner.on('reviewPane', this.reviewPaneHelper, this);\n };\n CommentReviewPane.prototype.addReviewTab = function (localValue) {\n var commentHeader = createElement('div', { innerHTML: localValue.getConstant('Comments') });\n var changesHeader = createElement('div', { innerHTML: localValue.getConstant('Changes') });\n this.parentPaneElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-review-pane' });\n this.element = createElement('div', { className: 'e-de-property-tab' });\n var items = [{ header: { text: commentHeader }, content: this.reviewPane }, { header: { text: changesHeader } }];\n this.reviewTab = new Tab({ items: items, selected: this.onTabSelection, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } });\n this.reviewTab.appendTo(this.element);\n if (this.owner.enableRtl) {\n this.reviewTab.enableRtl = true;\n }\n this.reviewTab.enablePersistence = true;\n this.parentPaneElement.appendChild(this.element);\n return this.parentPaneElement;\n };\n CommentReviewPane.prototype.initPaneHeader = function (localValue) {\n this.headerContainer = createElement('div');\n this.reviewPane = createElement('div', { className: 'e-de-cmt-pane' });\n if (this.owner.enableRtl) {\n classList(this.reviewPane, ['e-rtl'], []);\n }\n this.headerContainer.appendChild(this.initToolbar(localValue));\n this.reviewPane.appendChild(this.headerContainer);\n this.reviewPane.style.display = 'block';\n return this.reviewPane;\n };\n CommentReviewPane.prototype.closePane = function () {\n if (this.commentPane && this.commentPane.isEditMode) {\n if (!isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.value === '') {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.showComments = false;\n }\n else if (this.isNewComment || !isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.value !== '' ||\n !isNullOrUndefined(this.commentPane.currentEditingComment) && !this.commentPane.isInsertingReply &&\n this.commentPane.currentEditingComment.textArea.value !== this.commentPane.currentEditingComment.comment.text) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.confirmDialog = DialogUtility.confirm({\n title: localObj.getConstant('Un-posted comments'),\n content: localObj.getConstant('Discard Comment'),\n okButton: {\n text: 'Discard', click: this.discardButtonClick.bind(this)\n },\n cancelButton: {\n text: 'Cancel', click: this.closeDialogUtils.bind(this)\n },\n showCloseIcon: true,\n closeOnEscape: true,\n animationSettings: { effect: 'Zoom' },\n position: { X: 'Center', Y: 'Center' }\n });\n }\n else {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelEditing();\n this.owner.showComments = false;\n }\n }\n else {\n this.owner.showComments = false;\n //this.owner.showRevisions = false;\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.owner.documentHelper.currentSelectedRevision = undefined;\n this.owner.notify('reviewPane', { changes: false, comment: false, isUserClosed: true });\n }\n };\n CommentReviewPane.prototype.discardButtonClick = function () {\n if (this.commentPane.currentEditingComment) {\n var isNewComment = this.isNewComment;\n if (this.commentPane.currentEditingComment && this.commentPane.isInsertingReply) {\n this.commentPane.currentEditingComment.cancelReply();\n }\n else {\n this.commentPane.currentEditingComment.cancelEditing();\n if (isNewComment) {\n this.discardComment(this.commentPane.currentEditingComment.comment);\n }\n }\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.closeDialogUtils();\n this.owner.showComments = false;\n }\n };\n CommentReviewPane.prototype.closeDialogUtils = function () {\n this.confirmDialog.close();\n this.confirmDialog = undefined;\n };\n CommentReviewPane.prototype.initToolbar = function (localValue) {\n this.toolbarElement = createElement('div');\n this.toolbar = new Toolbar({\n items: [\n {\n prefixIcon: 'e-de-new-cmt e-de-cmt-tbr', tooltipText: localValue.getConstant('New Comment'),\n text: localValue.getConstant('New Comment'), click: this.insertComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Previous Comment'), click: this.navigatePreviousComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Next Comment'), click: this.navigateNextComment.bind(this)\n }\n ],\n enableRtl: this.owner.enableRtl\n });\n this.toolbar.appendTo(this.toolbarElement);\n return this.toolbarElement;\n };\n CommentReviewPane.prototype.insertComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.editor.isUserInsert = true;\n this.owner.editorModule.insertComment('');\n this.owner.editor.isUserInsert = false;\n }\n };\n CommentReviewPane.prototype.addComment = function (comment, isNewComment, selectComment) {\n this.isNewComment = isNewComment;\n this.selectReviewTab('Comments');\n this.owner.documentHelper.currentSelectedComment = comment;\n this.commentPane.insertComment(comment);\n if (!isNewComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment);\n }\n };\n CommentReviewPane.prototype.deleteComment = function (comment) {\n if (this.commentPane) {\n this.commentPane.deleteComment(comment);\n }\n };\n CommentReviewPane.prototype.selectComment = function (comment) {\n if (this.commentPane.isEditMode) {\n return;\n }\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (this.owner && this.owner.viewer && this.owner.documentHelper.currentSelectedComment !== comment) {\n this.owner.documentHelper.currentSelectedComment = comment;\n }\n this.commentPane.selectComment(comment);\n };\n CommentReviewPane.prototype.resolveComment = function (comment) {\n this.commentPane.resolveComment(comment);\n };\n CommentReviewPane.prototype.reopenComment = function (comment) {\n this.commentPane.reopenComment(comment);\n };\n CommentReviewPane.prototype.addReply = function (comment, newComment, selectComment) {\n this.isNewComment = newComment;\n this.commentPane.insertReply(comment);\n if (!newComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment.ownerComment);\n }\n };\n CommentReviewPane.prototype.navigatePreviousComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selection.navigatePreviousComment();\n }\n };\n CommentReviewPane.prototype.navigateNextComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selection.navigateNextComment();\n }\n };\n CommentReviewPane.prototype.enableDisableItems = function () {\n this.enableDisableToolbarItem();\n var keys = this.commentPane.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.commentPane.comments.get(keys[i]);\n if (this.owner.isReadOnly) {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'none';\n }\n commentView.menuBar.style.display = 'none';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = 'none';\n }\n }\n else {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'block';\n }\n commentView.menuBar.style.display = 'block';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = '';\n }\n }\n }\n };\n CommentReviewPane.prototype.enableDisableToolbarItem = function () {\n if (this.toolbar) {\n var enable = true;\n if (this.commentPane.isEditMode) {\n enable = !this.commentPane.isEditMode;\n }\n if (this.owner.isReadOnly) {\n enable = !this.owner.isReadOnly;\n }\n var elements = this.toolbar.element.querySelectorAll('.' + 'e-de-cmt-tbr');\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n if (enable && this.owner && this.owner.viewer) {\n enable = !(this.owner.documentHelper.comments.length === 0);\n }\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2].parentElement.parentElement, enable);\n }\n };\n CommentReviewPane.prototype.initCommentPane = function () {\n this.commentPane = new CommentPane(this.owner, this);\n this.commentPane.initCommentPane();\n };\n CommentReviewPane.prototype.layoutComments = function () {\n for (var i = 0; i < this.owner.documentHelper.comments.length; i++) {\n this.commentPane.addComment(this.owner.documentHelper.comments[i]);\n }\n };\n CommentReviewPane.prototype.clear = function () {\n this.previousSelectedCommentInt = undefined;\n this.commentPane.clear();\n };\n CommentReviewPane.prototype.discardComment = function (comment) {\n if (comment) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.undo();\n this.owner.editorHistory.redoStack.pop();\n this.owner.editor.deleteCommentInternal(comment);\n }\n else if (this.owner.editor) {\n this.owner.editor.deleteCommentInternal(comment);\n }\n }\n };\n CommentReviewPane.prototype.destroy = function () {\n if (this.commentPane) {\n this.commentPane.destroy();\n }\n this.commentPane = undefined;\n if (this.toolbar) {\n this.toolbar.destroy();\n }\n this.toolbar = undefined;\n if (this.toolbarElement && this.toolbarElement.parentElement) {\n this.toolbarElement.parentElement.removeChild(this.toolbarElement);\n }\n this.toolbarElement = undefined;\n if (this.headerContainer && this.headerContainer.parentElement) {\n this.headerContainer.parentElement.removeChild(this.headerContainer);\n }\n this.headerContainer = undefined;\n this.previousSelectedCommentInt = undefined;\n if (this.reviewPane && this.reviewPane.parentElement) {\n this.reviewPane.parentElement.removeChild(this.reviewPane);\n }\n if (!this.owner.isDestroyed) {\n this.owner.off('reviewPane', this.reviewPaneHelper);\n }\n if (!isNullOrUndefined(this.reviewTab)) {\n this.reviewTab.destroy();\n }\n this.reviewTab = undefined;\n if (!isNullOrUndefined(this.confirmDialog)) {\n this.confirmDialog.destroy();\n }\n this.confirmDialog = undefined;\n if (!isNullOrUndefined(this.previousSelectedCommentInt)) {\n this.previousSelectedCommentInt.destroy();\n }\n this.previousSelectedCommentInt = undefined;\n this.reviewPane.innerHTML = '';\n this.reviewPane = undefined;\n this.owner = undefined;\n };\n return CommentReviewPane;\n}());\nexport { CommentReviewPane };\n/**\n * @private\n */\nvar CommentPane = /** @class */ (function () {\n function CommentPane(owner, pane) {\n this.isEditModeInternal = false;\n this.isInsertingReply = false;\n this.owner = owner;\n this.parentPane = pane;\n this.parent = pane.reviewPane;\n this.comments = new Dictionary();\n }\n Object.defineProperty(CommentPane.prototype, \"isEditMode\", {\n get: function () {\n return this.isEditModeInternal;\n },\n set: function (value) {\n this.isEditModeInternal = value;\n var keys = this.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.comments.get(keys[i]);\n if (value) {\n commentView.menuBar.style.display = 'none';\n }\n else if (!commentView.comment.isReply) {\n commentView.menuBar.style.display = 'block';\n }\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n if (this.owner) {\n if (this.isEditModeInternal) {\n this.owner.trigger(commentBeginEvent);\n }\n else {\n this.owner.trigger(commentEndEvent);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n CommentPane.prototype.initCommentPane = function () {\n this.commentPane = createElement('div', { className: 'e-de-cmt-container' });\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.noCommentIndicator = createElement('div', {\n className: 'e-de-cmt-no-cmt',\n innerHTML: localObj.getConstant('No comments in this document')\n });\n this.commentPane.appendChild(this.noCommentIndicator);\n this.parent.appendChild(this.commentPane);\n };\n CommentPane.prototype.addComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n this.commentPane.appendChild(commentParent);\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyView = new CommentView(this.owner, this, comment.replyComments[i]);\n this.comments.add(comment.replyComments[i], replyView);\n commentParent.insertBefore(replyView.layoutComment(true), commentView.replyViewContainer);\n }\n this.updateCommentStatus();\n commentView.hideDrawer();\n };\n CommentPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.parentPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.commentPane.style.height = this.parentPane.parentPaneElement.clientHeight - this.parentPane.headerContainer.clientHeight - tabHeaderHeight + 'px';\n };\n CommentPane.prototype.insertReply = function (replyComment) {\n var parentComment = replyComment.ownerComment;\n var parentView = this.comments.get(parentComment);\n var replyView = new CommentView(this.owner, this, replyComment);\n this.comments.add(replyComment, replyView);\n var replyElement = replyView.layoutComment(true);\n var replyIndex = parentComment.replyComments.indexOf(replyComment);\n if (replyIndex === parentComment.replyComments.length - 1) {\n parentView.parentElement.insertBefore(replyElement, parentView.replyViewContainer);\n }\n else {\n var nextReply = parentComment.replyComments[replyIndex + 1];\n parentView.parentElement.insertBefore(replyElement, this.comments.get(nextReply).parentElement);\n }\n replyView.editComment();\n };\n CommentPane.prototype.insertComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n if (this.owner.documentHelper.comments.indexOf(comment) === this.owner.documentHelper.comments.length - 1) {\n this.commentPane.appendChild(commentParent);\n }\n else {\n var index = this.owner.documentHelper.comments.indexOf(comment);\n var element = this.comments.get(this.owner.documentHelper.comments[index + 1]).parentElement;\n this.commentPane.insertBefore(commentParent, element);\n commentParent.focus();\n }\n this.updateCommentStatus();\n commentView.editComment();\n };\n CommentPane.prototype.removeSelectionMark = function (className) {\n if (this.parent) {\n var elements = this.parent.getElementsByClassName(className);\n for (var i = 0; i < elements.length; i++) {\n classList(elements[i], [], [className]);\n }\n }\n };\n CommentPane.prototype.selectComment = function (comment) {\n this.removeSelectionMark('e-de-cmt-selection');\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (comment) {\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n var commentView = this.comments.get(comment);\n var selectedElement = commentView.parentElement;\n if (selectedElement) {\n classList(selectedElement, ['e-de-cmt-selection'], []);\n selectedElement.focus();\n }\n var commentStart = this.getCommentStart(comment);\n if (!commentStart.commentMark) {\n commentStart.renderCommentMark();\n }\n classList(commentStart.commentMark, ['e-de-cmt-mark-selected'], []);\n commentView.showDrawer();\n }\n };\n CommentPane.prototype.getCommentStart = function (comment) {\n var localValue = new L10n('documenteditor', this.owner.defaultLocale);\n localValue.setLocale(this.owner.locale);\n var commentStart = undefined;\n if (comment && comment.commentStart) {\n commentStart = comment.commentStart;\n }\n if (commentStart.commentMark !== undefined) {\n commentStart.commentMark.title = localValue.getConstant('Click to see this comment');\n }\n return this.getFirstCommentInLine(commentStart);\n };\n CommentPane.prototype.getFirstCommentInLine = function (commentStart) {\n for (var i = 0; i < commentStart.line.children.length; i++) {\n var startComment = commentStart.line.children[i];\n if (startComment instanceof CommentCharacterElementBox && startComment.commentType === 0) {\n return startComment;\n }\n }\n return commentStart;\n };\n CommentPane.prototype.deleteComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (!isNullOrUndefined(commentView)) {\n if (!isNullOrUndefined(this.currentEditingComment)\n && commentView.comment.commentId == this.currentEditingComment.comment.commentId) {\n this.isEditMode = false;\n }\n if (commentView.parentElement && commentView.parentElement.parentElement) {\n commentView.parentElement.parentElement.removeChild(commentView.parentElement);\n }\n //this.commentPane.removeChild();\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyCmt = comment.replyComments[i];\n if (this.comments.containsKey(replyCmt)) {\n this.comments.remove(replyCmt);\n }\n }\n this.comments.remove(comment);\n commentView.destroy();\n }\n this.updateCommentStatus();\n };\n CommentPane.prototype.resolveComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.resolveComment();\n }\n };\n CommentPane.prototype.reopenComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.reopenComment();\n }\n };\n CommentPane.prototype.updateCommentStatus = function () {\n if (this.owner.documentHelper.comments.length === 0) {\n if (!this.noCommentIndicator.parentElement) {\n this.commentPane.appendChild(this.noCommentIndicator);\n }\n this.noCommentIndicator.style.display = 'block';\n this.parentPane.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: false, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0);\n }\n else {\n this.parentPane.isCommentTabVisible = true;\n this.noCommentIndicator.style.display = 'none';\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0, false);\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n };\n CommentPane.prototype.clear = function () {\n this.isEditMode = false;\n this.currentEditingComment = undefined;\n this.isInsertingReply = false;\n this.removeChildElements();\n this.commentPane.innerHTML = '';\n this.updateCommentStatus();\n };\n CommentPane.prototype.removeChildElements = function () {\n var comments = this.comments.keys;\n for (var i = 0; i < comments.length; i++) {\n this.comments.get(comments[i]).destroy();\n }\n this.comments.clear();\n };\n CommentPane.prototype.destroy = function () {\n this.removeChildElements();\n if (this.noCommentIndicator && this.noCommentIndicator) {\n this.noCommentIndicator.parentElement.removeChild(this.noCommentIndicator);\n }\n this.noCommentIndicator = undefined;\n if (this.commentPane && this.commentPane.parentElement) {\n this.commentPane.parentElement.removeChild(this.commentPane);\n }\n this.commentPane.innerHTML = '';\n this.parentPane = undefined;\n this.owner = undefined;\n };\n return CommentPane;\n}());\nexport { CommentPane };\n/**\n * @private\n */\nvar CommentView = /** @class */ (function () {\n function CommentView(owner, commentPane, comment) {\n this.isReply = false;\n this.isDrawerExpand = false;\n this.owner = owner;\n this.comment = comment;\n this.commentPane = commentPane;\n }\n CommentView.prototype.layoutComment = function (isReply) {\n this.isReply = isReply;\n var classList = 'e-de-cmt-sub-container';\n if (isReply) {\n classList += ' e-de-cmt-reply';\n }\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.parentElement = createElement('div', { className: classList });\n this.initCommentHeader(localObj);\n this.initCommentView(localObj);\n this.initDateView();\n if (!this.comment.isReply) {\n this.parentElement.tabIndex = 0;\n this.initReplyView(localObj);\n this.initResolveOption(localObj);\n this.initDrawer();\n if (this.comment.isResolved) {\n this.resolveComment();\n }\n }\n else {\n this.menuBar.style.display = 'none';\n }\n this.commentView.addEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.addEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n return this.parentElement;\n };\n CommentView.prototype.initCommentHeader = function (localObj) {\n var commentDiv = createElement('div', { className: 'e-de-cmt-view' });\n var commentUserInfo = createElement('div', { className: 'e-de-cmt-author' });\n var userName = createElement('div', { className: 'e-de-cmt-author-name' });\n userName.textContent = this.comment.author;\n if (!isNullOrUndefined(this.comment.author)) {\n commentUserInfo.style.display = 'flex';\n this.owner.documentHelper.getAvatar(commentUserInfo, userName, this.comment, undefined);\n }\n //if (this.comment.author === this.owner.currentUser) {\n this.menuBar = createElement('button', { className: 'e-de-cp-option', attrs: { type: 'button' } });\n var userOption = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n var menuItem = new DropDownButton({\n items: this.isReply ? userOption.splice(0, 2) : userOption,\n select: this.userOptionSelectEvent.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide',\n enableRtl: this.owner.enableRtl\n });\n this.menuBar.title = localObj.getConstant('More Options') + '...';\n menuItem.appendTo(this.menuBar);\n commentUserInfo.appendChild(this.menuBar);\n this.dropDownButton = menuItem;\n commentDiv.appendChild(commentUserInfo);\n this.commentView = commentDiv;\n this.parentElement.appendChild(commentDiv);\n commentDiv.addEventListener('click', this.selectComment.bind(this));\n };\n CommentView.prototype.selectComment = function () {\n if (this.commentPane) {\n if (!this.commentPane.isEditMode) {\n this.owner.selection.selectComment(this.comment);\n }\n else if (this.commentPane.isEditMode && this.commentPane.isInsertingReply\n && this.commentPane.currentEditingComment && this.commentPane.currentEditingComment.replyViewTextBox.value === '') {\n var comment = this.comment;\n if (comment && comment.isReply) {\n comment = this.comment.ownerComment;\n }\n if (comment && this.owner.documentHelper.currentSelectedComment === comment) {\n return;\n }\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.selection.selectComment(this.comment);\n }\n }\n };\n CommentView.prototype.initCommentView = function (localObj) {\n this.commentText = createElement('div', { className: 'e-de-cmt-readonly' });\n this.commentText.innerText = this.comment.text;\n this.commentView.appendChild(this.commentText);\n this.initEditView(localObj);\n };\n CommentView.prototype.initEditView = function (localObj) {\n this.textAreaContainer = createElement('div', { styles: 'display:none' });\n this.textArea = createElement('textarea', { className: 'e-de-cmt-textarea e-input' });\n this.textArea.placeholder = localObj.getConstant('Type your comment here');\n this.textArea.rows = 1;\n this.textArea.value = this.comment.text.trim();\n this.textArea.addEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.addEventListener('keyup', this.enableDisablePostButton.bind(this));\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.postButton = new Button({ cssClass: 'e-btn e-flat e-primary e-de-overlay', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n postButton.addEventListener('click', this.postComment.bind(this));\n postButton.title = localObj.getConstant('Post');\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n this.cancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.title = localObj.getConstant('Cancel');\n cancelButton.addEventListener('click', this.cancelEditing.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.textAreaContainer.appendChild(this.textArea);\n this.textAreaContainer.appendChild(editRegionFooter);\n this.commentView.appendChild(this.textAreaContainer);\n };\n CommentView.prototype.initDateView = function () {\n this.commentDate = createElement('div', { className: 'e-de-cmt-date' });\n this.commentDate.innerText = HelperMethods.getModifiedDate(this.comment.date);\n this.commentView.appendChild(this.commentDate);\n };\n CommentView.prototype.initDrawer = function () {\n this.drawerElement = createElement('div', { styles: 'display:none;', className: 'e-de-cmt-drawer-cnt' });\n var leftPane = createElement('div', { className: 'e-de-cmt-drawer' });\n var spanElement = createElement('span');\n leftPane.appendChild(spanElement);\n this.drawerElement.appendChild(leftPane);\n this.drawerSpanElement = spanElement;\n this.drawerAction = leftPane;\n this.drawerAction.addEventListener('click', this.showOrHideDrawer.bind(this));\n this.parentElement.appendChild(this.drawerElement);\n };\n CommentView.prototype.initReplyView = function (localObj) {\n this.replyViewContainer = createElement('div', { className: 'e-de-cmt-rply-view' });\n if (this.commentPane.parentPane.isNewComment) {\n this.replyViewContainer.style.display = 'none';\n }\n this.replyViewTextBox = createElement('textarea', { className: 'e-de-cmt-textarea e-input' });\n this.replyViewTextBox.placeholder = localObj.getConstant('Reply');\n this.replyViewTextBox.rows = 1;\n this.replyViewTextBox.value = '';\n this.replyViewTextBox.readOnly = true;\n this.replyViewTextBox.addEventListener('click', this.enableReplyView.bind(this));\n this.replyViewTextBox.addEventListener('keydown', this.updateReplyTextAreaHeight.bind(this));\n this.replyViewTextBox.addEventListener('keyup', this.enableDisableReplyPostButton.bind(this));\n var editRegionFooter = createElement('div', { styles: 'display:none', className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-de-overlay e-btn e-flat', attrs: { type: 'button' } });\n this.replyPostButton = new Button({ cssClass: 'e-btn e-flat e-primary', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n postButton.addEventListener('click', this.postReply.bind(this));\n postButton.title = localObj.getConstant('Post');\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n this.replyCancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.addEventListener('click', this.cancelReply.bind(this));\n cancelButton.title = localObj.getConstant('Cancel');\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.replyFooter = editRegionFooter;\n this.replyViewContainer.appendChild(this.replyViewTextBox);\n this.replyViewContainer.appendChild(editRegionFooter);\n this.parentElement.appendChild(this.replyViewContainer);\n };\n CommentView.prototype.initResolveOption = function (localObj) {\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-resolve-btn' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.reopenButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-reopen' }, postButton);\n postButton.title = localObj.getConstant('Reopen');\n postButton.addEventListener('click', this.reopenButtonClick.bind(this));\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n cancelButton.title = localObj.getConstant('Delete');\n this.deleteButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-delete' }, cancelButton);\n cancelButton.addEventListener('click', this.deleteComment.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n this.resolveView = editRegionFooter;\n this.parentElement.appendChild(editRegionFooter);\n };\n CommentView.prototype.reopenButtonClick = function () {\n this.owner.editor.reopenComment(this.comment);\n };\n CommentView.prototype.deleteComment = function () {\n var eventArgs = { author: this.comment.author, cancel: false };\n this.owner.trigger(commentDeleteEvent, eventArgs);\n var eventActionArgs = { author: this.comment.author, cancel: eventArgs.cancel, type: 'Delete' };\n this.owner.trigger(beforeCommentActionEvent, eventActionArgs);\n if (eventActionArgs.cancel) {\n return;\n }\n this.owner.editorModule.deleteCommentInternal(this.comment);\n if (eventArgs.cancel) {\n return;\n }\n };\n CommentView.prototype.updateReplyTextAreaHeight = function () {\n var _this = this;\n setTimeout(function () {\n _this.replyViewTextBox.style.height = 'auto';\n var scrollHeight = _this.replyViewTextBox.scrollHeight;\n _this.replyViewTextBox.style.height = scrollHeight + 'px';\n });\n };\n CommentView.prototype.enableDisableReplyPostButton = function () {\n this.replyPostButton.disabled = this.replyViewTextBox.value === '';\n if (this.replyPostButton.disabled) {\n classList(this.replyPostButton.element, ['e-de-overlay'], []);\n }\n else if (this.replyPostButton.element.classList.contains('e-de-overlay')) {\n classList(this.replyPostButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.enableReplyView = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Reply' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reply') {\n return;\n }\n if (this.commentPane.isEditMode) {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = true;\n if (this.owner.documentHelper.currentSelectedComment !== this.comment) {\n this.owner.selection.selectComment(this.comment);\n }\n this.commentPane.isEditMode = true;\n this.replyViewTextBox.readOnly = false;\n this.replyFooter.style.display = 'block';\n setTimeout(function () {\n _this.replyViewTextBox.focus();\n });\n };\n CommentView.prototype.postReply = function () {\n var replyText = this.replyViewTextBox.value;\n this.cancelReply();\n this.updateReplyTextAreaHeight();\n this.owner.editorModule.replyComment(this.comment, replyText);\n this.owner.fireContentChange();\n };\n CommentView.prototype.cancelReply = function () {\n this.commentPane.currentEditingComment = undefined;\n this.commentPane.isInsertingReply = true;\n this.commentPane.isEditMode = false;\n this.replyPostButton.disabled = true;\n this.replyViewTextBox.value = '';\n this.replyViewTextBox.readOnly = true;\n this.replyFooter.style.display = 'none';\n };\n CommentView.prototype.updateTextAreaHeight = function () {\n var _this = this;\n setTimeout(function () {\n if (!isNullOrUndefined(_this.textArea)) {\n _this.textArea.style.height = 'auto';\n var scrollHeight = _this.textArea.scrollHeight;\n _this.textArea.style.height = scrollHeight + 'px';\n }\n });\n };\n CommentView.prototype.showMenuItems = function () {\n if (this.comment.isReply && !this.owner.isReadOnly) {\n if (!this.commentPane.isEditMode && (!isNullOrUndefined(this.comment) && !this.comment.isResolved)) {\n this.menuBar.style.display = 'block';\n }\n }\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.add('e-de-cmt-mark-hover');\n }\n };\n CommentView.prototype.hideMenuItemOnMouseLeave = function () {\n if (this.comment.isReply) {\n if (this.owner.documentHelper.currentSelectedComment !== this.comment.ownerComment) {\n this.hideMenuItems();\n }\n }\n if (this.commentPane) {\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.remove('e-de-cmt-mark-hover');\n }\n }\n };\n CommentView.prototype.hideMenuItems = function () {\n this.menuBar.style.display = 'none';\n };\n CommentView.prototype.enableDisablePostButton = function () {\n this.postButton.disabled = this.textArea.value === '';\n if (this.postButton.disabled) {\n classList(this.postButton.element, ['e-de-overlay'], []);\n }\n else if (this.postButton.element.classList.contains('e-de-overlay')) {\n classList(this.postButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.editComment = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Edit' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Edit') {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = false;\n this.commentPane.isEditMode = true;\n this.commentText.style.display = 'none';\n this.textAreaContainer.style.display = 'block';\n this.commentDate.style.display = 'none';\n this.menuBar.style.display = 'none';\n this.updateTextAreaHeight();\n setTimeout(function () {\n if (_this.textArea) {\n _this.textArea.focus();\n }\n });\n };\n CommentView.prototype.resolveComment = function () {\n classList(this.parentElement, ['e-de-cmt-resolved'], []);\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Reopen') }, { text: localObj.getConstant('Delete') }];\n };\n CommentView.prototype.reopenComment = function () {\n classList(this.parentElement, [], ['e-de-cmt-resolved']);\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n this.showDrawer();\n };\n CommentView.prototype.postComment = function () {\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Post' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Post') {\n return;\n }\n var updatedText = this.textArea.value;\n this.commentText.innerText = updatedText;\n this.comment.text = updatedText;\n this.showCommentView();\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n if (!isNullOrUndefined(this.replyViewContainer)) {\n this.replyViewContainer.style.display = '';\n }\n this.owner.fireContentChange();\n };\n CommentView.prototype.showCommentView = function () {\n this.commentPane.isEditMode = false;\n this.textAreaContainer.style.display = 'none';\n this.commentText.style.display = 'block';\n this.commentDate.style.display = 'block';\n this.menuBar.style.display = 'block';\n };\n CommentView.prototype.cancelEditing = function () {\n this.showCommentView();\n this.textArea.value = this.comment.text.trim();\n if (this.commentPane.parentPane.isNewComment) {\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n this.commentPane.parentPane.discardComment(this.comment);\n }\n };\n CommentView.prototype.showOrHideDrawer = function () {\n if (this.isDrawerExpand) {\n this.hideDrawer();\n }\n else {\n this.showDrawer();\n }\n };\n CommentView.prototype.hideDrawer = function () {\n if (this.parentElement) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 1; i < elements.length; i++) {\n elements[i].style.display = 'none';\n }\n this.drawerElement.style.display = 'block';\n classList(this.drawerSpanElement, [], ['e-de-nav-up']);\n this.drawerSpanElement.innerText = '+' + (elements.length - 1) + ' ' + localObj.getConstant('more') + '...';\n }\n this.isDrawerExpand = false;\n }\n };\n CommentView.prototype.showDrawer = function () {\n if (this.parentElement) {\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 0; i < elements.length; i++) {\n elements[i].style.display = 'block';\n }\n this.drawerElement.style.display = 'block';\n this.drawerSpanElement.innerText = '';\n classList(this.drawerSpanElement, ['e-de-nav-up'], []);\n }\n this.isDrawerExpand = true;\n }\n };\n CommentView.prototype.userOptionSelectEvent = function (event) {\n var selectedItem = event.item.text;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n switch (selectedItem) {\n case localObj.getConstant('Edit'):\n this.editComment();\n break;\n case localObj.getConstant('Reply'):\n this.enableReplyView();\n break;\n case localObj.getConstant('Delete'):\n this.deleteComment();\n break;\n case localObj.getConstant('Resolve'):\n this.owner.editor.resolveComment(this.comment);\n break;\n case localObj.getConstant('Reopen'):\n this.owner.editor.reopenComment(this.comment);\n }\n };\n CommentView.prototype.unwireEvent = function () {\n if (this.drawerAction) {\n this.drawerAction.removeEventListener('click', this.showOrHideDrawer.bind(this));\n }\n if (this.textArea) {\n this.textArea.removeEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.removeEventListener('keyup', this.enableDisablePostButton.bind(this));\n }\n if (this.postButton) {\n this.postButton.removeEventListener('click', this.postComment.bind(this));\n }\n if (this.cancelButton) {\n this.cancelButton.removeEventListener('click', this.cancelEditing.bind(this));\n }\n if (this.commentView) {\n this.commentView.removeEventListener('click', this.selectComment.bind(this));\n this.commentView.removeEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.removeEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n }\n };\n CommentView.prototype.destroy = function () {\n this.unwireEvent();\n if (this.comment) {\n this.comment = undefined;\n }\n if (this.dropDownButton) {\n this.dropDownButton.destroy();\n }\n this.dropDownButton = undefined;\n if (this.postButton) {\n this.postButton.destroy();\n }\n this.postButton = undefined;\n if (this.cancelButton) {\n this.cancelButton.destroy();\n }\n this.cancelButton = undefined;\n if (this.replyPostButton) {\n this.replyPostButton.destroy();\n this.replyPostButton = undefined;\n }\n if (this.replyCancelButton) {\n this.replyCancelButton.destroy();\n this.replyCancelButton = undefined;\n }\n if (this.reopenButton) {\n this.reopenButton.destroy();\n this.reopenButton = undefined;\n }\n if (this.deleteButton) {\n this.deleteButton.destroy();\n this.deleteButton = undefined;\n }\n this.replyViewContainer = undefined;\n this.replyViewTextBox = undefined;\n this.replyFooter = undefined;\n if (this.parentElement && this.parentElement.parentElement) {\n this.parentElement.parentElement.removeChild(this.parentElement);\n }\n this.resolveView = undefined;\n this.commentPane = undefined;\n this.parentElement.innerHTML = '';\n this.cancelButton = undefined;\n this.owner = undefined;\n this.menuBar = undefined;\n this.commentView = undefined;\n this.drawerAction = undefined;\n this.commentText = undefined;\n this.commentDate = undefined;\n this.textAreaContainer = undefined;\n this.textArea = undefined;\n this.drawerElement = undefined;\n this.drawerSpanElement = undefined;\n this.parentElement = null;\n };\n return CommentView;\n}());\nexport { CommentView };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* eslint-disable max-len */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function HyperlinkDialog(documentHelper) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.screenTipText = '';\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n //const selectedText: string = this.documentHelper.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n this.onScreenTipTextBox = function () {\n _this.screenTipText = _this.screenTipTextBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadHyperlinkDialog = function () {\n _this.documentHelper.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.documentHelper.bookmarks.keys.length; i++) {\n var bookmark = _this.documentHelper.bookmarks.keys[i];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.documentHelper.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n var fieldObj = _this.documentHelper.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n _this.screenTipTextBox.value = _this.documentHelper.selection.getLinkText(fieldBegin, false);\n var link = _this.documentHelper.selection.getLinkText(fieldBegin, true);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.documentHelper.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.documentHelper.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.documentHelper.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {CheckBoxChangeArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onBookmarkchange = function () {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue, isRtl) {\n this.target = createElement('div', { className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-dlg-container' });\n this.displayTextBox = createElement('input', { className: 'e-input' });\n this.displayTextBox.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n displayText.appendChild(this.displayTextBox);\n container.appendChild(displayText);\n //container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-dlg-container' });\n this.urlTextBox = createElement('input', { className: 'e-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', this.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', this.onKeyUpOnUrlBox);\n this.addressText.appendChild(this.urlTextBox);\n container.appendChild(this.addressText);\n //container.appendChild(this.urlTextBox);\n var screenTipText = createElement('div', { className: 'e-de-dlg-container' });\n this.screenTipTextBox = createElement('input', { className: 'e-input' });\n this.screenTipTextBox.addEventListener('keyup', this.onScreenTipTextBox);\n screenTipText.appendChild(this.screenTipTextBox);\n container.appendChild(screenTipText);\n //container.appendChild(this.screenTipTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-dlg-container' });\n //const bookmarkTextElement: HTMLElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n var bookmarkValue = createElement('input');\n bookmarkText.appendChild(bookmarkValue);\n this.bookmarkDropdown = new DropDownList({\n dataSource: [], change: this.onBookmarkchange,\n noRecordsTemplate: localValue.getConstant('No bookmarks found'),\n placeholder: localValue.getConstant('Bookmark'), floatLabelType: 'Always'\n });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n //this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n var bookmarkCheckDiv = createElement('div');\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' } });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({\n label: localValue.getConstant('Use bookmarks'),\n enableRtl: isRtl, change: this.onUseBookmarkChange\n });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n new TextBox({ placeholder: localValue.getConstant('Text to display'), floatLabelType: 'Always' }, this.displayTextBox);\n new TextBox({ placeholder: localValue.getConstant('Address'), floatLabelType: 'Always' }, this.urlTextBox);\n new TextBox({ placeholder: localValue.getConstant('ScreenTip text'), floatLabelType: 'Always' }, this.screenTipTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.documentHelper.dialog.close = this.closeHyperlinkDialog;\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n this.insertButton.disabled = (this.urlTextBox.value === '' || this.displayTextBox.value === '');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = this.displayTextBox.value.trim();\n var address = this.urlTextBox.value.trim();\n address = address.replace(/\\s/g, \"\");\n var screenTipText = this.screenTipTextBox.value.trim();\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '' && this.bookmarkCheckbox.checked === true) {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.documentHelper.hideDialog();\n return;\n }\n if (screenTipText !== '') {\n address = address + '\\\" \\\\o \\\"' + screenTipText;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.documentHelper.owner.editorModule.editHyperlink(this.documentHelper.selection, address, displayText, isBookmark);\n }\n else {\n var remove = (this.documentHelper.selection.text !== displayText ||\n this.documentHelper.selection.text.indexOf('\\r') === -1) && !this.displayTextBox.disabled;\n this.documentHelper.owner.editorModule.insertHyperlinkInternal(address, displayText, remove, isBookmark);\n }\n this.documentHelper.hideDialog();\n this.navigationUrl = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.screenTipText = '';\n this.screenTipTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n if (this.screenTipTextBox) {\n this.screenTipTextBox.parentElement.removeChild(this.screenTipTextBox);\n this.screenTipTextBox = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function TableDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertTableClick = function () {\n if (_this.columnValueTexBox.value < 1 || _this.columnValueTexBox.value > 63) {\n DialogUtility.alert(_this.localeValue.getConstant('Number of columns must be between 1 and 63.'));\n return;\n }\n if (_this.rowValueTextBox.value < 1 || _this.rowValueTextBox.value > _this.documentHelper.owner.documentEditorSettings.maximumRows) {\n if (_this.documentHelper.owner.locale == 'en-US') {\n DialogUtility.alert('Number of rows must be between 1 and ' + _this.documentHelper.owner.documentEditorSettings.maximumRows + '.');\n }\n else {\n DialogUtility.alert(_this.localeValue.getConstant('Number of rows must be between 1 and 32767.'));\n }\n return;\n }\n if (_this.rowValueTextBox.value <= _this.documentHelper.owner.documentEditorSettings.maximumRows && _this.columnValueTexBox.value <= 63) {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.documentHelper.owner.editor.insertTable(rowCount, columnCount);\n }\n _this.documentHelper.hideDialog();\n }\n };\n this.documentHelper = documentHelper;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specified the locale value.\n * @returns {void}\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n this.target = createElement('div', { className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnValue = createElement('div', { className: 'e-de-container-row' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n columnValue.appendChild(this.columnsCountBox);\n var rowValue = createElement('div');\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of rows'),\n floatLabelType: 'Always'\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of columns'),\n floatLabelType: 'Always'\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = localValue.getConstant('Insert Table');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.columnValueTexBox.focusIn();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[i]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BookmarkDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.addBookmark = function () {\n _this.documentHelper.owner.editorModule.insertBookmark(_this.textBoxInput.value);\n _this.documentHelper.hideDialog();\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.selectHandler = function (args) {\n _this.focusTextBox(args.text);\n };\n /**\n * @private\n * @returns {void}\n */\n this.gotoBookmark = function () {\n _this.documentHelper.selection.selectBookmark(_this.textBoxInput.value);\n };\n /**\n * @private\n * @returns {void}\n */\n this.deleteBookmark = function () {\n _this.documentHelper.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.documentHelper = documentHelper;\n }\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {string[]} bookmarks - Specifies bookmark collection.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name') + ':';\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview' });\n searchDiv.appendChild(listviewDiv);\n // const arts: string[] = this.documentHelper.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview'\n });\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'), id: 'add',\n attrs: { type: 'button' }\n });\n addbuttonDiv.appendChild(addButtonElement);\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.textBoxInput.addEventListener('input', this.onKeyUpOnTextBox);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Delete'), id: 'delete',\n attrs: { type: 'button' }\n });\n deleteButtonDiv.appendChild(deleteButtonElement);\n this.deleteButton = new Button({ cssClass: 'e-button-custom' });\n this.deleteButton.disabled = hasNoBookmark;\n this.deleteButton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Go To'), id: 'goto',\n attrs: { type: 'button' }\n });\n gotoButtonDiv.appendChild(gotoButtonElement);\n this.gotoButton = new Button({ cssClass: 'e-button-custom' });\n this.gotoButton.disabled = hasNoBookmark;\n this.gotoButton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.documentHelper.getBookmarks();\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks, this.documentHelper.owner.enableRtl);\n //}\n this.documentHelper.dialog.header = localObj.getConstant('Bookmark');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n if (!hasNoBookmark) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var firstItem = bookmarks[0];\n this.listviewInstance.selectItem(firstItem);\n }\n this.documentHelper.dialog.show();\n };\n BookmarkDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = (this.textBoxInput.value === '');\n }\n };\n BookmarkDialog.prototype.focusTextBox = function (text) {\n this.textBoxInput.value = text;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, text.length);\n value.focus();\n this.enableOrDisableButton();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOfContentsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.loadTableofContentDialog = function () {\n _this.documentHelper.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog3.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n var value = _this.textBoxInput;\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.styleDialogModule)) {\n _this.documentHelper.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n /**\n * @returns {void}\n */\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyle = function (args) {\n var headingValue = args.srcElement.value;\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeHeadingStyle = function (args) {\n var headingValue = args.srcElement.value;\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n _this.applyLevelSetting(tocSettings);\n _this.documentHelper.owner.editorModule.insertTableOfContents(tocSettings);\n _this.documentHelper.dialog3.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.documentHelper = documentHelper;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale, isRtl) {\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var leftGeneralDivStyles;\n var rightBottomGeneralDivStyles;\n if (isRtl) {\n leftGeneralDivStyles = 'float:right;';\n rightBottomGeneralDivStyles = 'float:left;position:relative;';\n }\n else {\n leftGeneralDivStyles = 'float:left;';\n rightBottomGeneralDivStyles = 'float:right;';\n }\n var topContainer = createElement('div', { className: 'e-de-container-row' });\n var leftGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(leftGeneralDiv);\n var rightGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n topContainer.appendChild(rightGeneralDiv);\n generalDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-dlg-row' });\n var leftBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n bottomContainer.appendChild(leftBottomGeneralDiv);\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(rightBottomGeneralDiv);\n var pageNumberDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), enableRtl: isRtl, checked: true, change: this.changePageNumberValue });\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), enableRtl: isRtl, checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDivContainer = createElement('div', { className: 'e-de-container-row' });\n var tabDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var tabLeaderLabelDiv = createElement('div');\n var tabLeaderLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader') + ':' });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n tabDivContainer.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ enableRtl: isRtl });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), cssClass: 'e-de-toc-label', enableRtl: isRtl, checked: true });\n this.hyperlink.appendTo(hyperlink);\n var showDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var showLevelLabelDiv = createElement('div', { className: 'e-de-toc-dlg-show-level-div' });\n var showLevelLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels') + ':' });\n showLevelLabelDiv.appendChild(showLevelLabel);\n var showLevelDiv = createElement('div', { className: 'e-de-toc-dlg-showlevel-div' });\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n tabDivContainer.appendChild(showDiv);\n generalDiv.appendChild(tabDivContainer);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, change: this.changeShowLevelValue.bind(this) });\n this.showLevel.appendTo(showLevel);\n if (isRtl) {\n this.hyperlink.cssClass = 'e-de-toc-label-rtl';\n showLevelLabelDiv.classList.add('e-de-rtl');\n showLevelDiv.classList.add('e-de-rtl');\n rightBottomGeneralDiv.classList.add('e-de-rtl');\n }\n //let buildTableDiv: HTMLDivElement = createElement('div', { className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var buildTableLabel = createElement('div', { className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', innerHTML: locale.getConstant('Build table of contents from') + ':' });\n //leftBottomGeneralDiv.appendChild(buildTableDiv);\n // generalDiv.appendChild(buildTableLabel);\n generalDiv.appendChild(bottomContainer);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), enableRtl: isRtl, checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n innerHTML: locale.getConstant('Available styles'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level') + ':', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 1',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 2',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 3',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 4',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 5',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 6',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 7',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 8',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 9',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level' });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n if (isRtl) {\n this.normal.classList.add('e-de-rtl');\n this.heading1.classList.add('e-de-rtl');\n this.heading2.classList.add('e-de-rtl');\n this.heading3.classList.add('e-de-rtl');\n this.heading4.classList.add('e-de-rtl');\n this.heading5.classList.add('e-de-rtl');\n this.heading6.classList.add('e-de-rtl');\n this.heading7.classList.add('e-de-rtl');\n this.heading8.classList.add('e-de-rtl');\n this.heading9.classList.add('e-de-rtl');\n }\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({\n label: locale.getConstant('Outline levels'),\n enableRtl: isRtl, checked: true, cssClass: 'e-de-outline-rtl'\n });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', {\n innerHTML: locale.getConstant('Reset'), id: 'reset',\n attrs: { type: 'button' }\n });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // let tocStylesDiv: HTMLDivElement = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading',\n innerHTML: locale.getConstant('Styles') + ':'\n });\n //rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div');\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleLocale = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n var styleValues = this.styleLocaleValue(styleLocale, locale);\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', {\n innerHTML: locale.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n if (isRtl) {\n resetButtonDiv.classList.add('e-de-rtl');\n tocStylesLabel.classList.add('e-de-rtl');\n textBoxDiv.classList.add('e-de-rtl');\n listViewDiv.classList.add('e-de-rtl');\n modifyButtonDiv.classList.add('e-de-rtl');\n }\n };\n TableOfContentsDialog.prototype.styleLocaleValue = function (styleLocale, localValue) {\n var styleName = [];\n for (var index = 0; index < styleLocale.length; index++) {\n styleName.push(localValue.getConstant(styleLocale[index]));\n }\n return styleName;\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog3.header = localValue.getConstant('Table of Contents');\n this.documentHelper.dialog3.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog3.width = 'auto';\n this.documentHelper.dialog3.height = 'auto';\n this.documentHelper.dialog3.content = this.target;\n this.documentHelper.dialog3.beforeOpen = this.loadTableofContentDialog;\n this.documentHelper.dialog3.close = this.closeTableOfContentDialog;\n this.documentHelper.dialog3.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.documentHelper.dialog3.dataBind();\n this.documentHelper.dialog3.show();\n };\n TableOfContentsDialog.prototype.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.changeByValue(values);\n break;\n }\n };\n TableOfContentsDialog.prototype.changeByValue = function (headings) {\n this.heading1.value = headings[0];\n this.heading2.value = headings[1];\n this.heading3.value = headings[2];\n this.heading4.value = headings[3];\n this.heading5.value = headings[4];\n this.heading6.value = headings[5];\n this.heading7.value = headings[6];\n this.heading8.value = headings[7];\n this.heading9.value = headings[8];\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (outlineLevel !== 0) {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (this.normal.value !== '') {\n tocSettings.levelSettings['Normal'] = +this.normal.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function PageSetupDialog(documentHelper) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n * @returns {void}\n */\n this.loadPageSetupDialog = function () {\n _this.documentHelper.updateFocus();\n var sectionFormat = _this.documentHelper.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n /* eslint-disable-next-line max-len */\n _this.setPageSize(_this.portrait.checked, parseFloat(sectionFormat.pageWidth.toFixed(1)), parseFloat(sectionFormat.pageHeight.toFixed(1)));\n };\n /**\n * @private\n * @returns {void}\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @param {ChangeEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n // const sectionFormat: SelectionSectionFormat = this.documentHelper.selection.sectionFormat;\n // const width: number = sectionFormat.pageWidth;\n // const height: number = sectionFormat.pageHeight;\n /* eslint-disable-next-line max-len */\n if (_this.documentHelper.selection.sectionFormat.pageWidth > _this.documentHelper.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n _this.portrait.checked = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n else {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onPortrait = function () {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onLandscape = function () {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.documentHelper = documentHelper;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale, isRtl) {\n this.target = createElement('div');\n var ejtabContainer = createElement('div');\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.paperTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.layoutTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n var ejtab = createElement('div', { className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var marginContent = createElement('div');\n var paperContent = createElement('div');\n var layoutContent = createElement('div');\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale, isRtl);\n this.initPaperSizeProperties(this.paperTab, locale, isRtl);\n this.initLayoutProperties(this.layoutTab, locale, isRtl);\n var items = [\n { header: { text: marginHeader }, content: marginContent },\n { header: { text: paperHeader }, content: paperContent },\n { header: { text: layoutHeader }, content: layoutContent }\n ];\n var tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n tabObj.isStringTemplate = true;\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale, isRtl) {\n var marginDiv = createElement('div');\n var leftMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(leftMarginDiv);\n var rightMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(rightMarginDiv);\n if (isRtl) {\n leftMarginDiv.classList.add('e-de-rtl');\n rightMarginDiv.classList.add('e-de-rtl');\n }\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n });\n var topContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(topTextBox);\n leftMarginDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(bottomTextBox);\n leftMarginDiv.appendChild(bottomContainer);\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n });\n var leftContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n leftContainer.appendChild(leftTextBox);\n rightMarginDiv.appendChild(leftContainer);\n var rightContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n rightContainer.appendChild(rightTextBox);\n rightMarginDiv.appendChild(rightContainer);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Top') });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Left') });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Bottom') });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Right') });\n this.rightMarginBox.appendTo(rightTextBox);\n var orientationDiv = createElement('div');\n var orientationLabeldiv = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { styles: 'display: flex;' });\n var portraitDivStyles;\n if (isRtl) {\n portraitDivStyles = 'padding-left: 30px;';\n }\n else {\n portraitDivStyles = 'padding-right: 30px;';\n }\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: portraitDivStyles });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, enableRtl: isRtl, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), enableRtl: isRtl, change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale, isRtl) {\n var sizeDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var leftSizeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n sizeDiv.appendChild(leftSizeDiv);\n var rightSizeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n sizeDiv.appendChild(rightSizeDiv);\n if (isRtl) {\n leftSizeDiv.classList.add('e-de-rtl');\n rightSizeDiv.classList.add('e-de-rtl');\n }\n // const widthLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n // id: this.target.id + '_widthLabel', styles: 'padding-top:0px;'\n // }) as HTMLLabelElement;\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n // const heightLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;',\n // id: this.target.id + '_heightLabel'\n // });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Width') });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Height') });\n this.heightBox.appendTo(heightTextBox);\n var paperSizeDiv = createElement('div');\n var paperSize = createElement('select', {\n styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px', enableRtl: isRtl });\n this.paperSize.appendTo(paperSize);\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale, isRtl) {\n var layoutDiv = createElement('div', { className: 'e-de-dlg-container' });\n var firstPageDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n firstPageDiv.appendChild(checkBox1);\n var oddOrEvenDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even'), enableRtl: isRtl });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page'), enableRtl: isRtl });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n var textLabelDiv = createElement('div');\n var textLabel = createElement('label', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('From edge')\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n var propertyDiv = createElement('div', { className: 'e-de-dlg-row' });\n var leftLayoutDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n propertyDiv.appendChild(leftLayoutDiv);\n var rightLayoutDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n propertyDiv.appendChild(rightLayoutDiv);\n if (isRtl) {\n rightLayoutDiv.classList.add('e-de-rtl');\n leftLayoutDiv.classList.add('e-de-rtl');\n }\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n leftLayoutDiv.appendChild(headerBox);\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Header') });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Footer') });\n this.footerBox.appendTo(footerBox);\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = localValue.getConstant('Page Setup');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadPageSetupDialog;\n this.documentHelper.dialog.close = this.closePageSetupDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n PageSetupDialog.prototype.setPageSize = function (isPortrait, width, height) {\n if ((isPortrait && width === 612 && height === 792)\n || (!isPortrait && width === 792 && height === 612)) {\n this.paperSize.value = 'letter';\n }\n else if ((isPortrait && width === 792 && height === 1224)\n || (!isPortrait && width === 1224 && height === 792)) {\n this.paperSize.value = 'tabloid';\n }\n else if ((isPortrait && width === 612 && height === 1008)\n || (!isPortrait && width === 1008 && height === 612)) {\n this.paperSize.value = 'legal';\n }\n else if ((isPortrait && width === 392 && height === 612)\n || (!isPortrait && width === 392 && height === 612)) {\n this.paperSize.value = 'statement';\n }\n else if ((isPortrait && width === 522 && height === 756)\n || (!isPortrait && width === 756 && height === 522)) {\n this.paperSize.value = 'executive';\n }\n else if ((isPortrait && width === 841.9 && height === 1190.5)\n || (!isPortrait && width === 1190.5 && height === 841.9)) {\n this.paperSize.value = 'a3';\n }\n else if ((isPortrait && width === 595.3 && height === 841.9)\n || (!isPortrait && width === 841.9 && height === 595.3)) {\n this.paperSize.value = 'a4';\n }\n else if ((isPortrait && width === 419.6 && height === 595.3)\n || (!isPortrait && width === 595.3 && height === 419.6)) {\n this.paperSize.value = 'a5';\n }\n else if ((isPortrait && width === 728.5 && height === 1031.8)\n || (!isPortrait && width === 1031.8 && height === 728.5)) {\n this.paperSize.value = 'b4';\n }\n else if ((isPortrait && width === 515.9 && height === 728.5)\n || (!isPortrait && width === 728.5 && height === 515.9)) {\n this.paperSize.value = 'letter';\n }\n else {\n this.paperSize.value = 'customsize';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ParagraphDialog(documentHelper) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.spaceBeforeAuto = false;\n this.spaceAfterAuto = false;\n this.textAlignment = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n this.isStyleDialog = false;\n this.directionDiv = undefined;\n this.keepWithNextValue = undefined;\n this.keepLineTogetherValue = undefined;\n this.widowControlValue = undefined;\n this.tabObj = undefined;\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n _this.beforeSpacingIn.step = 1;\n _this.spaceBeforeAuto = true;\n _this.beforeSpacing = 5;\n }\n else {\n _this.beforeSpacing = event.value;\n _this.beforeSpacingIn.step = 6;\n _this.spaceBeforeAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_1 = _this.beforeSpacingIn;\n setTimeout(function () {\n proxy_1.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickBeforeSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.beforeSpacingIn.element.value === '-1.0')\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n _this.afterSpacingIn.step = 1;\n _this.spaceAfterAuto = true;\n _this.afterSpacing = 5;\n }\n else {\n _this.afterSpacing = event.value;\n _this.afterSpacingIn.step = 6;\n _this.spaceAfterAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_2 = _this.afterSpacingIn;\n setTimeout(function () {\n proxy_2.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickAfterSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.afterSpacingIn.element.value === '-1.0')\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n if (_this.special.index === 2) {\n _this.firstLineIndent = -(_this.firstLineIndent);\n _this.leftIndent = _this.leftIndentIn.value + event.value;\n }\n };\n /**\n * @private\n * @param {DropDownChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies change event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.bidi = true;\n }\n _this.changeAlignmentByBidi();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeContextualSpacing = function (args) {\n _this.contextualSpacing = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepWithNext = function (args) {\n _this.keepWithNextValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepLinesTogether = function (args) {\n _this.keepLineTogetherValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeWidowControl = function (args) {\n _this.widowControlValue = args.checked;\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeByValue = function () {\n var paragraphFormat = _this.documentHelper.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n _this.leftIndent = _this.leftIndentIn.value;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n if (Math.abs(paragraphFormat.firstLineIndent) <= _this.leftIndent) {\n _this.leftIndent = paragraphFormat.firstLineIndent + _this.leftIndent;\n }\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = (paragraphFormat.firstLineIndent);\n if (!isNullOrUndefined(_this.leftIndent)) {\n _this.leftIndent = _this.leftIndent + paragraphFormat.firstLineIndent;\n }\n else {\n _this.leftIndent = paragraphFormat.firstLineIndent;\n }\n }\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeBySpacing = function () {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadParagraphDialog = function () {\n if (_this.isStyleDialog) {\n _this.directionDiv.classList.add('e-de-disabledbutton');\n }\n else {\n _this.directionDiv.classList.remove('e-de-disabledbutton');\n }\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.documentHelper.selection.paragraphFormat;\n }\n var alignValue = _this.getAlignmentValue(selectionFormat.textAlignment);\n _this.alignment.index = alignValue;\n if (selectionFormat.spaceBeforeAuto) {\n _this.beforeSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.beforeSpacing === -1) {\n _this.beforeSpacingIn.value = undefined;\n }\n else {\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n }\n }\n if (selectionFormat.spaceAfterAuto) {\n _this.afterSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.afterSpacing === -1) {\n _this.afterSpacingIn.value = undefined;\n }\n else {\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n }\n }\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = Math.abs(selectionFormat.firstLineIndent);\n var lineSpaceValue = _this.lineSpacing.index;\n _this.keepWithNextValue = undefined;\n _this.keepLineTogetherValue = undefined;\n _this.widowControlValue = undefined;\n if (selectionFormat.firstLineIndent > 0) {\n _this.special.index = 1;\n }\n else if (selectionFormat.firstLineIndent < 0) {\n _this.special.index = 2;\n _this.leftIndentIn.value = selectionFormat.leftIndent - _this.byIn.value;\n }\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (selectionFormat.bidi) {\n _this.rtlButton.checked = true;\n _this.ltrButton.checked = false;\n }\n else {\n _this.ltrButton.checked = true;\n _this.rtlButton.checked = false;\n }\n if (isNullOrUndefined(selectionFormat.keepWithNext)) {\n _this.keepWithNext.indeterminate = true;\n }\n else {\n _this.keepWithNext.checked = selectionFormat.keepWithNext;\n }\n if (isNullOrUndefined(selectionFormat.keepLinesTogether)) {\n _this.keepLinesTogether.indeterminate = true;\n }\n else {\n _this.keepLinesTogether.checked = selectionFormat.keepLinesTogether;\n }\n if (isNullOrUndefined(selectionFormat.widowControl)) {\n _this.widowControlIn.indeterminate = true;\n }\n else {\n _this.widowControlIn.checked = selectionFormat.widowControl;\n }\n _this.contextSpacing.checked = selectionFormat.contextualSpacing;\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n paraFormat.borders = undefined;\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.spaceBeforeAuto)) {\n paraFormat.spaceBeforeAuto = _this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(_this.spaceAfterAuto)) {\n paraFormat.spaceAfterAuto = _this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = Math.abs(_this.firstLineIndent);\n if (_this.special.index === 2) {\n paraFormat.firstLineIndent = -paraFormat.firstLineIndent;\n }\n }\n if (!isNullOrUndefined(_this.bidi)) {\n paraFormat.bidi = _this.bidi;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n var textAlignment = _this.textAlignment;\n if (paraFormat.bidi) {\n if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n else if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n }\n paraFormat.textAlignment = textAlignment;\n }\n if (!isNullOrUndefined(_this.contextualSpacing)) {\n paraFormat.contextualSpacing = _this.contextualSpacing;\n }\n if (!isNullOrUndefined(_this.keepWithNextValue)) {\n paraFormat.keepWithNext = _this.keepWithNextValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepWithNext) {\n paraFormat.keepWithNext = _this.documentHelper.selection.paragraphFormat.keepWithNext;\n }\n if (!isNullOrUndefined(_this.keepLineTogetherValue)) {\n paraFormat.keepLinesTogether = _this.keepLineTogetherValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepLinesTogether) {\n paraFormat.keepLinesTogether = _this.documentHelper.selection.paragraphFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(_this.widowControlValue)) {\n paraFormat.widowControl = _this.widowControlValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.widowControl) {\n paraFormat.widowControl = _this.documentHelper.selection.paragraphFormat.widowControl;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(ParagraphDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var tabContainer = createElement('div');\n var ejtab = createElement('div');\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n //let id: string = ownerId + '_paragraph_dialog';\n var indentContainer = createElement('div', { className: 'e-de-dlg-tab-first-child e-de-para-dlg-container' });\n this.target = tabContainer;\n tabContainer.appendChild(ejtab);\n var div = createElement('div', { styles: 'width:400px;' });\n var generalDiv = createElement('div');\n var genLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var alignmentWholeDiv = createElement('div', { className: 'e-de-container-row' });\n generalDiv.appendChild(alignmentWholeDiv);\n var alignmentDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n alignmentWholeDiv.appendChild(alignmentDiv);\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n alignmentDiv.appendChild(alignment);\n var dirLabel = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Direction')\n });\n this.directionDiv = createElement('div', { className: 'e-de-container-row' });\n var rtlDiv = createElement('div', { className: 'e-de-rtl-btn-div' });\n var rtlInputELe = createElement('input', { id: ownerId + '_rtlEle' });\n rtlDiv.appendChild(rtlInputELe);\n this.directionDiv.appendChild(rtlDiv);\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n }\n var ltrDiv = createElement('div', { className: 'e-de-ltr-btn-div' });\n var ltrInputELe = createElement('input', { id: ownerId + '_ltrEle' });\n ltrDiv.appendChild(ltrInputELe);\n this.directionDiv.appendChild(ltrDiv);\n generalDiv.appendChild(dirLabel);\n generalDiv.appendChild(this.directionDiv);\n this.rtlButton = new RadioButton({\n label: locale.getConstant('Right-to-left'), enableRtl: isRtl,\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.rtlButton.appendTo(rtlInputELe);\n this.ltrButton = new RadioButton({\n label: locale.getConstant('Left-to-right'), enableRtl: isRtl,\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.ltrButton.appendTo(ltrInputELe);\n var indentionWholeDiv = createElement('div');\n var indentLabel = createElement('div', { className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Indentation')\n });\n indentionWholeDiv.appendChild(indentLabel);\n var indentionSubDiv1 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv1);\n var indentionSubDiv2 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv2);\n var beforeTextDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv1.appendChild(beforeTextDiv);\n var afterTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv1.appendChild(afterTextDiv);\n var specialDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv2.appendChild(specialDiv);\n var byDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv2.appendChild(byDiv);\n var spacingDiv = createElement('div');\n var leftSpacingDiv = createElement('div');\n spacingDiv.appendChild(leftSpacingDiv);\n // let contextSpacingStyles: string = 'float:left';\n // if (isRtl) {\n // contextSpacingStyles = 'float:right;';\n // }\n var contextSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(contextSpacingDiv);\n var rightSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(rightSpacingDiv);\n var contextInputEle = createElement('input', {\n attrs: { type: 'checkbox' },\n id: ownerId + '_contextSpacing'\n });\n contextSpacingDiv.appendChild(contextInputEle);\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n beforeTextDiv.appendChild(leftIndent);\n afterTextDiv.appendChild(rightIndent);\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n specialDiv.appendChild(special);\n byDiv.appendChild(by);\n var spaceLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Spacing') });\n var spacingWholeDiv = createElement('div', { className: 'e-de-container-row' });\n var beforeSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var afterSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(spacingWholeDiv);\n beforeSpacingWholeDiv.appendChild(beforeSpacing);\n spacingWholeDiv.appendChild(beforeSpacingWholeDiv);\n afterSpacingWholeDiv.appendChild(afterSpacing);\n spacingWholeDiv.appendChild(afterSpacingWholeDiv);\n var lineSpacingDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing',\n innerHTML: ''\n });\n var lineTypeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n lineSpacingDiv.appendChild(lineSpacing);\n rightSpacingDiv.appendChild(lineSpacingDiv);\n lineTypeDiv.appendChild(lineSpacingAt);\n rightSpacingDiv.appendChild(lineTypeDiv);\n div.appendChild(generalDiv);\n div.appendChild(indentionWholeDiv);\n div.appendChild(spacingDiv);\n indentContainer.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before text'), change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After text'), change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('By'), change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before'),\n change: this.changeBeforeSpacing,\n focus: this.focusBeforeSpacing,\n blur: this.blurBeforeSpacing,\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n var beforeSpacingSpinDown = beforeSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n beforeSpacingSpinDown.addEventListener('click', this.clickBeforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After'),\n change: this.changeAfterSpacing,\n focus: this.focusAfterSpacing,\n blur: this.blurAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n var afterSpacingSpinDown = afterSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n afterSpacingSpinDown.addEventListener('click', this.clickAfterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, step: 0.5, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('At'), change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Special') });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Line Spacing') });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ change: this.changeByTextAlignment, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Alignment') });\n this.alignment.appendTo(alignment);\n this.atIn.appendTo(lineSpacingAt);\n this.contextSpacing = new CheckBox({\n change: this.changeContextualSpacing,\n label: locale.getConstant(\"Contextual Spacing\"),\n enableRtl: isRtl\n });\n this.contextSpacing.appendTo(contextInputEle);\n indentContainer.addEventListener('keyup', instance.keyUpParagraphSettings);\n if (isRtl) {\n afterSpacingWholeDiv.classList.add('e-de-rtl');\n lineTypeDiv.classList.add('e-de-rtl');\n }\n var lineBreakContainer = createElement('div', { className: 'e-de-dlg-tab-first-child' });\n var paginationDiv = createElement('div', { className: 'e-de-para-dlg-sub-container' });\n this.paginationDiv = paginationDiv;\n var paginationLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Pagination') });\n paginationDiv.appendChild(paginationLabel);\n var widowContorlContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(widowContorlContainer);\n var keepNextContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepNextContainer);\n var keepLines = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepLines);\n var keepWithNext = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepNextContainer.appendChild(keepWithNext);\n this.keepWithNext = new CheckBox({\n change: this.changeKeepWithNext,\n label: locale.getConstant('Keep With Next'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepWithNext.appendTo(keepWithNext);\n var keepLinesTogether = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepLines.appendChild(keepLinesTogether);\n this.keepLinesTogether = new CheckBox({\n change: this.changeKeepLinesTogether,\n label: locale.getConstant('Keep Lines Together'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepLinesTogether.appendTo(keepLinesTogether);\n var widowControl = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n widowContorlContainer.appendChild(widowControl);\n this.widowControlIn = new CheckBox({\n change: this.changeWidowControl,\n label: locale.getConstant('WidowControl'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.widowControlIn.appendTo(widowControl);\n lineBreakContainer.appendChild(paginationDiv);\n var items = [\n { header: { text: locale.getConstant('Indents and Spacing') }, content: indentContainer },\n { header: { text: locale.getConstant('Line and Page Breaks') }, content: lineBreakContainer }\n ];\n this.tabObj = new Tab({ items: items, enableRtl: isRtl, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } }, ejtab);\n this.tabObj.isStringTemplate = true;\n };\n ParagraphDialog.prototype.changeAlignmentByBidi = function () {\n if (this.textAlignment === 'Left') {\n this.textAlignment = 'Right';\n }\n else if (this.textAlignment === 'Right') {\n this.textAlignment = 'Left';\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n this.alignment.index = this.getAlignmentValue(this.textAlignment);\n }\n else {\n if (this.alignment.index === 0) {\n this.textAlignment = 'Center';\n }\n else {\n this.textAlignment = 'Justify';\n }\n }\n };\n ParagraphDialog.prototype.getAlignmentValue = function (textAlignment) {\n var alignValue;\n if (textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n return alignValue;\n };\n /**\n * Applies Paragraph Format\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n var selection = this.documentHelper.selection;\n var isListBidi = paragraphFormat.bidi && selection.paragraphFormat.listId !== -1;\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.documentHelper.owner.editor.setPreviousBlockToLayout();\n this.documentHelper.owner.editorModule.initHistory('ParagraphFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n if (this.documentHelper.selection.isEmpty) {\n this.documentHelper.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n this.documentHelper.owner.editor.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.documentHelper.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.documentHelper.owner.editorModule.reLayout(selection);\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n };\n /**\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.isStyleDialog = true;\n this.paragraphFormat = paragraphFormat;\n }\n else {\n this.isStyleDialog = false;\n }\n var local = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n local.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.documentHelper.dialog.header = local.getConstant('Paragraph');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }];\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n var width = this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n this.paginationDiv.style.width = width.toString() + 'px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.special) {\n this.special.destroy();\n this.special = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[q]);\n q--;\n }\n this.target = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n *\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n get: function () {\n return this.levelNumberIn;\n },\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n get: function () {\n return this.listIn;\n },\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.documentHelper.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n this.dialog.documentHelper.abstractLists.push(abstractList);\n abstractList = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId);\n if (abstractList.levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return abstractList.levels[this.levelNumber];\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.documentHelper.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.documentHelper.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.list.abstractList = abstractList;\n this.dialog.documentHelper.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.documentHelper.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.documentHelper).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ListViewModel.prototype.destroy = function () {\n if (this.dialog && this.listIn) {\n this.dialog.documentHelper.layout.clearInvalidList(this.listIn);\n }\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ListDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.documentHelper = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onTextIndentChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onStartValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n if (!isNullOrUndefined(_this.viewModel) && !isNullOrUndefined(_this.viewModel.listLevel)) {\n _this.viewModel.listLevel.startAt = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n /**\n * @private\n * @param {any} args - Specifies the change event args.\n * @returns {void}\n */\n this.onNumberFormatChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onAlignedAtValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent = _this.alignedAt.value - _this.viewModel.listLevel.paragraphFormat.leftIndent;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onFollowCharacterValueChanged = function (args) {\n if (args.isInteracted) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onLevelPatternValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n var numberFormatTextBox = document.getElementById(_this.documentHelper.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = String.fromCharCode(61623);\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadListDialog = function () {\n _this.documentHelper.updateFocus();\n if (isNullOrUndefined(_this.documentHelper.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.documentHelper.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.documentHelper.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.documentHelper.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n _this.documentHelper.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.documentHelper.selection.paragraphFormat.setList(_this.list, true);\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.documentHelper = documentHelper;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n * @returns {WListLevel} Returns list level\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n * @returns {WList} Returns list\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n * @returns {number} Returns level number\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n /* eslint-disable-next-line max-len */\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n var bindEvent = false;\n if (!this.target) {\n this.initListDialog(locale, this.documentHelper.owner.enableRtl);\n bindEvent = true;\n }\n this.isListCharacterFormat = true;\n this.documentHelper.dialog2.header = locale.getConstant('Define new Multilevel list');\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n var buttonClass;\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n buttonClass = 'e-flat e-list-dlg-font e-de-dlg-target.e-de-rtl e-font-rtl';\n }\n else {\n buttonClass = 'e-flat e-list-dlg-font e-font';\n }\n this.documentHelper.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: buttonClass }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n this.documentHelper.dialog2.dataBind();\n if (bindEvent) {\n this.wireAndBindEvent(locale, isRtl);\n }\n this.documentHelper.dialog2.beforeOpen = this.loadListDialog;\n this.documentHelper.dialog2.close = this.closeListDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'top' };\n this.documentHelper.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n ListDialog.prototype.initListDialog = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n var divStyle;\n if (isRtl) {\n divStyle = '
    ';\n }\n else {\n divStyle = '
    ';\n }\n var numberStyleDiv = createElement('div', { innerHTML: divStyle + '' });\n div.appendChild(numberStyleDiv);\n this.numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
    ' });\n div.appendChild(this.numberFormatDiv);\n this.target.appendChild(div);\n var indentsDivLabelStyle;\n if (isRtl) {\n indentsDivLabelStyle = 'display:block;position:relative; ';\n }\n else {\n indentsDivLabelStyle = 'display:block; ';\n }\n var indentsDiv = createElement('div', { innerHTML: divStyle + '
    ' });\n this.target.appendChild(indentsDiv);\n };\n ListDialog.prototype.wireAndBindEvent = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n if (isRtl) {\n document.getElementById('e-de-list-dlg-div').classList.add('e-de-rtl');\n this.numberFormatDiv.classList.add('e-de-rtl');\n }\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false\n });\n this.startAt.addEventListener('change', this.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', this.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', this.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', this.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n this.formatInfoToolTip.content = locale.getConstant('Number format tooltip information');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.documentHelper.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.calculateAlignedAt = function () {\n if (this.viewModel.listLevel.paragraphFormat.firstLineIndent < 0) {\n return this.viewModel.listLevel.paragraphFormat.leftIndent + this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n else {\n return this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n if (isNullOrUndefined(this.listLevel.characterFormat)) {\n this.listLevel.characterFormat = new WCharacterFormat(this.viewModel.listLevel);\n }\n if (isNullOrUndefined(this.listLevel.paragraphFormat)) {\n this.listLevel.paragraphFormat = new WParagraphFormat(this.viewModel.listLevel);\n }\n //const restartByTextBox: HTMLSelectElement = document.getElementById(this.documentHelper.owner.containerId + '_restartBy') as HTMLSelectElement;\n if (!isNullOrUndefined(this.viewModel) && !isNullOrUndefined(this.viewModel.listLevel)) {\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.calculateAlignedAt();\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberFormat.style.fontFamily = this.viewModel.listLevel.characterFormat.fontFamily;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n //this.viewModel.levelNumber = this.viewModel.levelNumber;\n }\n };\n /**\n * @private\n */\n ListDialog.prototype.updateCharacterFormat = function (format) {\n this.listLevel.characterFormat.copyFormat(format);\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[l]);\n l--;\n }\n this.target = undefined;\n }\n this.documentHelper = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { BulletsAndNumberingDialog } from './index';\nimport { Query } from '@syncfusion/ej2-data';\nimport { WAbstractList } from '../list/abstract-list';\nimport { ColorPicker, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StyleDialog(documentHelper) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n /**\n *\n * @param {DropDownButtonMenuEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontButtonClicked = function () {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value.toString();\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.hex;\n };\n /**\n * @private\n * @returns {void}\n */\n this.setLeftAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Left') {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setRightAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Right') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setCenterAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Center') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setJustifyAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Justify') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.increaseBeforeAfterSpacing = function () {\n _this.paragraphFormat.beforeSpacing += 6;\n _this.paragraphFormat.afterSpacing += 6;\n };\n /**\n * @private\n * @returns {void}\n */\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.paragraphFormat.beforeSpacing >= 6) {\n _this.paragraphFormat.beforeSpacing -= 6;\n }\n else {\n _this.paragraphFormat.beforeSpacing = 0;\n }\n if (_this.paragraphFormat.afterSpacing >= 6) {\n _this.paragraphFormat.afterSpacing -= 6;\n }\n else {\n _this.paragraphFormat.afterSpacing = 0;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === _this.localObj.getConstant('Paragraph') && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.documentHelper.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n _this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked Style') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /**\n * @returns {void}\n */\n this.styleBasedOnChange = function () {\n //Based on change\n };\n /**\n * @private\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.fontDialogModule)) {\n _this.documentHelper.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.paragraphDialogModule)) {\n _this.documentHelper.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.documentHelper);\n if (_this.style instanceof WParagraphStyle && (!isNullOrUndefined(_this.style.paragraphFormat))) {\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n var styleName = _this.styleNameElement.value;\n if (styleName.length > 0) {\n var style = _this.documentHelper.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.documentHelper.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n _this.style.next = _this.documentHelper.styles.findByName(_this.styleParagraph.value);\n _this.style.characterFormat.mergeFormat(style.characterFormat);\n _this.style.paragraphFormat.mergeFormat(style.paragraphFormat, true);\n _this.updateList();\n _this.style.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n _this.documentHelper.owner.isShiftingEnabled = true;\n _this.documentHelper.owner.editorModule.layoutWholeDocument();\n _this.documentHelper.owner.isShiftingEnabled = false;\n }\n else {\n var tmpStyle = _this.getTypeValue() === 'Paragraph' ? new WParagraphStyle() : new WCharacterStyle;\n tmpStyle.copyStyle(_this.style);\n var basedOn = _this.documentHelper.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n if (styleName === _this.styleParagraph.value) {\n tmpStyle.next = tmpStyle;\n }\n else {\n tmpStyle.next = _this.documentHelper.styles.findByName(_this.styleParagraph.value);\n }\n _this.updateList();\n }\n tmpStyle.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName) : undefined;\n tmpStyle.type = _this.getTypeValue();\n tmpStyle.name = styleName;\n tmpStyle.basedOn = basedOn;\n _this.documentHelper.styles.push(tmpStyle);\n name_1 = styleName;\n _this.documentHelper.owner.editorModule.applyStyle(name_1, true);\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadStyleDialog = function () {\n _this.documentHelper.updateFocus();\n _this.isUserNextParaUpdated = false;\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n _this.styleNameElement.value = _this.editStyleName;\n name = _this.editStyleName;\n }\n _this.okButton = _this.documentHelper.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n if (!_this.isEdit && _this.style) {\n _this.style.destroy();\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeStyleDialog = function () {\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n /* eslint-disable */\n StyleDialog.prototype.initStyleDialog = function (localValue, isRtl) {\n var instance = this;\n this.localObj = localValue;\n this.target = createElement('div', { className: 'e-de-style-dialog' });\n var container = createElement('div');\n var properties = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n // let name: HTMLElement = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n // nameWholeDiv.appendChild(name);\n var nameValue = createElement('input', { className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n new TextBox({ placeholder: localValue.getConstant('Name') + ':', floatLabelType: 'Always' }, nameValue);\n var styleTypeWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // let styleType: HTMLElement = createElement('div', { className: 'e-de-style-styletype', innerHTML: });\n // styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div');\n var styleTypeValue = createElement('select');\n styleTypeValue.innerHTML = '';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({\n change: this.styleTypeChange,\n popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style type') + ':', floatLabelType: 'Always'\n });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n var styleBasedParaDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n //let styleBasedOn: HTMLElement = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: });\n //styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n var styleBasedOnValue = createElement('input');\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({\n dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style based on') + ':', floatLabelType: 'Always'\n });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n if (isRtl) {\n nameWholeDiv.classList.add('e-de-rtl');\n styleBasedOnWholeDiv.classList.add('e-de-rtl');\n styleParagraphWholeDiv.classList.add('e-de-rtl');\n }\n //let styleParagraph: HTMLElement = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: });\n //styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div');\n var styleParagraphValue = createElement('input');\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({\n dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style for following paragraph') + ':', floatLabelType: 'Always'\n });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n var formatting = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 14px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv, isRtl);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue, isRtl);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue, isRtl) {\n var _this = this;\n var formatBtn = createElement('button', {\n id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format'),\n attrs: { type: 'button' }\n });\n formatBtn.style.height = '31px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font') + '...', id: 'style_font' },\n { text: localValue.getConstant('Paragraph') + '...', id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering') + '...', id: 'style_numbering' }];\n this.styleDropdwn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn', enableRtl: isRtl,\n beforeItemRender: function (args) {\n if (_this.styleType.value === localValue.getConstant('Character')) {\n if (args.item.text === localValue.getConstant('Paragraph')) {\n args.element.classList.add('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.text === localValue.getConstant('Paragraph')) {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n },\n });\n this.styleDropdwn.appendTo(formatBtn);\n this.styleDropdwn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv, isRtl) {\n var _this = this;\n var fontFamilyElement = createElement('input', {\n id: this.target.id + '_fontName',\n });\n var fontStyle;\n var isStringTemplate = true;\n var itemTemplate = '${FontName}';\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n dataSource: fontStyle, query: new Query().select(['FontName']), fields: { text: 'FontName', value: 'value' },\n allowCustom: true, width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', enableRtl: isRtl, change: this.fontFamilyChanged,\n showClearButton: false, itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontFamilyElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'value': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () { _this.fontFamily.element.select(); };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n enableRtl: isRtl, change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.documentHelper.owner.containerId + '_style_bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', enableRtl: isRtl, change: this.fontColorUpdate, locale: this.documentHelper.owner.locale });\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.addEventListener('click', function () {\n if (_this.paragraphFormat.leftIndent >= 36) {\n _this.paragraphFormat.leftIndent -= 36;\n }\n else {\n _this.paragraphFormat.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.addEventListener('click', function () {\n _this.paragraphFormat.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button', { attrs: { type: 'button' } });\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === this.localObj.getConstant('Character')) {\n this.styleParagraph.enabled = false;\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n * @param {string} styleName - Specifies the style name.\n * @param {string} header - Specifies the header.\n * @returns {void}\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n var style = this.documentHelper.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n if (!this.isEdit) {\n this.styleType.value = 'Paragraph';\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.documentHelper.dialog2.header = header;\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.beforeOpen = this.loadStyleDialog;\n this.documentHelper.dialog2.close = this.closeStyleDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.documentHelper.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.documentHelper.lists = this.documentHelper.lists.filter(function (a) { return (a.listId !== listId); });\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.documentHelper.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.documentHelper.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.documentHelper.styles.push(charStyle);\n }\n return this.documentHelper.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n * @param {L10n} characterFormat - Specifies the character format\n * @returns {void}\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat;\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n var color = this.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n this.fontColor.value = (color === 'empty' || color === '#00000000') ? '#000000' : color;\n this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat;\n }\n if (this.paragraphFormat.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.paragraphFormat.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n StyleDialog.prototype.getTypeValue = function () {\n var type;\n if (this.styleType.value === 'Linked Style' || this.styleType.value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var styles = this.documentHelper.styles.getStyleNames(type);\n this.styleParagraph.dataSource = styles;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = styles.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = styles;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.documentHelper.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.documentHelper.owner.selection.characterFormat.styleName;\n }\n else {\n styleName = this.documentHelper.owner.selection.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n this.styleBasedOn.dataBind();\n this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n if (isNullOrUndefined(this.documentHelper.styles.findByName(styleName))) {\n this.documentHelper.owner.editor.createStyle(this.documentHelper.preDefinedStyles.get(styleName));\n }\n return this.documentHelper.styles.findByName(styleName);\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.fontColor) {\n this.fontColor.destroy();\n this.fontColor = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n this.styleType = undefined;\n }\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n this.styleBasedOn = undefined;\n }\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n this.styleParagraph = undefined;\n }\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n this.template = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n this.numberingBulletDialog = undefined;\n }\n if (this.styleDropdwn) {\n this.styleDropdwn.destroy();\n this.styleDropdwn = undefined;\n }\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BulletsAndNumberingDialog(documentHelper) {\n var _this = this;\n this.isBullet = false;\n /* eslint-disable */\n /**\n * @param args\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @param args\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = String.fromCharCode(61623);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = String.fromCharCode(61551) + String.fromCharCode(32);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = String.fromCharCode(61607);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = String.fromCharCode(61558);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = String.fromCharCode(61656);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = String.fromCharCode(61692);\n _this.fontFamily = 'Wingdings';\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadNumberingBulletDialog = function () {\n //Load\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n if (_this.documentHelper.owner.documentHelper.lists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.listFormat.list.listId = _this.documentHelper.owner.documentHelper.lists[_this.documentHelper.owner.documentHelper.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.documentHelper.owner.documentHelper.abstractLists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.abstractList.abstractListId = _this.documentHelper.owner.documentHelper.abstractLists[_this.documentHelper.owner.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id, locale);\n this.createBulletList(id, locale);\n //Initialize Tab component\n this.tabObj = new Tab({\n items: [\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Numbering') }) },\n content: this.numberListDiv\n },\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Bullets') }) },\n content: this.bulletListDiv\n }\n ],\n heightAdjustMode: 'None',\n width: 'auto',\n selecting: this.onTabSelect.bind(this)\n });\n this.tabObj.isStringTemplate = true;\n //Render initialized Tab component\n this.tabObj.appendTo(tabTarget);\n };\n BulletsAndNumberingDialog.prototype.onTabSelect = function (args) {\n if (args.selectingIndex === 1) {\n this.bulletListDiv.style.display = 'block';\n }\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id, locale) {\n this.numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n var numberListDiv = this.numberListDiv;\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag, locale);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
    ' + text1 + '
    ' + text2 + '';\n innerHTML += '
    ' + text3 + '
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag, locale) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
    ' + locale.getConstant('None') + '
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className, locale) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var isNone = className === 'e-bullet-none';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size',\n styles: isNone ? 'font-size:9px;text-align: center;top: 13px;left:-2px;line-height:normal;position: relative' : ''\n });\n var liNextDiv = createElement('div', { className: !isNone ? iconCss : '', innerHTML: isNone ? locale.getConstant('None') : '' });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id, locale) {\n this.bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n var bulletListDiv = this.bulletListDiv;\n bulletListDiv.style.display = 'none';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none', locale);\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n * @param {WListFormat} listFormat - Specifies the list format.\n * @param {WAbstractList} abstractList - Specifies the abstract list.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.documentHelper.dialog.header = locale.getConstant('Numbering and Bullets');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.documentHelper.dialog.close = this.closeNumberingBulletDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n this.tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.tabObj) {\n this.tabObj.destroy();\n this.tabObj = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n this.bulletListDiv = undefined;\n this.numberListDiv = undefined;\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/* eslint-disable */\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\nvar FontDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function FontDialog(documentHelper) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n this.allcaps = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n this.allCaps = undefined;\n this.isListDialog = false;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.documentHelper.owner.selection.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n _this.fontNameList.dataBind();\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n _this.fontSizeText.value = characterFormat.fontSize;\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n var fontColor = characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n _this.colorPicker.value = fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (characterFormat.allCaps) {\n _this.allcaps.checked = true;\n }\n else {\n _this.allcaps.checked = false;\n _this.allCaps = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n format.fontFamily = _this.fontFamily;\n }\n if (!isNullOrUndefined(_this.allCaps)) {\n format.allCaps = _this.allCaps;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.documentHelper.selection, format);\n }\n else {\n if (_this.isListDialog) {\n _this.documentHelper.owner.listDialogModule.updateCharacterFormat(format);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateCharacterFormat();\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.allcapsUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.allCaps = true;\n }\n else {\n _this.allCaps = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n * @returns {string} returns font style\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n * @param {string} value Specifies font style\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n FontDialog.prototype.initFontDialog = function (locale, isRtl) {\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var allCapsElement;\n var fontEffectSubDiv1;\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale, isRtl);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale, isRtl);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { className: 'e-de-container-row' });\n this.fontColorDiv = createElement('div', { className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin',\n innerHTML: locale.getConstant('Font color')\n });\n if (isRtl) {\n fontColorLabel.classList.add('e-de-rtl');\n }\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div');\n fontEffectSubDiv1 = createElement('div');\n effectLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Effects'),\n });\n fontEffectSubDiv1.appendChild(effectLabel);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n this.target.appendChild(fontEffectsDiv);\n var effectsProperties = createElement('div', { className: 'e-de-container-row' });\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-subcontainer-left' });\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv2.appendChild(strikeThroughElement);\n var checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n checkBoxDiv.appendChild(subScriptElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n allCapsElement = this.createInputElement('checkbox', this.target.id + '_allCaps', '');\n checkBoxDiv.appendChild(allCapsElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv2);\n var fontEffectSubDiv3 = createElement('div', { className: 'e-de-subcontainer-right' });\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv3.appendChild(superScriptElement);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n checkBoxDiv.appendChild(doubleStrikeThroughElement);\n fontEffectSubDiv3.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv3);\n this.target.appendChild(effectsProperties);\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000', enableRtl: isRtl, locale: this.documentHelper.owner.locale\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough'),\n enableRtl: isRtl\n });\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n label: locale.getConstant('Double strikethrough'),\n enableRtl: isRtl\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n cssClass: 'e-de-font-content-label-width',\n change: this.subscriptUpdate,\n enableRtl: isRtl\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate,\n enableRtl: isRtl\n });\n this.superscript.appendTo(superScriptElement);\n this.allcaps = new CheckBox({\n label: locale.getConstant('All caps'),\n cssClass: 'e-de-font-content-label-caps',\n change: this.allcapsUpdate,\n enableRtl: isRtl\n });\n this.allcaps.appendTo(allCapsElement);\n if (isRtl) {\n fontEffectSubDiv2.classList.add('e-de-rtl');\n fontEffectSubDiv3.classList.add('e-de-rtl');\n fontEffectSubDiv1.classList.remove('e-de-font-content-checkbox-label');\n }\n };\n FontDialog.prototype.getFontSizeDiv = function (locale, isRtl) {\n var fontSize;\n var sizeDiv;\n var id = this.documentHelper.owner.containerId;\n sizeDiv = createElement('div', { className: 'e-de-container-row' });\n var sizeSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var sizeLabel = locale.getConstant('Size');\n fontSize = createElement('select', { id: this.target.id + '_fontSize' });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-subcontainer-right',\n });\n if (isRtl) {\n sizeSubDiv2.classList.add('e-de-rtl');\n }\n var html = locale.getConstant('Underline style');\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine' });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, allowCustom: true, showClearButton: false, enableRtl: isRtl, floatLabelType: 'Always', placeholder: sizeLabel });\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: html });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale, isRtl) {\n var id = this.documentHelper.owner.containerId;\n var fontDiv = createElement('div', { className: 'e-de-container-row' });\n var fontSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var fontLabel = locale.getConstant('Font');\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n var fontValues = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontValues.length; i++) {\n fontNameValues.innerHTML += '';\n }\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-subcontainer-right' });\n if (isRtl) {\n fontSubDiv2.classList.add('e-de-rtl');\n }\n var fontStyleLabel = locale.getConstant('Font style');\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle' });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontLabel });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontStyleLabel });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @param characterFormat\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat, isListDialog) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n this.isListDialog = isListDialog;\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = locale.getConstant('Font');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.close = this.closeFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {Selection} selection Specifies the selection\n * @param {WCharacterFormat} format Specifies the character format\n * @returns {void}\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.documentHelper.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n this.documentHelper.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.documentHelper.owner.editorModule.reLayout(selection);\n }\n this.documentHelper.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.documentHelper.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.allcaps.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n if (this.allcaps) {\n this.allcaps.destroy();\n }\n this.allcaps = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphFormat } from '../format/index';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TablePropertiesDialog(documentHelper) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n this.bidi = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n this.localValue = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n /**\n * @returns {void}\n */\n this.onBeforeOpen = function () {\n _this.documentHelper.updateFocus();\n _this.loadTableProperties();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableProperties = function () {\n var selection = _this.documentHelper.selection;\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth === 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n /* eslint-disable-next-line max-len */\n var containerWidth = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n /* eslint-disable-next-line max-len */\n var tableWidth = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth);\n _this.tableFormat.preferredWidthType = 'Percent';\n /* eslint-disable-next-line max-len */\n _this.tableFormat.preferredWidth = tableWidth / HelperMethods.convertPixelToPoint(_this.documentHelper.owner.viewer.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n _this.rowFormat.height = _this.rowHeightValue;\n }\n _this.documentHelper.owner.editorModule.initComplexHistory('TableProperties');\n _this.documentHelper.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.documentHelper.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.documentHelper.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.documentHelper.owner.editorHistory.updateComplexHistory();\n _this.closeTablePropertiesDialog();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.documentHelper.owner.cellOptionsDialogModule.cellFormat;\n _this.documentHelper.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.documentHelper.owner.tableOptionsDialogModule.tableFormat;\n _this.documentHelper.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.documentHelper.dialog2.open = _this.documentHelper.selection.hideCaret.bind(_this.documentHelper.owner.viewer);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTablePropertiesDialog = function () {\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.tableFormat.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.tableFormat.bidi = true;\n }\n if (_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Left') {\n _this.tableFormat.tableAlignment = 'Right';\n }\n else if (!_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Right') {\n _this.tableFormat.tableAlignment = 'Left';\n }\n _this.activeTableAlignment(_this.tableFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.documentHelper.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n var bidi = _this.tableFormat.bidi || _this.rtlButton.checked;\n if ((element.classList.contains('e-de-table-left-alignment') && !bidi) ||\n (element.classList.contains('e-de-table-right-alignment') && bidi)) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.documentHelper.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n * @param {Event} event - Specified the event\n * @returns {void}\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n *\n * @returns {void}\n */\n this.showTableOptionsDialog = function () {\n _this.documentHelper.owner.tableOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.documentHelper.owner.bordersAndShadingDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showCellOptionsDialog = function () {\n _this.documentHelper.owner.cellOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"paraFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.paraFormatIn = new WParagraphFormat();\n return this.paraFormatIn;\n }\n return this.paraFormatIn;\n },\n set: function (value) {\n this.paraFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue, isRtl) {\n this.localValue = localValue;\n var id = this.documentHelper.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n var items = [\n { header: { text: tableHeader }, content: tableContent },\n { header: { text: rowHeader }, content: rowContent },\n { header: { text: cellHeader }, content: cellContent }\n ];\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableRowProperties(this.rowTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableCellProperties(this.cellTab, localValue, this.documentHelper.owner.enableRtl);\n this.tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n this.tabObj.isStringTemplate = true;\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[i].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[i].addEventListener('click', this.changeCellAlignment);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog2.header = localValue.getConstant('Table Properties');\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.animationSettings = { effect: 'None', duration: 400, delay: 0 };\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.beforeOpen = this.onBeforeOpen;\n this.documentHelper.dialog2.close = this.onCloseTablePropertyDialog;\n this.documentHelper.dialog2.open = this.wireEvent.bind(this);\n this.documentHelper.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.show();\n var dialogElement = this.documentHelper.dialog2.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n /**\n * @private\n * @param {TableWidget} table - Specifies the table widget.\n * @returns {void}\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.documentHelper.owner.editorHistory;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n if (!this.documentHelper.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.documentHelper.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.documentHelper.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.documentHelper.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue, isRtl) {\n var container = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeHeader = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentContainer: HTMLDivElement = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredWidthDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredWidth = createElement('input');\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var tableWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLInputElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // });\n var alignment = createElement('div', { className: 'e-de-dlg-row' });\n var alignmentContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dlg-alignment-heading'\n });\n var alignmentSubContainer = createElement('div', { className: 'e-de-container-row' });\n var classDivName = element.id + 'e-de-table-alignment e-de-table-dialog-alignment-icon';\n var leftDiv = createElement('div');\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n this.right = createElement('div', {\n //styles: 'width:54px;height:54px;margin:2px', \n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName,\n id: element.id + '_right_alignment'\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n // let leftIndentLabelMargin: string;\n // let leftIndentBoxMargin: string;\n // if (isRtl) {\n // leftIndentLabelMargin = 'left: 45px;';\n // leftIndentBoxMargin = 'left: 45px;';\n // } else {\n // leftIndentLabelMargin = 'right: 45px;';\n // leftIndentBoxMargin = 'right: 45px;';\n // }\n // this.indentingLabel = createElement('label', {\n // innerHTML: localValue.getConstant('Indent from left'),\n // //styles: leftIndentLabelMargin,\n // className: 'e-de-tbl-indent-lbl'\n // }) as HTMLLabelElement;\n // const leftIndentBox: HTMLDivElement = createElement('div', {\n // styles: 'margin-top: 15px;position: relative;' + leftIndentBoxMargin\n // });\n this.leftIndent = createElement('input');\n var tableDirHeader = createElement('div', {\n innerHTML: localValue.getConstant('Table direction'), className: 'e-de-para-dlg-heading'\n });\n var tableDirContainer = createElement('div', { className: 'e-de-dlg-row' });\n var rtlDiv = createElement('div', { className: 'e-de-tbl-rtl-btn-div' });\n var rtlInputELe = createElement('input');\n rtlDiv.appendChild(rtlInputELe);\n tableDirContainer.appendChild(rtlDiv);\n var ltrDiv = createElement('div', { className: 'e-de-tbl-ltr-btn-div' });\n var ltrInputELe = createElement('input');\n ltrDiv.appendChild(ltrInputELe);\n tableDirContainer.appendChild(ltrDiv);\n this.rtlButton = new RadioButton({\n label: localValue.getConstant('Right-to-left'),\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.rtlButton.appendTo(rtlInputELe);\n this.ltrButton = new RadioButton({\n label: localValue.getConstant('Left-to-right'),\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.ltrButton.appendTo(ltrInputELe);\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n // if (isRtl) {\n // tableOptionContiner.style.cssFloat = 'left';\n // }\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading') + '...',\n className: 'e-control e-btn e-de-ok-button',\n attrs: { type: 'button' }\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn', innerHTML: localValue.getConstant('Options') + '...',\n attrs: { type: 'button' }\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(this.leftIndent);\n alignmentSubContainer.appendChild(leftDiv);\n alignmentContainer.appendChild(alignmentHeader);\n leftDiv.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(alignmentSubContainer);\n alignmentSubContainer.appendChild(centerAlignDiv);\n alignmentSubContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignment.appendChild(alignmentContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n container.appendChild(childContainer1);\n preferredWidthDiv.appendChild(this.preferredWidth);\n container.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n alignment.appendChild(leftIndenetContainer);\n childContainer2.appendChild(preferredWidthDiv);\n childContainer2.appendChild(controlDiv);\n element.appendChild(alignment);\n element.appendChild(tableDirHeader);\n element.appendChild(tableDirContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: localValue.getConstant('Indent from left')\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width'), enableRtl: isRtl\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n this.tableWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in') });\n this.tableWidthType.appendTo(tableWidthType);\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n //childContainer2.classList.add('e-de-rtl');\n leftIndenetContainer.classList.add('e-de-rtl');\n tableOptionContiner.classList.add('e-de-rtl');\n //this.bordersAndShadingButton.classList.add('e-de-rtl');\n leftAlignDiv.classList.add('e-de-rtl');\n centerAlignDiv.classList.add('e-de-rtl');\n rightAlignDiv.classList.add('e-de-rtl');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n //const table: TableWidget = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.documentHelper.owner.viewer.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.documentHelper.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.documentHelper.owner.viewer);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.activeTableAlignment(tableFormat, false);\n if (tableFormat.bidi) {\n this.rtlButton.checked = true;\n this.ltrButton.checked = false;\n }\n else {\n this.ltrButton.checked = true;\n this.rtlButton.checked = false;\n }\n };\n TablePropertiesDialog.prototype.activeTableAlignment = function (tableFormat, isChanged) {\n var tableAlignment = isChanged ? this.tableFormat.tableAlignment : undefined;\n // Consider the TableAlignment based on the Bidirectional property.\n if (isNullOrUndefined(tableAlignment)) {\n if (tableFormat.bidi) {\n if (tableFormat.tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableFormat.tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n else {\n tableAlignment = tableFormat.tableAlignment;\n }\n }\n if (tableFormat.bidi) {\n this.leftIndentBox.enabled = tableAlignment === 'Right';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from right');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from right');\n }\n else {\n this.leftIndentBox.enabled = tableAlignment === 'Left';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from left');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from left');\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableAlignment === 'Left') {\n classList(this.left, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Center') {\n classList(this.center, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Right') {\n classList(this.right, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n * @returns {string} Resturns table alignment\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return this.ltrButton.checked ? 'Left' : 'Right';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return this.ltrButton.checked ? 'Right' : 'Left';\n }\n }\n }\n return undefined;\n };\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentDiv: HTMLDivElement = createElement('div');\n // let childDiv1Float: string;\n // if (isRtl) {\n // childDiv1Float = 'float: right;';\n // } else {\n // childDiv1Float = 'float: left;';\n // }\n var childDiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var rowHeightDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n //const child3: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const child4: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const controlDiv: HTMLDivElement = createElement('div', {className: 'e-de-subcontainer-right'}) as HTMLDivElement;\n var rowHeightType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Row height is'),\n // className: 'e-de-table-measure-lbl'\n // });\n sizeDiv.appendChild(sizeLabeldiv);\n element.appendChild(sizeDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n sizeDiv.appendChild(childDiv1);\n childdiv2.appendChild(rowHeightDiv);\n sizeDiv.appendChild(childdiv2);\n rowHeightDiv.appendChild(this.rowHeight);\n controlDiv.appendChild(rowHeightType);\n childdiv2.appendChild(controlDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-de-para-dlg-heading'\n });\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height'),\n enableRtl: isRtl\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n this.rowHeightType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Row height is') });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages'),\n enableRtl: isRtl\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page'),\n enableRtl: isRtl\n });\n this.repeatHeader.appendTo(repeatHeader);\n // if (isRtl) {\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // childdiv2.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.documentHelper.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n var enabledHeader = this.enableRepeatHeader() ? false : true;\n if (isNullOrUndefined(this.documentHelper.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.documentHelper.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n * @returns {boolean} Returns enable repeat header\n */\n TablePropertiesDialog.prototype.enableRepeatHeader = function () {\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n return startCell.ownerRow.index === 0 && endCell.ownerTable.equals(startCell.ownerTable);\n };\n //#endregion\n //#region Cell Format\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-para-dlg-heading',\n });\n //const parentdiv: HTMLDivElement = createElement('div');\n // let childdiv1Float: string;\n // if (isRtl) {\n // childdiv1Float = 'float: right';\n // } else {\n // childdiv1Float = 'float: left';\n // }\n var childdiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredCellDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredCellWidth = createElement('input', {\n attrs: { 'type': 'text' }\n });\n // let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n //const child3: HTMLDivElement = createElement('div');\n // let child4Float: string;\n // if (isRtl) {\n // child4Float = 'float: left;';\n // } else {\n // child4Float = 'float: right;';\n // }\n //const child4: HTMLDivElement = createElement('div');\n //const controlDiv: HTMLDivElement = createElement('div') as HTMLDivElement;\n var cellWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // }) as HTMLLabelElement;\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n sizeDiv.appendChild(childdiv1);\n preferredCellDiv.appendChild(this.preferredCellWidth);\n sizeDiv.appendChild(childdiv2);\n childdiv2.appendChild(preferredCellDiv);\n childdiv2.appendChild(controlDiv);\n controlDiv.appendChild(cellWidthType);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n className: 'e-de-para-dlg-heading'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment e-de-tablecell-dialog-alignment-icon';\n var divAlignment = createElement('div', {\n className: 'e-de-container-row'\n });\n var topDiv = createElement('div');\n //const divStyle: string = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n var centerAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n var bottomAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-control e-btn', attrs: { type: 'button' }\n });\n this.cellOptionButton.style.cssFloat = isRtl ? 'left' : 'right';\n divAlignment.appendChild(topDiv);\n topDiv.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width'), enableRtl: isRtl });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n this.cellWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in') });\n this.cellWidthType.appendTo(cellWidthType);\n // if (isRtl) {\n // childdiv2.classList.add('e-de-rtl');\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // this.cellOptionButton.classList.add('e-de-rtl');\n // topAlignDiv.classList.add('e-de-rtl');\n // centerAlignDiv.classList.add('e-de-rtl');\n // bottomAlignDiv.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.documentHelper.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n classList(this.cellTopAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n classList(this.cellCenterAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n classList(this.cellBottomAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[j];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n };\n /**\n * @private\n * @returns {string} - Returns the alignement.\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.documentHelper.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n *\n * @returns {void}\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.documentHelper = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n if (this.tableFormatIn) {\n this.tableFormatIn.destroy();\n }\n if (this.cellFormatIn) {\n this.cellFormatIn.destroy();\n }\n this.tableFormatIn = undefined;\n this.cellFormatIn = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { classList, createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BordersAndShadingDialog(documentHelper) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.isShadingChanged = false;\n /**\n * @private\n * @returns {void}\n */\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.documentHelper.owner.tablePropertiesDialogModule;\n var selectedCell = _this.documentHelper.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder('top');\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder('bottom');\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder('left');\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder('right');\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder('horizontal');\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder('vertical');\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder('diagonalDown');\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder('diagonalUp');\n }\n }\n var shading = new WShading();\n var editorModule = _this.documentHelper.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.value === 'Cell') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Table') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n var currentTableFormat = _this.documentHelper.owner.selection.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n _this.isShadingChanged = currentTableFormat.shading.backgroundColor !== shading.backgroundColor;\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Paragraph') {\n var isNoneBorder = _this.noneDiv.classList.contains('e-de-table-border-inside-setting-click');\n if (!isNullOrUndefined(_this.paragraphFormat)) {\n editorModule.applyBordersInternal(_this.paragraphFormat.borders, isNoneBorder ? new WBorders() : borders);\n }\n else {\n editorModule.onApplyParagraphFormat('borders', isNoneBorder ? new WBorders() : borders, false, false);\n }\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeBordersShadingsDialog = function () {\n _this.paragraphFormat = undefined;\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n // let targetDiv: HTMLDivElement;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n if (_this.ulelementShading.value === 'Paragraph') {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n }\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n // const tableBorderDialog: HTMLElement = this.target;\n var tableBorderDialogId = _this.target.id;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellPreviewBoxes = function () {\n //this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.value === 'Cell') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else if (_this.ulelementShading.value === 'Table') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.visibility = 'visible';\n _this.previewDivTopCenterContainer.style.visibility = 'visible';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else {\n _this.shadingColorPicker.disabled = true;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewLeftDiagonalDiv.style.display = 'none';\n _this.previewRightDiagonalDiv.style.display = 'none';\n classList(_this.noneDivTransparent, ['e-de-para-border-none-setting'], ['e-de-table-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-para-border-box-setting'], ['e-de-table-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-para-border-shadow-setting'], ['e-de-table-border-all-setting']);\n classList(_this.customDivTransparent, ['e-de-para-border-custom-setting'], ['e-de-table-border-custom-setting']);\n }\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.documentHelper = documentHelper;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n * @param {L10n} localeValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'),\n className: 'e-de-table-border-heading'\n });\n var settingAndPreviewContainer = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var settingsContiner = createElement('div', {});\n var styleContainer = createElement('div', {});\n var previewContiner = createElement('div', {\n className: 'e-de-table-border-preview-container'\n });\n var previewSubContainer1 = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var previewSubContainer2 = createElement('div', {});\n var styleSubContainer = createElement('div', {\n className: 'e-de-container-row'\n });\n var dropdownListDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var dropDownList = createElement('select', {});\n dropDownList.innerHTML = '';\n var widthcontainerDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var widthNumericDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var widthNumeric = createElement('input', {});\n var colorDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'),\n className: 'e-de-table-border-clr-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'),\n className: 'e-de-table-setting-heading'\n });\n var settingsSubContiner = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container',\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container',\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container',\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container',\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n if (isRtl) {\n this.noneDivTransparent.classList.add('e-de-rtl');\n this.boxDivTransparent.classList.add('e-de-rtl');\n this.allDivTransparent.classList.add('e-de-rtl');\n this.customDivTransparent.classList.add('e-de-rtl');\n }\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading',\n });\n this.previewDiv = createElement('div', {\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div',\n styles: 'position: relative'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:111px;left: 38px;top: -17px;transform: rotate(135deg); background-color: black',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 111px;left: 38px;top: -17px;transform:rotate(45deg); background-color: black',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 80px;position: absolute;left: 39px;top: -1px; background-color: black',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 80px;height: 1px;position: absolute;left: -1px;top: 41px; background-color: black',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n var previewDivVerticalContainer = createElement('div');\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'margin-top: 0',\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n var previewDivHorizontalContainer = createElement('div', { className: 'e-de-dlg-row' });\n this.previewDivBottomLeftContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {});\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading',\n });\n var shadings = createElement('div', { className: 'e-de-dlg-row' });\n var colorPickerDiv = createElement('div', { className: 'e-de-table-border-clr-left-container' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-border-clr-heading',\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color',\n });\n var shdApply = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var ulelementShading = createElement('input', {\n id: this.target.id + '_shading'\n });\n var ulelementShadingValue = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell ') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n shdApply.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(settingsSubContiner);\n settingsSubContiner.appendChild(noneDivContainer);\n settingsSubContiner.appendChild(boxDivContainer);\n settingsSubContiner.appendChild(allDivContainer);\n settingsSubContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(previewSubContainer1);\n previewSubContainer1.appendChild(previewDivVerticalContainer);\n previewSubContainer1.appendChild(previewSubContainer2);\n previewSubContainer2.appendChild(this.previewDiv);\n previewSubContainer2.appendChild(previewDivHorizontalContainer);\n this.previewDiv.appendChild(this.previewLeftDiagonalDiv);\n this.previewDiv.appendChild(this.previewRightDiagonalDiv);\n this.previewDiv.appendChild(this.previewHorizontalDiv);\n this.previewDiv.appendChild(this.previewVerticalDiv);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomLeftContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomcenterContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomRightContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivDiagonalRightContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopTopContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopCenterContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopBottomContainer);\n previewDivVerticalContainer.appendChild(this.previewDivLeftDiagonalContainer);\n shadings.appendChild(colorPickerDiv);\n colorPickerDiv.appendChild(label);\n colorPickerDiv.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleSubContainer);\n styleSubContainer.appendChild(dropdownListDiv);\n dropdownListDiv.appendChild(dropDownList);\n styleContainer.appendChild(widthcontainerDiv);\n widthcontainerDiv.appendChild(widthNumericDiv);\n widthNumericDiv.appendChild(widthNumeric);\n widthcontainerDiv.appendChild(colorDiv);\n colorDiv.appendChild(colorText);\n colorDiv.appendChild(borderColorPickerElement);\n settingAndPreviewContainer.appendChild(settingsContiner);\n settingAndPreviewContainer.appendChild(previewContiner);\n this.target.appendChild(displayText);\n this.target.appendChild(settingAndPreviewContainer);\n this.target.appendChild(styleContainer);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0, min: 0, max: 6, decimals: 2,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Width'),\n enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n this.borderStyle = new DropDownList({\n popupHeight: '150px', index: 1,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Style'),\n enableRtl: isRtl\n });\n this.borderStyle.appendTo(dropDownList);\n this.ulelementShading = new DropDownList({\n dataSource: ulelementShadingValue,\n fields: { text: 'Name', value: 'Value' },\n change: this.applyTableCellPreviewBoxes, index: 1,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Apply To'),\n enableRtl: isRtl\n });\n this.ulelementShading.appendTo(ulelementShading);\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker'\n });\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#FFFFFF', change: this.applyPreviewTableBackgroundColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker'\n });\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n if (isRtl) {\n label.classList.add('e-de-rtl');\n }\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n // const selection: Selection = this.documentHelper.selection;\n var editorModule = this.documentHelper.owner.editorModule;\n if (this.ulelementShading.value !== 'Paragraph') {\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.ulelementShading.value === 'Cell') {\n editorModule.onCellFormat(this.cellFormat);\n }\n else if (this.ulelementShading.value === 'Table') {\n editorModule.onTableFormat(this.tableFormat, this.isShadingChanged);\n }\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function (type) {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.text;\n border.lineWidth = this.borderWidth.value;\n if (type === 'left' || type === 'right') {\n border.space = 4;\n }\n else {\n border.space = 1;\n }\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadBordersShadingsPropertiesDialog(localeValue);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.header = localeValue.getConstant('Borders and Shading');\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.closeBordersShadingsDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[j].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[j].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[j].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n else {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n }\n else {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ele.style[property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[property] = 'block';\n }\n else {\n ele.style[property] = 'none';\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function (localeValue) {\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(this.documentHelper.selection.tableFormat.table)) {\n this.shadingContiner.style.display = 'block';\n this.ulelementShading.dataSource = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var tableFormat = this.documentHelper.selection.tableFormat.table.tableFormat;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n this.cloneBorders(tableFormat.borders);\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n this.ulelementShading.value = 'Table';\n this.shadingColorPicker.value = fillColor;\n this.shadingColorPicker.disabled = false;\n }\n }\n else {\n this.shadingContiner.style.display = 'none';\n this.ulelementShading.dataSource = [\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var paraFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n this.ulelementShading.value = 'Paragraph';\n this.cloneBorders(paraFormat.borders);\n var border = this.getSelectionBorderFormat();\n if (!border.hasValues()) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0.5;\n }\n else {\n lineStyle = this.getLineStyle(border.lineStyle);\n borderColor = border.color;\n borderWidth = border.lineWidth;\n }\n this.shadingColorPicker.disabled = true;\n }\n this.borderColorPicker.value = borderColor;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n BordersAndShadingDialog.prototype.getSelectionBorderFormat = function () {\n var border = new WBorder();\n var borders = this.documentHelper.selection.paragraphFormat.borders;\n if (borders.top.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.top);\n }\n else if (borders.left.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.left);\n }\n else if (borders.bottom.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.bottom);\n }\n else if (borders.right.lineStyle !== \"None\") {\n return this.copyToBorder(border, borders.right);\n }\n return border;\n };\n BordersAndShadingDialog.prototype.copyToBorder = function (border, selectionBorder) {\n if (!isNullOrUndefined(selectionBorder.lineStyle)) {\n border.lineStyle = selectionBorder.lineStyle;\n }\n if (!isNullOrUndefined(selectionBorder.color)) {\n border.color = selectionBorder.color;\n }\n if (!isNullOrUndefined(selectionBorder.lineWidth)) {\n border.lineWidth = selectionBorder.lineWidth;\n }\n return border;\n };\n /* eslint-disable */\n BordersAndShadingDialog.prototype.cloneBorders = function (borders) {\n var topBorder = false;\n var bottomBorder = false;\n var leftBorder = false;\n var rightBorder = false;\n var horizontalBorder = false;\n var verticalBorder = false;\n var diagonalDownBorder = false;\n var customBorder = false;\n var diagonalUpBorder = false;\n if (borders !== null) {\n if (borders.top && (borders.top.hasNoneStyle || borders.top.lineStyle !== 'None')) {\n topBorder = true;\n }\n if (borders.bottom && (borders.bottom.hasNoneStyle || borders.bottom.lineStyle !== 'None')) {\n bottomBorder = true;\n }\n if (borders.left && (borders.left.hasNoneStyle || borders.left.lineStyle !== 'None')) {\n leftBorder = true;\n }\n if (borders.right && (borders.right.hasNoneStyle || borders.right.lineStyle !== 'None')) {\n rightBorder = true;\n }\n if (borders.horizontal && (borders.horizontal.hasNoneStyle || borders.horizontal.lineStyle !== 'None')) {\n horizontalBorder = true;\n }\n if (borders.vertical && (borders.vertical.hasNoneStyle || borders.vertical.lineStyle !== 'None')) {\n verticalBorder = true;\n }\n if (borders.diagonalDown && (borders.diagonalDown.hasNoneStyle || borders.diagonalDown.lineStyle !== 'None')) {\n diagonalDownBorder = true;\n }\n if (borders.diagonalUp && (borders.diagonalUp.hasNoneStyle || borders.diagonalUp.lineStyle !== 'None')) {\n diagonalUpBorder = true;\n }\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder)) {\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder || !horizontalBorder\n || !verticalBorder || diagonalUpBorder || diagonalDownBorder)) {\n if ((topBorder && bottomBorder && leftBorder && rightBorder && horizontalBorder && verticalBorder\n && !diagonalUpBorder && !diagonalDownBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('all');\n this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n }\n else if ((leftBorder && bottomBorder && topBorder && rightBorder && !horizontalBorder && !verticalBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('box');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else {\n customBorder = true;\n }\n }\n else {\n customBorder = true;\n }\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n if (!topBorder && !bottomBorder && !leftBorder && !rightBorder && !horizontalBorder && !verticalBorder) {\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else if (customBorder) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '0px';\n }\n }\n if (verticalBorder) {\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (horizontalBorder) {\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n }\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 1;\n case 'Dot': return 2;\n case 'DashSmallGap': return 3;\n case 'DashLargeGap': return 4;\n case 'DashDot': return 5;\n case 'DashDotDot': return 6;\n case 'Double': return 7;\n case 'Triple': return 8;\n case 'ThinThickSmallGap': return 9;\n case 'ThickThinSmallGap': return 10;\n case 'ThinThickThinSmallGap': return 11;\n case 'ThinThickMediumGap': return 12;\n case 'ThickThinMediumGap': return 13;\n case 'ThinThickThinMediumGap': return 14;\n case 'ThinThickLargeGap': return 15;\n case 'ThickThinLargeGap': return 16;\n case 'ThinThickThinLargeGap': return 17;\n case 'SingleWavy': return 18;\n case 'DoubleWavy': return 19;\n case 'DashDotStroked': return 20;\n case 'Emboss3D': return 21;\n case 'Engrave3D': return 22;\n case 'Outset': return 23;\n case 'Inset': return 24;\n case 'Thick': return 25;\n }\n return 0;\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n if (!isNullOrUndefined(this.borderColorPicker)) {\n this.borderColorPicker.destroy();\n }\n this.borderColorPicker = undefined;\n if (!isNullOrUndefined(this.shadingColorPicker)) {\n this.shadingColorPicker.destroy();\n }\n this.shadingColorPicker = undefined;\n if (!isNullOrUndefined(this.ulelementShading)) {\n this.ulelementShading.destroy();\n }\n this.ulelementShading = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.noneDiv = undefined;\n this.customDiv = undefined;\n this.allDiv = undefined;\n this.boxDiv = undefined;\n this.documentHelper = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.documentHelper.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n * @returns {WTableFormat} - Returns table format.\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default cell margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, false);\n var div = createElement('div');\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default cell spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6Padding;\n if (isRtl) {\n td6Padding = 'padding-right:25px;';\n }\n else {\n td6Padding = 'padding-left:25px;';\n }\n var td6 = createElement('td', { styles: td6Padding });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 174,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow spacing between cells'),\n change: this.changeAllowSpaceCheckBox,\n enableRtl: isRtl,\n cssClass: 'e-de-tbl-margin-sub-header'\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat) {\n this.documentHelper.owner.editorHistory.initComplexHistory(this.documentHelper.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat);\n };\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat) {\n this.documentHelper.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat);\n };\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat) {\n var ownerTable = this.documentHelper.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.documentHelper.owner.viewer);\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentBaseHistoryInfo)) {\n this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies the table format\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n if (this.allowSpaceCheckBox.checked) {\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n documentLocale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = documentLocale.getConstant('Table Options');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n // this.documentHelper.dialog.cssClass = 'e-de-table-margin-size';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function CellOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.documentHelper.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n * @returns {WCellFormat} - Returns cell format.\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue, isRtl) {\n this.owner = this.documentHelper.owner.viewer;\n this.target = createElement('div', {\n className: 'e-de-table-cell-margin-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'padding-bottom: 8px;padding-top: 8px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-separator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, true);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable,\n enableRtl: isRtl\n });\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localizeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = localizeValue.getConstant('Cell Options');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n * @param {WCellFormat} cellFormat Specifies cell format.\n * @returns {void}\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.documentHelper.owner.editorHistory.initComplexHistory(this.documentHelper.selection, 'CellMarginsSelection');\n this.documentHelper.owner.editorModule.initHistory('CellOptions');\n /* eslint-disable max-len */\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner);\n this.applyCellMarginValue(this.documentHelper.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.documentHelper.selection.start, this.documentHelper.selection.end, cellFormat);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection, false);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n };\n CellOptionsDialog.prototype.applyCellMarginValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellMarginValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistory.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* eslint-disable max-len */\n cellFormat = this.documentHelper.owner.editorHistory.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[i].cellFormat, cellFormat);\n }\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var y = 0; y < this.target.childNodes.length; y++) {\n this.target.removeChild(this.target.childNodes[y]);\n y--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n * @param {CellOptionsDialog | TableOptionsDialog} dialog - Specifies cell options dialog.\n * @param {HTMLDivElement} div - Specifies the html element.\n * @param {L10n} locale - Specifies the locale\n * @returns {void}\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale, cellOptions) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('div');\n var tr1 = createElement('div', { className: 'e-de-container-row' });\n var td1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td1.appendChild(topTextBox);\n var td2 = createElement('div', { className: 'e-de-subcontainer-right' });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('div', { className: cellOptions ? 'e-de-dlg-row' : 'e-de-container-row' });\n var td3 = createElement('div', { className: 'e-de-subcontainer-left' });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td3.appendChild(bottomTextBox);\n var td4 = createElement('div', { className: 'e-de-subcontainer-right' });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Top'),\n floatLabelType: 'Always'\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Left'),\n floatLabelType: 'Always'\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Bottom'),\n floatLabelType: 'Always'\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Right'),\n floatLabelType: 'Always'\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StylesDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.modifyStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.styleName = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.addNewStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show();\n };\n this.documentHelper = documentHelper;\n }\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string[]} styles - Specifies the styles.\n * @param {boolean} isRtl - Specifies the is rtl.\n * @returns {void}\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-de-para-dlg-heading' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview'\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('New') + '...', id: 'new',\n attrs: { type: 'button' }\n });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var styles = this.updateStyleNames();\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles, this.documentHelper.owner.enableRtl);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.header = localValue.getConstant('Styles');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n StylesDialog.prototype.updateStyleNames = function () {\n var collection = this.documentHelper.owner.documentHelper.styles.getStyleNames('Paragraph');\n var styleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var defaultStyleNames = this.defaultStyleName(styleNames);\n var finalList = collection.concat(defaultStyleNames).filter(function (v, i, a) { return a.indexOf(v) === i; });\n return finalList;\n };\n StylesDialog.prototype.defaultStyleName = function (styleNames) {\n var styleName = [];\n for (var index = 0; index < styleNames.length; index++) {\n styleName.push(styleNames[index]);\n }\n return styleName;\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.hideObjects = function () {\n this.documentHelper.dialog.hide();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n this.styleName = undefined;\n this.localValue = undefined;\n this.target = undefined;\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","/* eslint-disable */\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextElementBox, ErrorTextElementBox } from '../viewer/page';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Spell check dialog\n */\nvar SpellCheckDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function SpellCheckDialog(documentHelper) {\n var _this = this;\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.selectedText = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.clearSelectionHighlight();\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.manageReplace('Ignore Once', _this.elementBox);\n _this.removeErrors();\n _this.parent.spellChecker.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreAllClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n var text = _this.elementBox.text;\n _this.parent.spellChecker.handleIgnoreAllItems({ element: _this.elementBox, text: text });\n _this.parent.spellChecker.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.addToDictClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.handleAddToDictionary({ element: _this.elementBox, text: _this.elementBox.text });\n if (_this.parent.spellChecker.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellChecker.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellChecker.manageReplace(_this.selectedText, _this.elementBox);\n _this.removeErrors();\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.dialog.content = '';\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n showSpinner(_this.documentHelper.dialog.element);\n var elements = _this.parent.spellChecker.errorWordCollection.get(_this.errorText);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] instanceof ErrorTextElementBox && !elements[i].ischangeDetected) {\n _this.parent.spellChecker.manageReplace(_this.selectedText, elements[i]);\n }\n else if (elements[i] instanceof TextElementBox) {\n var matchResults = _this.parent.spellChecker.getMatchedResultsFromElement(elements[i]);\n var results = matchResults.textResults;\n var markIndex = (elements[i].ischangeDetected) ?\n elements[i].start.offset : elements[i].line.getOffset(elements[i], 0);\n _this.parent.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, elements[i], false, null, markIndex);\n for (var j = 0; j < results.length; j++) {\n var element = _this.parent.spellChecker.createErrorElementWithInfo(results.innerList[j], elements[i]);\n _this.parent.spellChecker.manageReplace(_this.selectedText, element);\n }\n }\n }\n if (_this.parent.spellChecker.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellChecker.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellChecker.checkForNextError();\n _this.documentHelper.dialog.content = '';\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n this.documentHelper = documentHelper;\n createSpinner({ target: this.documentHelper.dialog.element, cssClass: 'e-spin-overlay' });\n }\n Object.defineProperty(SpellCheckDialog.prototype, \"parent\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SpellCheckDialog.prototype.getModuleName = function () {\n return 'SpellCheckDialog';\n };\n SpellCheckDialog.prototype.removeErrors = function () {\n if (!isNullOrUndefined(this.errorText) && this.parent.spellChecker.errorWordCollection.containsKey(this.errorText)) {\n var textElement = this.parent.spellChecker.errorWordCollection.get(this.errorText);\n textElement.splice(0, 1);\n if (textElement.length === 0) {\n this.parent.spellChecker.errorWordCollection.remove(this.errorText);\n }\n }\n if (this.parent.spellChecker.errorWordCollection.length === 0) {\n this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.show = function (error, elementbox) {\n this.target = undefined;\n this.localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.updateSuggestionDialog(error, elementbox);\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.updateSuggestionDialog = function (error, elementBox) {\n var _this = this;\n this.elementBox = elementBox;\n var suggestions;\n if (this.isSpellChecking) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.parent.spellChecker.callSpellChecker(this.parent.spellChecker.languageID, error, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n suggestions = jsonObject.Suggestions;\n _this.isSpellChecking = false;\n _this.handleRetrievedSuggestion(error, suggestions);\n });\n }\n else {\n error = this.parent.spellChecker.manageSpecialCharacters(error, undefined, true);\n suggestions = this.parent.spellChecker.errorSuggestions.containsKey(error) ?\n this.parent.spellChecker.errorSuggestions.get(error) : [];\n this.handleRetrievedSuggestion(error, suggestions);\n }\n };\n SpellCheckDialog.prototype.handleRetrievedSuggestion = function (error, suggestions) {\n error = this.parent.spellChecker.manageSpecialCharacters(error, undefined, true);\n this.initSpellCheckDialog(this.localValue, error, suggestions);\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = this.localValue.getConstant('Spelling Editor');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localValue.getConstant('Cancel'), cssClass: 'e-control e-flat', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n hideSpinner(this.documentHelper.dialog.element);\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string} error - Specifies the error text.\n * @param {string[]} suggestion - Specifies the suggestion.\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n SpellCheckDialog.prototype.initSpellCheckDialog = function (localValue, error, suggestion, isRtl) {\n var id = this.documentHelper.owner.containerId + '_add_SpellCheck';\n this.target = createElement('div', { id: id, className: 'e-de-insert-spellchecker' });\n this.errorText = error;\n var textContainer = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Spelling')\n });\n this.target.appendChild(textContainer);\n var spellContainer = createElement('div', { className: 'e-de-spellcheck-error-container' });\n var listviewDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n spellContainer.appendChild(listviewDiv);\n this.spellingListView = new ListView({\n dataSource: [error],\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.spellingListView.appendTo(listviewDiv);\n var buttonDiv = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n spellContainer.appendChild(buttonDiv);\n var ignoreButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore') });\n buttonDiv.appendChild(ignoreButtonElement);\n var ignorebutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignorebutton.appendTo(ignoreButtonElement);\n ignoreButtonElement.addEventListener('click', this.onIgnoreClicked);\n var ignoreAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore All') });\n buttonDiv.appendChild(ignoreAllButtonElement);\n var ignoreAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignoreAllbutton.appendTo(ignoreAllButtonElement);\n ignoreAllButtonElement.addEventListener('click', this.onIgnoreAllClicked);\n var addDictButtonElement = createElement('button', { innerHTML: localValue.getConstant('Add to Dictionary') });\n buttonDiv.appendChild(addDictButtonElement);\n var addDictButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n addDictButton.appendTo(addDictButtonElement);\n addDictButtonElement.addEventListener('click', this.addToDictClicked);\n this.target.appendChild(spellContainer);\n var suggestionDiv = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Suggestions')\n });\n this.target.appendChild(suggestionDiv);\n var suggestionContainer = createElement('div', { className: 'e-de-spellcheck-suggestion-container' });\n this.target.appendChild(suggestionContainer);\n var suggestListDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n suggestionContainer.appendChild(suggestListDiv);\n this.suggestionListView = new ListView({\n dataSource: suggestion,\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.suggestionListView.appendTo(suggestListDiv);\n this.suggestionListView.addEventListener('select', this.selectHandler);\n var suggestBtnContainder = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n suggestionContainer.appendChild(suggestBtnContainder);\n var changeButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change') });\n suggestBtnContainder.appendChild(changeButtonElement);\n var changeButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeButton.appendTo(changeButtonElement);\n changeButtonElement.addEventListener('click', this.changeButtonClicked);\n var changeAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change All') });\n suggestBtnContainder.appendChild(changeAllButtonElement);\n var changeAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeAllbutton.appendTo(changeAllButtonElement);\n changeAllButtonElement.addEventListener('click', this.changeAllButtonClicked);\n if (isNullOrUndefined(suggestion) || suggestion.length === 0) {\n changeButton.disabled = true;\n changeAllbutton.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n SpellCheckDialog.prototype.destroy = function () {\n if (this.target) {\n this.target.remove();\n this.target = undefined;\n }\n if (this.elementBox) {\n this.elementBox.destroy();\n this.elementBox = undefined;\n }\n this.documentHelper = undefined;\n if (this.spellingListView) {\n this.spellingListView.destroy();\n this.spellingListView = undefined;\n }\n if (this.suggestionListView) {\n this.suggestionListView.destroy();\n this.suggestionListView = undefined;\n }\n };\n return SpellCheckDialog;\n}());\nexport { SpellCheckDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, CheckBoxFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\n/**\n * Form field checkbox dialog is used to modify the value in checkbox form field.\n */\nvar CheckBoxFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function CheckBoxFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'exact') {\n _this.autoButton.checked = !_this.exactButton.checked;\n _this.exactlyNumber.enabled = true;\n }\n else {\n _this.exactButton.checked = !_this.autoButton.checked;\n _this.exactlyNumber.enabled = false;\n }\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirect = function (event) {\n if (event.value === 'check') {\n _this.notCheckedButton.checked = !_this.checkedButton.checked;\n }\n else {\n _this.checkedButton.checked = !_this.notCheckedButton.checked;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertCheckBoxField = function () {\n _this.closeCheckBoxField();\n var checkBoxField = new CheckBoxFormField();\n checkBoxField.defaultValue = _this.checkedButton.checked;\n checkBoxField.name = _this.bookmarkInputText.value;\n checkBoxField.helpText = _this.tooltipInputText.value;\n checkBoxField.checked = checkBoxField.defaultValue;\n checkBoxField.enabled = _this.checBoxEnableElement.checked;\n if (_this.exactButton.checked) {\n checkBoxField.sizeType = 'Exactly';\n checkBoxField.size = _this.exactlyNumber.value;\n }\n else {\n checkBoxField.sizeType = 'Auto';\n checkBoxField.size = 11;\n }\n _this.owner.editor.editFormField('CheckBox', checkBoxField);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCheckBoxField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(CheckBoxFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n CheckBoxFormFieldDialog.prototype.getModuleName = function () {\n return 'CheckBoxFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.initCheckBoxDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var headingLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Check box size')\n });\n var sizeParentDiv = createElement('div', { className: 'e-de-container-row' });\n var autoDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var exactDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var autoEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n var exactEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n this.autoButton = new RadioButton({\n label: localValue.getConstant('Auto'), cssClass: 'e-small', change: this.changeBidirectional, checked: true,\n enableRtl: isRtl\n });\n this.exactButton = new RadioButton({\n label: localValue.getConstant('Exactly'), value: 'exact', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.exactNumberDiv = createElement('div', { className: 'e-de-ff-chck-exact' });\n var exactNumber = createElement('input', { attrs: { 'type': 'text' } });\n this.exactlyNumber = new NumericTextBox({\n format: 'n', value: 10, min: 1, max: 1584, enablePersistence: false, enabled: false, cssClass: 'e-de-check-exactnumbr-width',\n enableRtl: isRtl\n });\n var defaultValueLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default value')\n });\n var defaultcheckDiv = createElement('div', { className: 'e-de-container-row' });\n var notcheckDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var checkDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var notcheckEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n var checkEle = createElement('input', { className: 'e-de-rtl-btn-div' });\n this.notCheckedButton = new RadioButton({\n label: localValue.getConstant('Not checked'), enableRtl: isRtl, cssClass: 'e-small', change: this.changeBidirect\n });\n this.checkedButton = new RadioButton({\n label: localValue.getConstant('Checked'), value: 'check', enableRtl: isRtl, cssClass: 'e-small',\n change: this.changeBidirect, checked: true\n });\n var fieldSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var settingsTotalDiv = createElement('div', { className: 'e-de-container-row' });\n var totalToolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var totalBookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n this.bookmarkInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var checkBoxEnableDiv = createElement('div');\n var checBoxEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.checBoxEnableElement = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Check box enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n autoDiv.classList.add('e-de-rtl');\n exactDiv.classList.add('e-de-rtl');\n this.exactNumberDiv.classList.add('e-de-rtl');\n notcheckDiv.classList.add('e-de-rtl');\n checkDiv.classList.add('e-de-rtl');\n totalToolTipDiv.classList.add('e-de-rtl');\n totalBookmarkDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(defaultValueLabel);\n dialogDiv.appendChild(defaultcheckDiv);\n defaultcheckDiv.appendChild(notcheckDiv);\n notcheckDiv.appendChild(notcheckEle);\n this.notCheckedButton.appendTo(notcheckEle);\n defaultcheckDiv.appendChild(checkDiv);\n checkDiv.appendChild(checkEle);\n this.checkedButton.appendTo(checkEle);\n dialogDiv.appendChild(headingLabel);\n dialogDiv.appendChild(sizeParentDiv);\n sizeParentDiv.appendChild(autoDiv);\n autoDiv.appendChild(autoEle);\n this.autoButton.appendTo(autoEle);\n sizeParentDiv.appendChild(exactDiv);\n exactDiv.appendChild(exactEle);\n this.exactButton.appendTo(exactEle);\n exactDiv.appendChild(this.exactNumberDiv);\n this.exactNumberDiv.appendChild(exactNumber);\n this.exactlyNumber.appendTo(exactNumber);\n dialogDiv.appendChild(fieldSettingsLabel);\n dialogDiv.appendChild(settingsTotalDiv);\n settingsTotalDiv.appendChild(totalToolTipDiv);\n settingsTotalDiv.appendChild(totalBookmarkDiv);\n totalToolTipDiv.appendChild(this.tooltipInputText);\n totalBookmarkDiv.appendChild(this.bookmarkInputText);\n dialogDiv.appendChild(checkBoxEnableDiv);\n checkBoxEnableDiv.appendChild(checBoxEnableEle);\n this.checBoxEnableElement.appendTo(checBoxEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInputText);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInputText);\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initCheckBoxDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadCheckBoxDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Check Box Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '400px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertCheckBoxField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.loadCheckBoxDialog = function () {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var fieldData = this.fieldBegin.formFieldData;\n if (!fieldData.defaultValue) {\n this.checkedButton.checked = false;\n this.notCheckedButton.checked = true;\n }\n else {\n this.checkedButton.checked = true;\n this.notCheckedButton.checked = false;\n }\n if (fieldData.sizeType !== 'Auto') {\n this.exactButton.checked = true;\n this.autoButton.checked = false;\n this.exactlyNumber.enabled = true;\n }\n else {\n this.autoButton.checked = true;\n this.exactButton.checked = false;\n this.exactlyNumber.enabled = false;\n }\n if (fieldData.size) {\n this.exactlyNumber.value = fieldData.size;\n }\n if (fieldData.enabled) {\n this.checBoxEnableElement.checked = true;\n }\n else {\n this.checBoxEnableElement.checked = false;\n }\n if (fieldData.name && fieldData.name !== '') {\n this.bookmarkInputText.value = fieldData.name;\n }\n else {\n this.bookmarkInputText.value = '';\n }\n if (fieldData.helpText && fieldData.helpText !== '') {\n this.tooltipInputText.value = fieldData.helpText;\n }\n else {\n this.tooltipInputText.value = '';\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.destroy = function () {\n var checkBoxDialogTarget = this.target;\n if (checkBoxDialogTarget) {\n if (checkBoxDialogTarget.parentElement) {\n checkBoxDialogTarget.parentElement.removeChild(checkBoxDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n if (this.autoButton) {\n this.autoButton.destroy();\n this.autoButton = undefined;\n }\n if (this.exactButton) {\n this.exactButton.destroy();\n this.exactButton = undefined;\n }\n if (this.notCheckedButton) {\n this.notCheckedButton.destroy();\n this.notCheckedButton = undefined;\n }\n if (this.checkedButton) {\n this.checkedButton.destroy();\n this.checkedButton = undefined;\n }\n this.bookmarkInputText = undefined;\n this.tooltipInputText = undefined;\n if (this.checBoxEnableElement) {\n this.checBoxEnableElement.destroy();\n this.checBoxEnableElement = undefined;\n }\n if (this.exactlyNumber) {\n this.exactlyNumber.destroy();\n this.exactlyNumber = undefined;\n }\n this.exactNumberDiv = undefined;\n };\n return CheckBoxFormFieldDialog;\n}());\nexport { CheckBoxFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, TextFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * Form field text dialog is used to modify the value in text form field.\n */\nvar TextFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function TextFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.updateTextFormtas = function () {\n var defautText = _this.updateFormats(_this.defaultTextInput.value);\n _this.defaultTextInput.value = !isNullOrUndefined(defautText) ? defautText : '';\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertTextField = function () {\n var valid = true;\n if (_this.typeDropDown.value === 'Date') {\n valid = _this.isValidDateFormat();\n }\n if (valid) {\n _this.updateTextFormtas();\n if (_this.defaultTextInput.value.length > _this.maxLengthNumber.value && !isNullOrUndefined(_this.maxLengthNumber.value) &&\n _this.maxLengthNumber.value !== 0) {\n DialogUtility.alert({\n content: 'The maximum length value must be equal or greater than the length of the default text.',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n var type = void 0;\n if (_this.typeDropDown.value === 'Date') {\n type = 'Date';\n }\n else if (_this.typeDropDown.value === 'Number') {\n type = 'Number';\n }\n else {\n type = 'Text';\n }\n var format = _this.textFormatDropDown.value;\n var formField = new TextFormField();\n formField.type = type;\n formField.defaultValue = _this.defaultTextInput.value;\n formField.maxLength = _this.maxLengthNumber.value;\n formField.format = !isNullOrUndefined(format) ? format : '';\n formField.name = _this.bookmarkTextInput.value;\n formField.helpText = _this.tooltipTextInput.value;\n formField.enabled = _this.fillInEnable.checked;\n _this.owner.editor.editFormField('Text', formField);\n _this.closeTextField();\n }\n }\n else {\n DialogUtility.alert({\n content: 'A valid date or time is required',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTextField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(TextFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n TextFormFieldDialog.prototype.getModuleName = function () {\n return 'TextFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n var _this = this;\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-container-row' });\n var typeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n this.defaultTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let typeLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Type')\n // });\n //define the array of complex data\n var typeDropDownitems = [\n { Value: 'Regular text', Name: localValue.getConstant('Regular text') },\n { Value: 'Number', Name: localValue.getConstant('Number') },\n { Value: 'Date', Name: localValue.getConstant('Date') }\n ];\n var typeDropDownList = createElement('input');\n this.typeDropDown = new DropDownList({\n dataSource: typeDropDownitems,\n popupHeight: '150px',\n value: 'Regular text',\n change: this.changeTypeDropDown.bind(this),\n floatLabelType: 'Always',\n placeholder: localValue.getConstant('Type'),\n fields: { text: 'Name', value: 'Value' }\n });\n // this.defaultTextLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Default text')\n // });\n this.defaultTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var secondDiv = createElement('div', { className: 'e-de-container-row' });\n var maxLengthDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n // let maxLengthLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Maximum length')\n // });\n var maxLength = createElement('input');\n this.maxLengthNumber = new NumericTextBox({\n format: 'n', value: 0, min: 0, max: 32767, width: '100%', enablePersistence: false,\n placeholder: localValue.getConstant('Maximum length'), floatLabelType: 'Always',\n change: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n focus: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n blur: function (args) {\n if (!args.value) {\n var proxy_1 = this;\n setTimeout(function () {\n proxy_1.element.value = localValue.getConstant('Unlimited');\n }, 0);\n }\n },\n });\n var textFromatDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // this.textFormatLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Text format')\n // });\n var textFormatList = createElement('input');\n var formatDropDownitems = [\n { Value: \"Uppercase\", Name: localValue.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: localValue.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: localValue.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: localValue.getConstant(\"TitleCase\") }\n ];\n this.textFormatDropDown = new ComboBox({\n dataSource: formatDropDownitems,\n popupHeight: '150px',\n allowCustom: true,\n showClearButton: false,\n change: this.updateTextFormtas.bind(this),\n placeholder: localValue.getConstant('Text format'),\n floatLabelType: 'Always',\n fields: { text: 'Name', value: 'Value' }\n });\n this.textFormatDropDown.focus = function () {\n _this.textFormatDropDown.element.select();\n };\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-ff-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipTotalDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkTotalDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let toolTipHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Tooltip')\n // });\n this.tooltipTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n // let bookmarkHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Name')\n // });\n this.bookmarkTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var fillInEnableDiv = createElement('div');\n var fillInEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.fillInEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Fillin enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n typeDiv.classList.add('e-de-rtl');\n maxLengthDiv.classList.add('e-de-rtl');\n toolTipTotalDiv.classList.add('e-de-rtl');\n bookmarkTotalDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(typeDiv);\n //typeDiv.appendChild(typeLabel);\n typeDiv.appendChild(typeDropDownList);\n this.typeDropDown.appendTo(typeDropDownList);\n firstDiv.appendChild(this.defaultTextDiv);\n //this.defaultTextDiv.appendChild(this.defaultTextLabel);\n this.defaultTextDiv.appendChild(this.defaultTextInput);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(maxLengthDiv);\n //maxLengthDiv.appendChild(maxLengthLabel);\n maxLengthDiv.appendChild(maxLength);\n this.maxLengthNumber.appendTo(maxLength);\n secondDiv.appendChild(textFromatDiv);\n //textFromatDiv.appendChild(this.textFormatLabel);\n textFromatDiv.appendChild(textFormatList);\n this.textFormatDropDown.appendTo(textFormatList);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipTotalDiv);\n //toolTipTotalDiv.appendChild(toolTipHeadingLabel);\n toolTipTotalDiv.appendChild(this.tooltipTextInput);\n thirdDiv.appendChild(bookmarkTotalDiv);\n //bookmarkTotalDiv.appendChild(bookmarkHeadingLabel);\n bookmarkTotalDiv.appendChild(this.bookmarkTextInput);\n dialogDiv.appendChild(fillInEnableDiv);\n fillInEnableDiv.appendChild(fillInEnableEle);\n this.fillInEnable.appendTo(fillInEnableEle);\n this.defaultTextLabel = new TextBox({ placeholder: localValue.getConstant('Default text'), floatLabelType: 'Always' }, this.defaultTextInput);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipTextInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkTextInput);\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadTextDialog(this.localObj);\n this.documentHelper.dialog.header = this.localObj.getConstant('Text Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertTextField,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.changeTypeDropDown = function (args) {\n if (args.isInteracted) {\n this.defaultTextInput.value = '';\n this.textFormatDropDown.value = '';\n }\n if (args.value === 'Regular text') {\n this.textFormatDropDown.fields = { text: 'Name', value: 'Value' };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default text');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Text format');\n this.textFormatDropDown.dataSource = [\n { Value: \"Uppercase\", Name: this.localObj.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: this.localObj.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: this.localObj.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: this.localObj.getConstant(\"Titlecase\") }\n ];\n }\n else if (args.value === 'Number') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default number');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Number format');\n this.textFormatDropDown.dataSource = ['0', '0.00', '#,##0', '#,##0.00', '$#,##0.00;($#,##0.00)', '0%'];\n }\n else if (args.value === 'Date') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default date');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Date format');\n this.textFormatDropDown.dataSource = ['M/d/yyyy', 'dddd, MMMM d, yyyy', 'MMMM d, yyyy', 'M/d/yy', 'yyyy-MM-dd', 'd-MMM-yy',\n 'M.d.yyyy', 'MMM. d, yy', 'd MMMM yyyy', 'MMMM yy', 'MMM-yy', 'M/d/yyyy h:mm am/pm', 'M/d/yyyy h:mm:ss am/pm', 'h:mm am/pm', 'h:mm:ss am/pm',\n 'HH:mm', 'HH:mm:ss'];\n }\n this.defaultTextLabel.dataBind();\n this.textFormatDropDown.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.loadTextDialog = function (local) {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var data = inline.formFieldData;\n if (data.maxLength > 0) {\n this.maxLengthNumber.value = data.maxLength;\n }\n else {\n this.maxLengthNumber.value = 0;\n this.maxLengthNumber.element.value = local ? local.getConstant('Unlimited') : 'Unlimited';\n }\n if (data.type === 'Date') {\n this.typeDropDown.value = 'Date';\n }\n else if (data.type === 'Number') {\n this.typeDropDown.value = 'Number';\n }\n else {\n this.typeDropDown.value = 'Regular text';\n }\n if (data.format) {\n this.textFormatDropDown.value = data.format;\n }\n else {\n this.textFormatDropDown.value = '';\n }\n this.defaultTextInput.value = !isNullOrUndefined(data.defaultValue) ? data.defaultValue : '';\n this.fillInEnable.checked = data.enabled;\n this.tooltipTextInput.value = !isNullOrUndefined(data.helpText) ? data.helpText : '';\n this.bookmarkTextInput.value = !isNullOrUndefined(data.name) ? data.name : '';\n }\n };\n TextFormFieldDialog.prototype.updateFormats = function (value) {\n var format = isNullOrUndefined(this.textFormatDropDown.value) ? '' : this.textFormatDropDown.value.toString();\n if (this.typeDropDown.value === 'Regular text') {\n return HelperMethods.formatText(format, value);\n }\n if (this.typeDropDown.value === 'Number') {\n var data = HelperMethods.formatNumber(format, value);\n if (!(data.toString() === 'NaN')) {\n return data;\n }\n return '';\n }\n if (this.typeDropDown.value === 'Date') {\n return HelperMethods.formatDate(format, value);\n }\n return '';\n };\n /**\n * @private\n * @returns {boolean} returns is valid date format.\n */\n TextFormFieldDialog.prototype.isValidDateFormat = function () {\n var value = this.defaultTextInput.value;\n if (value !== '') {\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.destroy = function () {\n var textDialogTarget = this.target;\n if (textDialogTarget) {\n if (textDialogTarget.parentElement) {\n textDialogTarget.parentElement.removeChild(textDialogTarget);\n }\n this.target = undefined;\n }\n if (this.maxLengthNumber) {\n this.maxLengthNumber.destroy();\n this.maxLengthNumber = undefined;\n }\n if (this.fillInEnable) {\n this.fillInEnable.destroy();\n this.fillInEnable = undefined;\n }\n if (this.typeDropDown) {\n this.typeDropDown.destroy();\n this.typeDropDown = undefined;\n }\n if (this.textFormatDropDown) {\n this.textFormatDropDown.destroy();\n this.textFormatDropDown = undefined;\n }\n this.owner = undefined;\n this.defaultTextInput = undefined;\n this.tooltipTextInput = undefined;\n this.bookmarkTextInput = undefined;\n this.defaultTextLabel = undefined;\n this.defaultTextDiv = undefined;\n this.textFormatLabel = undefined;\n };\n return TextFormFieldDialog;\n}());\nexport { TextFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, DropDownFormField } from '../viewer/page';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextBox } from '@syncfusion/ej2-inputs';\n/**\n * Form field drop-down dialog is used to modify the value in drop-down form field.\n */\nvar DropDownFormFieldDialog = /** @class */ (function () {\n function DropDownFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.addItemtoList = function () {\n _this.dropDownItems.push(_this.drpDownItemsInput.value);\n _this.currentSelectedItem = _this.drpDownItemsInput.value;\n _this.drpDownItemsInput.value = '';\n _this.enableOrDisableButton();\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeItemFromList = function () {\n for (var i = 0; i < _this.dropDownItems.length; i++) {\n if (_this.dropDownItems[i] === _this.currentSelectedItem) {\n _this.dropDownItems.splice(i, 1);\n }\n }\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.currentSelectedItem = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveUpItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveUp(index, (index - 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveDownItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveDown(index, (index + 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertDropDownField = function () {\n var dropDownField = new DropDownFormField();\n dropDownField.dropdownItems = _this.dropDownItems;\n dropDownField.selectedIndex = 0;\n dropDownField.name = _this.bookmarkInput.value;\n dropDownField.helpText = _this.tooltipInput.value;\n dropDownField.enabled = _this.dropDownEnable.checked;\n _this.owner.editor.editFormField('DropDown', dropDownField);\n _this.closeDropDownField();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDropDownField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(DropDownFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n DropDownFormFieldDialog.prototype.getModuleName = function () {\n return 'DropDownFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-drp-dwn-frst-div' });\n this.drpDownItemsInput = createElement('input', {\n className: 'e-input e-bookmark-textbox-input',\n id: 'fielditems_text_box'\n });\n this.drpDownItemsInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n var secondDiv = createElement('div', { className: 'e-de-ff-drpdwn-dlg-scndiv' });\n var itemsDrpItemsLabel = createElement('div', {\n className: 'e-de-ff-dlg-drpdwn-heading',\n innerHTML: localValue.getConstant('Items in dropdown list')\n });\n var listviewDiv = createElement('div', {\n className: 'e-bookmark-listViewDiv e-de-ff-drpdwn-listview',\n attrs: { style: 'height:100%' }\n });\n this.listviewInstance = new ListView({\n cssClass: 'e-bookmark-listview',\n select: this.selectHandler\n });\n var buttonDiv = createElement('div');\n var addButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var addButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('ADD'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n addButtonEle.addEventListener('click', this.addItemtoList.bind(this));\n var editButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n editButtonDiv.style.display = 'none';\n var editButtonEle = createElement('button', {\n innerHTML: 'EDIT',\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.editButton = new Button({ cssClass: 'e-button-custom' });\n var removeButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var removeButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('REMOVE'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.removeButton = new Button({ cssClass: 'e-button-custom' });\n removeButtonEle.addEventListener('click', this.removeItemFromList.bind(this));\n var moveBtnDiv = createElement('div', { attrs: { style: 'display:inline-flex' } });\n var moveUpButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveUpButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvup'\n });\n this.moveUpButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-up' });\n moveUpButtonEle.addEventListener('click', this.moveUpItem.bind(this));\n var moveDownButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveDownButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvdn'\n });\n this.moveDownButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-down' });\n moveDownButtonEle.addEventListener('click', this.moveDownItem.bind(this));\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n this.bookmarkInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var dropDownEnableDiv = createElement('div');\n var dropDownEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.dropDownEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Dropdown enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n listviewDiv.classList.add('e-de-rtl');\n moveUpButtonEle.classList.add('e-de-rtl');\n toolTipDiv.classList.add('e-de-rtl');\n bookmarkDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(this.drpDownItemsInput);\n dialogDiv.appendChild(itemsDrpItemsLabel);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(listviewDiv);\n this.listviewInstance.appendTo(listviewDiv);\n secondDiv.appendChild(buttonDiv);\n buttonDiv.appendChild(addButtonDiv);\n addButtonDiv.appendChild(addButtonEle);\n this.addButton.appendTo(addButtonEle);\n buttonDiv.appendChild(editButtonDiv);\n editButtonDiv.appendChild(editButtonEle);\n this.editButton.appendTo(editButtonEle);\n buttonDiv.appendChild(removeButtonDiv);\n removeButtonDiv.appendChild(removeButtonEle);\n this.removeButton.appendTo(removeButtonEle);\n buttonDiv.appendChild(moveBtnDiv);\n moveBtnDiv.appendChild(moveUpButtonDiv);\n moveUpButtonDiv.appendChild(moveUpButtonEle);\n this.moveUpButton.appendTo(moveUpButtonEle);\n moveBtnDiv.appendChild(moveDownButtonDiv);\n moveDownButtonDiv.appendChild(moveDownButtonEle);\n this.moveDownButton.appendTo(moveDownButtonEle);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipDiv);\n toolTipDiv.appendChild(this.tooltipInput);\n thirdDiv.appendChild(bookmarkDiv);\n bookmarkDiv.appendChild(this.bookmarkInput);\n dialogDiv.appendChild(dropDownEnableDiv);\n dropDownEnableDiv.appendChild(dropDownEnableEle);\n this.dropDownEnable.appendTo(dropDownEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInput);\n new TextBox({ placeholder: localValue.getConstant('Dropdown items'), floatLabelType: 'Always' }, this.drpDownItemsInput);\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadDropDownDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Drop Down Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertDropDownField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.loadDropDownDialog = function () {\n var inline = this.owner.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n this.dropDownInstance = inline.formFieldData;\n if (this.dropDownInstance.dropdownItems.length > 0) {\n var index = this.dropDownInstance.selectedIndex;\n this.currentSelectedItem = this.dropDownInstance.dropdownItems[index];\n }\n if (this.dropDownInstance.enabled) {\n this.dropDownEnable.checked = true;\n }\n else {\n this.dropDownEnable.disabled = false;\n }\n if (this.dropDownInstance.helpText !== '') {\n this.tooltipInput.value = this.dropDownInstance.helpText;\n }\n else {\n this.tooltipInput.value = '';\n }\n if (this.dropDownInstance.name !== '') {\n this.bookmarkInput.value = this.dropDownInstance.name;\n }\n else {\n this.bookmarkInput.value = '';\n }\n this.dropDownItems = this.dropDownInstance.dropdownItems.slice();\n this.updateList();\n }\n };\n // sets updated list to dialog & refresh the List\n DropDownFormFieldDialog.prototype.updateList = function () {\n this.listviewInstance.dataSource = this.dropDownItems.slice();\n this.listviewInstance.dataBind();\n if (this.currentSelectedItem) {\n var toSelectItem = this.currentSelectedItem;\n this.listviewInstance.selectItem(toSelectItem);\n }\n };\n DropDownFormFieldDialog.prototype.getSelectedIndex = function () {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (this.dropDownItems[i] === this.currentSelectedItem) {\n return i;\n }\n }\n return 0;\n };\n DropDownFormFieldDialog.prototype.moveUp = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === 0) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i < (this.dropDownItems.length - 1)) {\n tempData[i] = this.dropDownItems[i + 1];\n }\n else {\n tempData[i] = this.dropDownItems[0];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.moveDown = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === (this.dropDownItems.length - 1)) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i !== 0) {\n tempData[i] = this.dropDownItems[i - 1];\n }\n else {\n tempData[i] = this.dropDownItems[(this.dropDownItems.length - 1)];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = (this.drpDownItemsInput.value === '');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.destroy = function () {\n var dropDownDialogTarget = this.target;\n if (dropDownDialogTarget) {\n if (dropDownDialogTarget.parentElement) {\n dropDownDialogTarget.parentElement.removeChild(dropDownDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.drpDownItemsInput = undefined;\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n if (this.addButton) {\n this.addButton.destroy();\n this.addButton = undefined;\n }\n if (this.editButton) {\n this.editButton.destroy();\n this.editButton = undefined;\n }\n if (this.removeButton) {\n this.removeButton.destroy();\n this.removeButton = undefined;\n }\n if (this.moveUpButton) {\n this.moveUpButton.destroy();\n this.moveUpButton = undefined;\n }\n if (this.moveDownButton) {\n this.moveDownButton.destroy();\n this.moveDownButton = undefined;\n }\n this.tooltipInput = undefined;\n this.bookmarkInput = undefined;\n if (this.dropDownEnable) {\n this.dropDownEnable.destroy();\n this.dropDownEnable = undefined;\n }\n this.dropDownInstance = undefined;\n };\n return DropDownFormFieldDialog;\n}());\nexport { DropDownFormFieldDialog };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox, CommentCharacterElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/* eslint-disable */\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selection.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphEnd\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection.isParagraphLastLine(this.currentWidget)\n && this.offset === this.owner.selection.getLineLength(this.currentWidget);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isCurrentParaBidi\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.currentWidget.paragraph)) {\n return this.currentWidget.paragraph.paragraphFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n *\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n *\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * @private\n */\n TextPosition.prototype.containsRtlText = function (widget) {\n for (var i = 0; i < widget.children.length; i++) {\n if (widget.children[i].isRightToLeft) {\n return true;\n }\n }\n return false;\n };\n /**\n * Set text position for paragraph and inline\n *\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : line.paragraph.lastChild.getEndOffset() + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n *\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n *\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n *\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.documentHelper.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (value === 'FN' || value === 'EN') {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n if (value === 'FN') {\n widget = page.footnoteWidget.bodyWidgets[value1];\n }\n else {\n widget = page.endnoteWidget.bodyWidgets[value1];\n }\n }\n else if (!isNullOrUndefined(page)) {\n widget = page.bodyWidgets[0];\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.selection.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.selection.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.selection.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n *\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n *\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph index\n * @private\n */\n TextPosition.prototype.isInSameParagraphIndex = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph.index === textPosition.paragraph.index;\n };\n /**\n * Return true if text position is in same paragraph\n *\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true is current text position exist before given text position\n *\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selection.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n *\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (!isNullOrUndefined(startParagraph) && !isNullOrUndefined(endParagraph)) {\n if (startParagraph.containerWidget instanceof BodyWidget && endParagraph.containerWidget instanceof BodyWidget &&\n startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable && endParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selection.isExistAfter(startParagraph, endParagraph);\n }\n return false;\n };\n /**\n * Return hierarchical index of current text position\n *\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (lineWidget.isLastLine()) {\n if (!isNullOrUndefined(lineWidget.paragraph.bodyWidget.footNoteReference)) {\n lineLength = lineLength + lineWidget.paragraph.bodyWidget.footNoteReference.text.length;\n }\n else {\n lineLength = lineLength + 1;\n }\n }\n if (offset > lineLength) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var currentOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, currentOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n *\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && (inline.nextNode instanceof FieldElementBox\n || inline.nextNode instanceof BookmarkElementBox)) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark or Bookmark end.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1\n || nextValidInline instanceof BookmarkElementBox && nextValidInline.bookmarkType === 1) {\n inline = nextValidInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, this.documentHelper.isFormFillProtectedMode ? 0 : 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 1;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n var endOffset = this.currentWidget.getEndOffset();\n this.offset = endOffset > 0 ? endOffset - 1 : endOffset;\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n // line end with page break and updating offset before page break.\n this.offset = this.currentWidget.isEndsWithPageBreak ? this.currentWidget.getEndOffset() - 1 : this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n *\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)\n || inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n *\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n *\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selection.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n this.owner.selection.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n *\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selection.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n this.owner.selection.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selection.start.paragraph;\n var selectionStartIndex = 0;\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selection.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && inline instanceof FieldElementBox && inline.fieldType === 1 &&\n inline.previousNode instanceof ImageElementBox) {\n this.offset = nextOffset;\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n *\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n *\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n start = start.replace(/FN;/g, '');\n end = end.replace(/FN;/g, '');\n start = start.replace(/EN;/g, '');\n end = end.replace(/EN;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n *\n * @param fieldEnd\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (fieldEnd instanceof FieldElementBox && isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n var index = inline instanceof FieldElementBox || inline instanceof BookmarkElementBox && inline.bookmarkType === 1 ? 0 : inline.length;\n this.offset = this.currentWidget.getOffset(inline, index);\n };\n /**\n * Moves the text position to start of the word.\n *\n * @param type\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n this.getNextWordOffsetFieldSeparator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getNextWordOffsetComment(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n this.getNextWordOffsetFieldSeparator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex === -1 && span.nextNode instanceof CommentCharacterElementBox &&\n isNullOrUndefined(span.nextNode.nextNode)) {\n wordEndIndex = span.length;\n }\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n if ((excludeSpace || txt[wordEndIndex] !== ' ') && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n wordEndIndex++;\n while (wordEndIndex < txt.length && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) !== -1) {\n if (txt[wordEndIndex] !== ' ' && txt[wordEndIndex] !== ' ') {\n break;\n }\n wordEndIndex++;\n }\n endSelection = true;\n if (wordEndIndex < txt.length) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldSeparator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetComment = function (comment, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(comment.nextNode)) {\n this.getNextWordOffset(comment.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getPreviousWordOffsetComment(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /* get previous word offset from comment\n * @private\n */\n TextPosition.prototype.getPreviousWordOffsetComment = function (comment, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (comment.previousNode) {\n var inline = comment.previousNode;\n if (comment.previousNode instanceof TextElementBox\n && HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n this.getPreviousWordOffset(comment.previousNode, selection, comment.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n endPosition.setPositionParagraph(comment.line, selection.getStartLineOffset(comment.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n if (fieldBegin.fieldSeparator) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex === -1 && span.previousElement instanceof CommentCharacterElementBox && isNullOrUndefined(span.previousNode.previousNode)) {\n wordStartIndex = span.length;\n }\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n *\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n if (this.selection.start.paragraph !== this.selection.end.paragraph\n || this.selection.start.offset === this.selection.getStartOffset(this.selection.start.paragraph)) {\n // To select Paragraph mark similar to MS WORD\n if (this.selection.end.offset === this.selection.end.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.end.currentWidget)) {\n this.selection.end.setPositionParagraph(this.selection.end.currentWidget, this.selection.end.offset + 1);\n }\n }\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n *\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isSelectParaMark = false;\n if ((this.selection.start.paragraph !== this.selection.end.paragraph\n && this.selection.end.offset !== this.selection.getStartOffset(this.selection.start.paragraph)) ||\n (this.documentHelper.isSelectionChangedOnMouseMoved && this.selection.isParagraphFirstLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getStartOffset(this.selection.start.paragraph))) {\n isSelectParaMark = true;\n }\n // To select Paragraph mark similar to MS WORD\n if (isSelectParaMark && this.selection.start.offset === this.selection.start.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.start.currentWidget)) {\n this.selection.start.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + 1);\n }\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.previousSplitWidget) {\n splittedParagraph = splittedParagraph.previousSplitWidget;\n }\n var startOffset = selection.getStartOffset(splittedParagraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = splittedParagraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n // Here, updating the left position when line widget end with page break\n // to update cursor before page break\n if (this.currentWidget.isEndsWithPageBreak && this.offset === this.currentWidget.getEndOffset() - 1) {\n left = this.location.x;\n }\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var currentLine = this.currentWidget;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n if (nextLine !== currentLine) {\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n }\n };\n /**\n * Moves the text position to start of the line.\n *\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n this.documentHelper.moveCaretPosition = 1;\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = 0;\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n *\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if (this.offset + incrementValue === endOffset || this.offset === endOffset + 1) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n *\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @param {Selection} selection Specifies the selection\n * @param {boolean} moveToNextLine Specifies the move to next line\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var isParaBidi = this.currentWidget.paragraph.paragraphFormat.bidi;\n this.documentHelper.moveCaretPosition = 2;\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = void 0;\n // As per Microsoft Behavior, when current para is RTL and if line widget contains rtl text or mixed inlines(rtl, normal),\n // then need to consider the last element and to update offset to last element\n if (isParaBidi && this.containsRtlText(currentLine)) {\n var endOffset = currentLine.getEndOffset();\n lastElement = currentLine.getInline(endOffset, 0).element;\n }\n else {\n lastElement = currentLine.children[currentLine.children.length - 1];\n if (lastElement instanceof ListTextElementBox && currentLine.children.length > 2) {\n lastElement = currentLine.children[currentLine.children.length - 3];\n }\n }\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n *\n * @param {number} left Specified the left\n * @private\n * @returns {void}\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var isAtLineStart = this.offset === 0 ? true : false;\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n this.moveForward();\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selection.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selection.end;\n var isBackwardSelection = !this.owner.selection.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selection.isEmpty || this.owner.selection.isForward;\n isPositionUpdated = this.owner.selection.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selection.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selection.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n * @returns {void}\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.documentHelper = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.color = '';\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n this.floatingItems = [];\n this.floatingItems = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n this.isCrossRefField = false;\n this.screenTipText = '';\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), true);\n }\n else if ((lowercase.indexOf('ref ') === 0 && lowercase.match('\\\\h'))) {\n this.parseFieldValues(fieldCode.substring(4).trim(), false);\n this.isCrossRefField = true;\n }\n else if (lowercase.substring(0, 7) === 'pageref' && lowercase.match('\\\\h')) {\n this.parseFieldValues(fieldCode.substring(7).trim(), false);\n this.isCrossRefField = true;\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"screenTip\", {\n /**\n * Gets screentip text.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.screenTipText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n *\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"isCrossRef\", {\n /**\n * @private\n */\n get: function () {\n return this.isCrossRefField;\n },\n enumerable: true,\n configurable: true\n });\n Hyperlink.prototype.parseFieldValues = function (value, isHyperlink) {\n var codes = value.split('\\\\o ');\n if (codes.length === 2) {\n this.screenTipText = this.parseFieldValue(codes[1], codes[1] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n this.screenTipText = this.screenTipText.substring(0, this.screenTipText.length - 1);\n value = codes[0];\n codes = undefined;\n }\n codes = value.split(' ');\n var isLocalRef = false;\n if (isHyperlink) {\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n }\n else {\n this.localRef = codes[0];\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar, isHyperlink) {\n value = isHyperlink ? value.substring(1) : value.substring(0);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n this.screenTipText = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageInfo = /** @class */ (function () {\n /**\n * Constructor for image format class\n *\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageInfo(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n }\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n */\n ImageInfo.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n };\n return ImageInfo;\n}());\nexport { ImageInfo };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n get: function () {\n return this.ownerListLevelIn;\n },\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n get: function () {\n return this.modifiedListLevelIn;\n },\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n get: function () {\n return this.ownerFormatIn;\n },\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n get: function () {\n return this.modifiedFormatIn;\n },\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedParagraphFormat.prototype.destroy = function () {\n this.ownerFormat = undefined;\n this.modifiedFormat.destroy();\n this.modifiedFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(startingPoint, rowFormat) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n owner.editorModule.tableResize.updateRowHeight(this.rowFormat.ownerBase, isRedo ? this.displacement : (-this.displacement));\n owner.documentHelper.layout.reLayoutTable(this.rowFormat.ownerBase.ownerTable);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n this.tableFormat.allowAutoFit = table.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.selection.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, FieldElementBox, TableWidget, TableRowWidget, HeaderFooterWidget, CheckBoxFormField, TextFrame } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextPosition, ImageInfo } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox, CommentCharacterElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.ownerIn = node;\n this.documentHelper = node.documentHelper;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n get: function () {\n return this.ownerIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n get: function () {\n return this.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n get: function () {\n return this.actionIn;\n },\n set: function (value) {\n this.actionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n get: function () {\n return this.modifiedPropertiesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /* eslint-enable */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n //gets or sets selection start\n get: function () {\n return this.selectionStartIn;\n },\n set: function (value) {\n this.selectionStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n get: function () {\n return this.selectionEndIn;\n },\n set: function (value) {\n this.selectionEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n get: function () {\n return this.insertPositionIn;\n },\n set: function (value) {\n this.insertPositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n get: function () {\n return this.endPositionIn;\n },\n set: function (value) {\n this.endPositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"viewer\", {\n get: function () {\n return this.ownerIn.viewer;\n },\n enumerable: true,\n configurable: true\n });\n BaseHistoryInfo.prototype.updateSelection = function () {\n var blockInfo = this.owner.selection.getParagraphInfo(this.owner.selection.start);\n this.selectionStart = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.selection.getParagraphInfo(this.owner.selection.end);\n this.selectionEnd = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.setFormFieldInfo = function (field, value) {\n this.removedNodes.push({ 'formField': field, 'value': value });\n };\n BaseHistoryInfo.prototype.setEditRangeInfo = function (editStart) {\n this.removedNodes.push({ 'editStart': editStart, 'startIndex': editStart.indexInOwner, 'endIndex': editStart.editRangeEnd.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertFormTextFormat = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n var text = fieldInfo.value;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var formField = fieldInfo.formField;\n if (this.editorHistory.isUndoing) {\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.recordChanges(this);\n }\n else {\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertFormField = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var field = fieldInfo.formField;\n if (field.formFieldData instanceof CheckBoxFormField) {\n this.owner.editorModule.toggleCheckBoxFormField(field, true, fieldInfo.value);\n }\n else {\n this.owner.editorModule.updateFormField(field, fieldInfo.value);\n }\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n this.documentHelper.bookmarks.add(bookmark.name, bookmark);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = bookmark.name;\n }\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertComment = function () {\n var editPosition = this.insertPosition;\n var comment = this.removedNodes[0];\n var insert = false;\n if (this.action === 'ResolveComment') {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.owner.editor.resolveOrReopenComment(comment, !comment.isResolved);\n return;\n }\n if (this.action === 'InsertCommentWidget') {\n insert = (this.editorHistory.isRedoing);\n }\n else if (this.action === 'DeleteCommentWidget') {\n insert = (this.editorHistory.isUndoing);\n }\n if (insert) {\n if (comment) {\n if (comment.isReply) {\n this.owner.editor.addReplyComment(comment, this.insertPosition);\n }\n else {\n this.owner.editor.addCommentWidget(comment, false, true, true);\n }\n }\n }\n else {\n var commentElement = this.owner.editor.getCommentElementBox(editPosition);\n this.owner.editor.deleteCommentWidget(commentElement);\n }\n };\n BaseHistoryInfo.prototype.revertEditRangeRegion = function () {\n var editRangeInfo = this.removedNodes[0];\n var editStart = editRangeInfo.editStart;\n if (this.editorHistory.isUndoing) {\n var user = editStart.user === '' ? editStart.group : editStart.user;\n this.owner.editor.updateRangeCollection(editStart, user);\n editStart.line.children.splice(editRangeInfo.startIndex, 0, editStart);\n editStart.editRangeEnd.line.children.splice(editRangeInfo.endIndex, 0, editStart.editRangeEnd);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.removeUserRestrictionsInternal(editStart);\n this.editorHistory.undoStack.push(this);\n }\n this.owner.editor.fireContentChange();\n };\n /* eslint-disable */\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'FormTextFormat') {\n this.revertFormTextFormat();\n return;\n }\n if (this.action === 'UpdateFormField') {\n this.revertFormField();\n return;\n }\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n if (this.action === 'RemoveEditRange') {\n this.revertEditRangeRegion();\n return;\n }\n if (this.action === 'InsertCommentWidget' || this.action === 'DeleteCommentWidget' || this.action === 'ResolveComment') {\n this.revertComment();\n return;\n }\n if (this.action === 'ListFormat' && this.owner.editor.listNumberFormat !== '') {\n var abstractList = this.documentHelper.lists[0].abstractList.levels[this.owner.editor.listLevelNumber];\n var currentListLevelPattern = abstractList.listLevelPattern;\n var currentNUmberFormat = abstractList.numberFormat;\n abstractList.listLevelPattern = this.owner.editor.listLevelPattern;\n abstractList.numberFormat = this.owner.editor.listNumberFormat;\n this.owner.editor.listLevelPattern = currentListLevelPattern;\n this.owner.editor.listNumberFormat = currentNUmberFormat;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection'\n || this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(start);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(end);\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n var sel = this.owner.selection;\n var deletedNodes = this.removedNodes;\n this.removedNodesIn = [];\n if (isNullOrUndefined(this.endPosition)) {\n this.endPosition = this.insertPosition;\n }\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.endPosition : this.insertPosition);\n if (this.lastElementRevision && this.editorHistory.isUndoing) {\n if (isNullOrUndefined(this.endRevisionLogicalIndex)) {\n this.updateEndRevisionInfo();\n }\n }\n if (this.action === 'ClearRevisions') {\n this.undoRevisionForElements(insertTextPosition, endTextPosition, deletedNodes[deletedNodes.length - 1]);\n deletedNodes = [];\n }\n if (this.action === 'Uppercase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n sel.selectContent(insertTextPosition, true);\n }\n else {\n sel.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selection.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n var isRemoveContent = false;\n if (this.endRevisionLogicalIndex && deletedNodes.length > 0) {\n if (this.editorHistory.isUndoing || (this.editorHistory.isRedoing && insertTextPosition.isAtSamePosition(endTextPosition))) {\n var currentPosition = sel.getTextPosBasedOnLogicalIndex(this.endRevisionLogicalIndex);\n sel.selectPosition(insertTextPosition, currentPosition);\n }\n if (this.editorHistory.isUndoing) {\n this.owner.editor.deleteSelectedContents(sel, true);\n }\n }\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n var skipDelete = (deletedNodes.length > 0 && this.action === 'ParaMarkTrack') || this.action === 'ClearRevisions' || this.action === 'AcceptTOC';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n sel.end.setPositionInternal(endTextPosition);\n if (!this.owner.selection.isEmpty && !skipDelete) {\n if (this.editorHistory.isRedoing && this.action !== 'Accept Change' && this.action !== 'ParaMarkTrack' &&\n this.action !== 'ParaMarkReject' && this.action !== 'RemoveRowTrack') {\n this.owner.editorModule.removeSelectedContents(sel);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(sel, true);\n }\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && this.documentHelper.blockToShift) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n }\n }\n var isRedoAction = (this.editorHistory.isRedoing && !isRemoveContent);\n isRemoveContent = this.lastElementRevision ? false : isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end);\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition);\n }\n //this.owner.editorModule.reLayout(this.documentHelper.selection);\n }\n var isSelectionChanged = false;\n var updateSelection = false;\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'Accept All')) {\n updateSelection = true;\n }\n if (!this.owner.trackChangesPane.isTrackingPageBreak && ((this.editorHistory.isUndoing || this.endRevisionLogicalIndex || this.action === 'RemoveRowTrack' || updateSelection) && isNullOrUndefined(this.editorHistory.currentHistoryInfo) || updateSelection) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight' || this.action === 'Accept Change' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n if (this.action === 'RemoveRowTrack' && this.editorHistory.isRedoing) {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionStart);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionEnd);\n }\n else {\n selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(start);\n selectionEndTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(end);\n }\n this.owner.selection.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n isSelectionChanged = true;\n }\n this.owner.trackChangesPane.isTrackingPageBreak = false;\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n (this.editorHistory.currentHistoryInfo.action === 'Accept All'\n || this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'RemoveComment')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n this.owner.editorModule.reLayout(this.owner.selection, this.owner.selection.isEmpty);\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.documentHelper.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget)) ||\n (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TextFrame\n && endTextPosition.paragraph.containerWidget instanceof TextFrame)) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selection.selectRange(insertTextPosition, endTextPosition);\n var isDelete = false;\n if (this.action === 'BackSpace' || this.action === 'Uppercase' || this.action === 'RemoveRowTrack') {\n isDelete = true;\n }\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, isDelete);\n }\n };\n BaseHistoryInfo.prototype.updateEndRevisionInfo = function () {\n this.lastElementRevision = this.checkAdjacentNodeForMarkedRevision(this.lastElementRevision);\n var currentRevision = this.retrieveEndPosition(this.lastElementRevision);\n var blockInfo = this.owner.selection.getParagraphInfo(currentRevision);\n this.endRevisionLogicalIndex = this.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.lastElementRevision.isMarkedForRevision = false;\n };\n BaseHistoryInfo.prototype.retrieveEndPosition = function (elementBox) {\n var endPosition = new TextPosition(this.owner);\n var offset = elementBox.line.getOffset(elementBox, 0) + elementBox.length;\n endPosition.setPositionFromLine(elementBox.line, offset);\n return endPosition;\n };\n /**\n * Method to retrieve exact spitted node which is marked as last available element.\n *\n * @param {ElementBox} elementBox - Specifies the element box\n * @returns {ElementBox} - Returns element box\n */\n BaseHistoryInfo.prototype.checkAdjacentNodeForMarkedRevision = function (elementBox) {\n var nextItem = elementBox.nextNode;\n var markedNode;\n while (!isNullOrUndefined(nextItem) && nextItem.isMarkedForRevision) {\n markedNode = nextItem;\n nextItem = nextItem.nextNode;\n }\n return !isNullOrUndefined(markedNode) ? markedNode : elementBox;\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n this.owner.selection.selectRange(start, end);\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selection, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selection, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n case 'SectionBreak':\n editor.insertSection(this.owner.selection, true);\n break;\n case 'TableAutoFitToContents':\n editor.autoFitTable('FitToContents');\n break;\n case 'TableAutoFitToWindow':\n editor.autoFitTable('FitToWindow');\n break;\n case 'TableFixedColumnWidth':\n editor.autoFitTable('FixedColumnWidth');\n break;\n case 'RemoveRowTrack':\n this.owner.selection.handleAcceptReject(true);\n break;\n }\n };\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells' || this.action === 'SectionBreak' || this.action === 'TableAutoFitToContents' ||\n this.action === 'TableAutoFitToWindow' || this.action === 'TableFixedColumnWidth' || this.action === 'PasteColumn' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n this.redoAction();\n if (this.action === 'SectionBreak') {\n return;\n }\n }\n if (deletedNodes.length > 0) {\n //tslint:disable-next-line:max-line-length\n if ((this.editorHistory.isUndoing && (this.action === 'RemoveRowTrack' || this.action === 'DeleteCells' ||\n this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n //tslint:disable-next-line:max-line-length\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders' || this.action === 'TableAutoFitToContents' || this.action === 'TableAutoFitToWindow' ||\n this.action === 'TableFixedColumnWidth' || this.action === 'RemoveRowTrack' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n else if (block instanceof ParagraphWidget && block.isInsideTable) {\n block = block.associatedCell.ownerTable;\n }\n block = block.combineWidget(this.viewer);\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n if (this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') {\n this.removedNodes.push(block);\n }\n else {\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n }\n }\n else if (lastNode instanceof TableWidget) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (this.action === 'TrackingPageBreak' || (this.action === 'SectionBreak' && lastNode instanceof BodyWidget ||\n !isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak')) {\n lastNode = deletedNodes[1];\n }\n if (lastNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n if (lastNode.characterFormat.removedIds.length > 0) {\n this.owner.editor.constructRevisionFromID(lastNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selection.getNextRenderedBlock(lastNode);\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraphInternal(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selection.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraphInternal(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n if (firstNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0\n && this.owner.selection.start.offset === this.owner.selection.getLineLength(this.owner.selection.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n if (firstNode.characterFormat.removedIds.length > 0) {\n this.owner.editor.constructRevisionFromID(firstNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste') {\n editor.removeBlock(this.owner.selection.start.paragraph);\n }\n var paragraph = this.documentHelper.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph)) {\n this.owner.selection.selectParagraphInternal(paragraph, true);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block) {\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selection, node);\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget) {\n this.owner.editorModule.insertBlockTable(this.owner.selection, node, block);\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n else if (node instanceof WCharacterFormat) {\n var insertIndex = this.selectionStart;\n var wiget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n if (wiget instanceof ParagraphWidget) {\n if (node.removedIds.length > 0) {\n wiget.characterFormat.removedIds = node.removedIds.slice();\n this.owner.editor.constructRevisionFromID(wiget.characterFormat, true);\n }\n else if (wiget.characterFormat.revisions.length > 0) {\n wiget.characterFormat = node.cloneFormat();\n }\n }\n }\n else if (node instanceof BodyWidget) {\n this.owner.editorModule.insertSection(this.owner.selection, false);\n }\n else if (typeof (node) === 'string' && this.action === 'AcceptTOC') {\n var insertIndex = this.selectionStart;\n var widget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var endWidget = this.owner.editorModule.getBlock({ index: this.selectionEnd }).node;\n var currentRevision = this.owner.documentHelper.revisionsInternal.get(node);\n if (this.editorHistory.isUndoing) {\n while (widget instanceof ParagraphWidget && widget !== endWidget) {\n this.owner.editor.insertRevisionForBlock(widget, currentRevision.revisionType, true, currentRevision);\n widget = this.documentHelper.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.owner.editor.insertRevisionForBlock(endWidget, currentRevision.revisionType, true, currentRevision);\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n this.owner.editor.addRemovedNodes(currentRevision.revisionID);\n }\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.undoRevisionForElements = function (start, end, id) {\n var currentPara = start.paragraph;\n var endPara = end.paragraph;\n var currentRevision = this.documentHelper.revisionsInternal.get(id);\n var startoffset = this.owner.selection.getParagraphInfo(start).offset;\n var endoffset = this.owner.selection.getParagraphInfo(end).offset;\n var isSamePara = start.paragraph === end.paragraph;\n if (this.editorHistory.isUndoing) {\n while (currentPara !== endPara) {\n this.owner.editor.applyRevisionForCurrentPara(currentPara, startoffset, currentPara.getLength(), id, true);\n currentPara = this.documentHelper.selection.getNextParagraphBlock(currentPara.getSplitWidgets().pop());\n if (currentPara !== endPara) {\n startoffset = 0;\n }\n }\n if (currentPara === endPara) {\n if (!isSamePara) {\n startoffset = 0;\n }\n this.owner.editor.applyRevisionForCurrentPara(currentPara, startoffset, endoffset, id, false);\n }\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n this.removedNodes.push(id);\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner);\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selection.selectedWidgets.length === 0) {\n this.owner.selection.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editor.setOffsetValue(this.owner.selection);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selection;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat(previousFormat);\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return value;\n }\n else {\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return undefined;\n }\n }\n if (property === 'borders') {\n value = previousFormat.borders.cloneFormat();\n }\n else if (this.action.indexOf('Border') >= 0) {\n value = previousFormat.borders.getBorder(property.replace('Border', ''));\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.documentHelper.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n this.owner.editorModule.revertContinueNumbering(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editor.setPreviousBlockToLayout();\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageInfo) {\n this.owner.selection.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selection, property, undefined);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.documentHelper.selection);\n }\n };\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n case 'ParagraphBidi':\n case 'TableBidi':\n return 'bidi';\n case 'ContextualSpacing':\n return 'contextualSpacing';\n case 'LeftBorder':\n case 'TopBorder':\n case 'RightBorder':\n case 'BottomBorder':\n case 'HorizontalBorder':\n case 'VerticalBorder':\n case 'Borders':\n return (this.action[0].toLowerCase() + this.action.slice(1));\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox && !(node instanceof CommentCharacterElementBox)) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n this.ownerIn = undefined;\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.editRangeStart = undefined;\n _this.documentHelper = node.documentHelper;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[i];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (this.action === 'RestrictEditing') {\n var user = this.editRangeStart.user !== '' ? this.editRangeStart.user : this.editRangeStart.group;\n if (this.editorHistory.isUndoing) {\n var index = this.owner.documentHelper.editRanges.get(user).indexOf(this.editRangeStart);\n if (index !== -1) {\n this.owner.documentHelper.editRanges.get(user).splice(index, 1);\n }\n }\n else {\n this.owner.editor.updateRangeCollection(this.editRangeStart, user);\n }\n this.owner.selection.updateEditRangeCollection();\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @param {DocumentEditor} node - Specified the document editor.\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n this.historyInfoStack = [];\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.documentHelper = node.documentHelper;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n * @returns {HistoryInfo} - Returns the history info.\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n /**\n * @private\n * @param {HistoryInfo} value - Specified the value.\n */\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the undo stack.\n */\n get: function () {\n return this.undoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the redo stack.\n */\n get: function () {\n return this.redoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets or Sets the limit of undo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n /**\n * Sets the limit of undo operations can be done.\n *\n * @aspType int\n * @param {number} value - Specified the value.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets or Sets the limit of redo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n /**\n * Gets or Sets the limit of redo operations can be done.\n *\n * @aspType int\n * @param {number} value - Specified the value.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether undo operation can be done.\n *\n * @returns {boolean} - Returns the canUndo.\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether redo operation can be done.\n *\n * @returns {boolean} - Returns the canRedo.\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization\n /**\n * initialize EditorHistory\n *\n * @private\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n this.currentBaseHistoryInfo.destroy();\n }\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n this.currentBaseHistoryInfo.updateSelection();\n };\n /**\n * Initialize complex history\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n * @param {Point} startingPoint - Specifies the start point.\n * @param {TableResizer} tableResize - Spcifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n /* eslint-disable-next-line max-len */\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat));\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n }\n }\n };\n /**\n * Update resizing history\n *\n * @private\n * @param {Point} point - Specifies the point.\n * @param {TableResizer} tableResize - Specifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistory.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n *\n * @private\n * @param {BaseHistoryInfo} baseHistoryInfo - Specified the base history info.\n * @returns {void}\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n };\n /**\n * update EditorHistory\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n * @returns {boolean} -Returns isHandleComplexHistory\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n isHandledComplexHistory = this.owner.editorModule.insertRemoveBookMarkElements();\n }\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.documentHelper.selection;\n if (this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink' || this.currentHistoryInfo.action === 'SkipCommentInline'\n || this.currentHistoryInfo.action === 'DeleteCommentInline' || this.currentHistoryInfo.action === 'RemoveComment') {\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistory.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.documentHelper.contentControlCollection = [];\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n this.documentHelper.removeEmptyPages();\n }\n }\n if (this.owner.showRevisions) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n if (this.currentHistoryInfo.action === 'ApplyStyle') {\n this.owner.editor.getOffsetValue(selection);\n }\n else {\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n }\n selection.upDownSelectionLength = selection.end.location.x;\n this.documentHelper.isScrollHandler = true;\n this.viewer.updateScrollBars();\n selection.fireSelectionChanged(true);\n this.documentHelper.isScrollHandler = false;\n this.documentHelper.updateFocus();\n this.updateComplexHistoryInternal();\n this.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n *\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n *\n * @private\n * @param {WAbstractList} currentAbstractList - Specfies the abstractlist.\n * @param {WList} list - Specifies the list.\n * @returns {Dictionary} - Returns the modified action.\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.documentHelper.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.documentHelper.getAbstractListById(list.abstractListId).levels[i];\n this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[i]);\n if (!isNullOrUndefined(levels)) {\n this.documentHelper.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[i]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Dictionary} modifiedLevelsInternal - Specifies the modified levels.\n * @returns {void}\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.documentHelper.listParagraphs.length; i++) {\n var paragraph = this.documentHelper.listParagraphs[i];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.documentHelper.getListById(paraFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n *\n * @private\n * @param {Dictionary} modifiedCollection - Specifies the modified colection.\n * @returns {void }\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.documentHelper.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[i];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.owner.editorModule.layoutWholeDocument();\n var selection = this.documentHelper.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Reverts the last editing action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.undo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly')) ||\n !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.redo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly'))\n || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = -1;\n this.currentResizingTable = undefined;\n /**\n * @private\n */\n this.checkCellMinWidth = false;\n this.owner = node;\n this.documentHelper = this.owner.documentHelper;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateResizingHistory(touchPoint, this);\n }\n this.documentHelper.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.documentHelper.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistory.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[i].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = cellWidget.columnIndex;\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[i].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[i];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n /* eslint-disable-next-line max-len */\n && (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n TableResizer.prototype.handleResizing = function (touchPoint) {\n var dragValue = 0;\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || this.resizerPosition === -1) {\n return;\n }\n var selection = this.owner.selection;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting.\n }\n var row = undefined;\n if (this.resizerPosition > -1) {\n row = table.childWidgets[this.resizerPosition];\n if (row) {\n this.updateRowHeight(row, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.documentHelper.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.documentHelper.layout.reLayoutTable(table);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (row) {\n this.getRowReSizerPosition(undefined, this.startingPoint);\n }\n if (this.currentResizingTable && (this.currentResizingTable.childWidgets === undefined\n || this.currentResizingTable.childWidgets[this.resizerPosition] === undefined)) {\n this.resizerPosition = -1;\n }\n };\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var body = currentPage.headerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, body);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, bodywid);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[j] instanceof TableWidget) {\n var childWidget = widget.childWidgets[j];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= point.x && (childWidget.x + tableWidth) >= point.x &&\n childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y))) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var body = currentPage.headerWidget;\n widget = body.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = bodywid.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.documentHelper.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets) || this.resizerPosition < 0) {\n return;\n }\n if (dragValue < 0) {\n this.checkCellMinWidth = true;\n }\n var selectionFlag = true;\n var selection = this.owner.selection;\n this.owner.editor.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[columnIndex];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minWidth;\n }\n } while (dragValue !== prevDragValue);\n }\n else {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n } while (dragValue !== prevDragValue);\n }\n var dragOffset = dragValue;\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth(0) > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth(0) < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateCellPreferredWidths(table);\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n this.checkCellMinWidth = false;\n };\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n //const newIndent: number = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[i]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[i]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n //const rightColumnCollection: TableCellWidget[] = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth(0) > containerWidth) {\n table.tableFormat.allowAutoFit = false;\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[columnIndex];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateGridValue(table, false, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.documentHelper.layout.getParentTable(table);\n this.documentHelper.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.owner.editor.getOffsetValue(this.documentHelper.selection);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n /* eslint-disable-next-line max-len */\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[i_1];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selection;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n table.tableFormat.allowAutoFit = tableHistoryInfo.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = tableHistoryInfo.rows[i];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = rowFormat.cells[j];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[i].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth));\n }\n if (row.rowFormat.gridAfter > 0) {\n /* eslint-disable-next-line max-len */\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth), row);\n }\n }\n };\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","import { TextPosition, ImageInfo } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, CommentElementBox, CommentCharacterElementBox, CheckBoxFormField, DropDownFormField, TextFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods, Base64 } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList, L10n } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { protectionTypeChangeEvent } from '../../base/index';\nimport { SelectionCharacterFormat } from '../index';\nimport { PageLayoutViewer } from '../index';\nimport { WCharacterStyle } from '../format/style';\nimport { HistoryInfo } from '../editor-history/index';\nimport { TableResizer } from './table-resizer';\nimport { Dictionary } from '../../base/dictionary';\nimport { WParagraphStyle } from '../format/style';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Revision } from '../track-changes/track-changes';\nimport { XmlHttpRequestHandler } from '../../base/ajax-helper';\nimport { beforeCommentActionEvent, trackChangeEvent, beforeXmlHttpRequestSend } from '../../base/index';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n *\n * @param {DocumentHelper} documentHelper - Document helper\n * @private\n */\n function Editor(documentHelper) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.formFieldCounter = 1;\n this.skipFieldDeleteTracking = false;\n this.isForHyperlinkFormat = false;\n this.isTrackingFormField = false;\n this.isInsertText = false;\n /**\n * @private\n */\n this.removeEditRange = false;\n /**\n * @private\n */\n this.isRemoveRevision = false;\n /**\n * @private\n */\n this.isFootNoteInsert = false;\n /**\n * @private\n */\n this.isTableInsert = false;\n /**\n * @private\n */\n this.isFootNote = false;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.isUserInsert = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n /**\n * @private\n */\n this.triggerPageSpellCheck = true;\n /**\n * @private\n */\n this.chartType = false;\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n this.pageRefFields = {};\n this.delBlockContinue = false;\n this.delBlock = undefined;\n this.delSection = undefined;\n /**\n * @private\n */\n this.isInsertingTOC = false;\n this.editStartRangeCollection = [];\n this.skipReplace = false;\n this.skipTableElements = false;\n /**\n * @private\n */\n this.listNumberFormat = '';\n /**\n * @private\n */\n this.listLevelNumber = 0;\n /**\n * @private\n */\n this.isXmlMapped = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.copiedContent = '';\n /**\n * @private\n */\n this.copiedTextContent = '';\n /**\n * @private\n */\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.pasteTextPosition = undefined;\n //public isSkipHistory: boolean = false;\n this.isPaste = false;\n this.isPasteListUpdated = false;\n this.isHtmlPaste = false;\n /**\n * @private\n */\n this.isInsertField = false;\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n * @returns {void}\n */\n this.onTextInputInternal = function () {\n if (Browser.isDevice) {\n var documentHelper = _this.documentHelper;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n documentHelper.prefix = documentHelper.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = documentHelper.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (documentHelper.isCompositionStart && documentHelper.isCompositionUpdated) {\n documentHelper.isCompositionUpdated = false;\n if (!documentHelper.owner.isReadOnlyMode && documentHelper.owner.isDocumentLoaded && _this.canEditContentControl) {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (documentHelper.isCompositionStart && documentHelper.isCompositionEnd && documentHelper.suffix === '') {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && documentHelper.isCompositionStart) {\n documentHelper.isCompositionStart = false;\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - documentHelper.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (documentHelper.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n documentHelper.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (documentHelper.prefix.substring(2) === textBoxText && documentHelper.suffix === '') {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n documentHelper.isCompositionEnd = false;\n return;\n }\n else if (documentHelper.isCompositionEnd || documentHelper.isCompositionStart && !documentHelper.isCompositionUpdated) {\n if (textBoxText.length < documentHelper.prefix.length &&\n /* eslint-disable-next-line max-len */\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1) || documentHelper.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (documentHelper.suffix !== '' &&\n documentHelper.editableDiv.innerText[documentHelper.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n documentHelper.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n /* eslint-disable-next-line max-len */\n _this.selection.end.setPositionForLineWidget(documentHelper.selection.end.currentWidget, _this.selection.end.offset + documentHelper.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !documentHelper.owner.isReadOnlyMode && documentHelper.isControlPressed === false && _this.canEditContentControl) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < documentHelper.prefix.length &&\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1)) {\n _this.handleBackKey();\n if (documentHelper.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(documentHelper.prefix) === 0 && text.length > documentHelper.prefix.length) {\n _this.handleTextInput(text.substring(documentHelper.prefix.length));\n }\n else if (text.indexOf(documentHelper.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === documentHelper.prefix.substring(2)) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionParagraph(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.documentHelper.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !_this.owner.isReadOnlyMode && _this.documentHelper.isControlPressed === false && _this.canEditContentControl) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.documentHelper.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @param {ClipboardEvent} event - Specfies clipboard event\n * @private\n * @returns {void}\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode && _this.canEditContentControl) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.documentHelper = documentHelper;\n this.tableResize = new TableResizer(this.documentHelper.owner);\n this.base64 = new Base64();\n }\n Object.defineProperty(Editor.prototype, \"restrictFormatting\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict formatting\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && (this.documentHelper.restrictFormatting\n || (!this.documentHelper.restrictFormatting && !this.selection.isSelectionInEditRegion()));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"restrictEditing\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict editing\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && ((this.documentHelper.protectionType === 'ReadOnly' || this.documentHelper.isCommentOnlyMode)\n && !this.selection.isSelectionInEditRegion() || this.documentHelper.protectionType === 'FormFieldsOnly');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"canEditContentControl\", {\n /**\n * @private\n * @returns {boolean} - Returns the can edit content control.\n */\n get: function () {\n if (this.owner.isReadOnlyMode) {\n return false;\n }\n if (this.selection.checkContentControlLocked()) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"viewer\", {\n get: function () {\n if (!isNullOrUndefined(this.owner)) {\n return this.owner.viewer;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.documentHelper.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n /**\n * Sets the field information for the selected field.\n *\n * @param { FieldInfo } fieldInfo – Specifies the field information.\n * @returns {void}\n * > Nested field gets replaced completely with the specified field information.\n */\n Editor.prototype.setFieldInfo = function (fieldInfo) {\n var field = this.selection.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n this.selection.selectField();\n this.insertField(fieldInfo.code, fieldInfo.result);\n }\n };\n /**\n * Inserts the specified field at cursor position\n *\n * @param {string} code - Specify the field code\n * @param {string} result - Specify the field result\n * @returns {void}\n */\n Editor.prototype.insertField = function (code, result) {\n this.isInsertField = true;\n var fieldCode = code;\n fieldCode = HelperMethods.trimStart(fieldCode);\n if (fieldCode.substring(0, 8) === 'NUMPAGES') {\n this.insertPageCount(result);\n }\n else if (fieldCode.substring(0, 4) === 'PAGE') {\n this.insertPageNumber(result);\n }\n else {\n if (isNullOrUndefined(result)) {\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '«' + fieldCode.substring(0, index).trim() + '»';\n }\n }\n var paragraph = new ParagraphWidget();\n var insertFormat = new WCharacterFormat();\n var selectionFormat = this.copyInsertFormat(insertFormat, false);\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.characterFormat.mergeFormat(selectionFormat);\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.mergeFormat(selectionFormat);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n fieldResultSpan.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.mergeFormat(selectionFormat);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.childWidgets.push(paragraph);\n this.pasteContentsInternal([section], false);\n }\n this.isInsertField = false;\n };\n /**\n * To update style for paragraph\n *\n * @param {string} style - style name\n * @param {boolean} clearDirectFormatting - Removes manual formatting (formatting not applied using a style)\n * from the selected text, to match the formatting of the applied style. Default value is false.\n * @returns {void}\n */\n Editor.prototype.applyStyle = function (style, clearDirectFormatting) {\n clearDirectFormatting = isNullOrUndefined(clearDirectFormatting) ? false : clearDirectFormatting;\n var startPosition = undefined;\n var endPosition = undefined;\n if (clearDirectFormatting) {\n this.initComplexHistory('ApplyStyle');\n this.setOffsetValue(this.selection);\n startPosition = this.startOffset;\n endPosition = this.endOffset;\n var isSelectionEmpty = this.selection.isEmpty;\n this.clearFormatting();\n if (isSelectionEmpty && !this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n var styleObj = this.documentHelper.styles.findByName(style);\n if (styleObj !== undefined) {\n if (styleObj instanceof WCharacterStyle && styleObj.type === 'Character') {\n if (this.selection.isEmpty) {\n var offset = this.selection.start.offset;\n var preservedStartPosition = this.selection.start.clone();\n var preservedEndPosition = this.selection.end.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n this.selection.characterFormat.copyFormat(styleObj.characterFormat);\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('styleName', styleObj, false, true);\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(style)), this.documentHelper.styles);\n this.applyStyle(style);\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ApplyStyle') {\n this.startOffset = startPosition;\n this.endOffset = endPosition;\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n *\n * @returns {void}\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty || !this.canEditContentControl) {\n return;\n }\n this.selection.copySelectedContent(true);\n this.documentHelper.owner.parser.isCutPerformed = true;\n };\n /**\n * Insert editing region in current selection range.\n *\n * @param {string} user - Specified the native rendering\n * @returns {void}\n */\n Editor.prototype.insertEditingRegion = function (user) {\n this.insertEditRangeElement(user && user !== '' ? user : 'Everyone');\n };\n Editor.prototype.enforceProtection = function (credential, restrictFormatType, isReadOnly) {\n var typeOfProtection;\n var limitToFormatting;\n if (typeof (restrictFormatType) === 'boolean') {\n typeOfProtection = isReadOnly ? 'ReadOnly' : this.documentHelper.protectionType;\n limitToFormatting = restrictFormatType;\n }\n else {\n limitToFormatting = true;\n typeOfProtection = restrictFormatType;\n }\n this.documentHelper.restrictFormatting = limitToFormatting;\n this.documentHelper.protectionType = typeOfProtection;\n this.selection.isHighlightEditRegion = true;\n this.addProtection(credential, this.documentHelper.protectionType);\n };\n Editor.prototype.getCommentHierarchicalIndex = function (comment) {\n var index = '';\n while (comment.ownerComment) {\n if (!isNullOrUndefined(comment.ownerComment)) {\n index = comment.ownerComment.replyComments.indexOf(comment) + ';' + index;\n comment = comment.ownerComment;\n }\n else {\n index = comment.replyComments.indexOf(comment) + ';' + index;\n comment = comment;\n }\n }\n index = 'C;' + this.documentHelper.comments.indexOf(comment) + ';' + index;\n return index;\n };\n Editor.prototype.alertBox = function () {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n DialogUtility.alert(localObj.getConstant('Multiple Comment'));\n };\n /**\n * Insert comment\n *\n * @param {string} text - comment text.\n * @returns {void}\n */\n // Comment implementation starts\n Editor.prototype.insertComment = function (text) {\n if (isNullOrUndefined(this.selection.start) || (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || this.viewer.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n if (this.viewer.owner.commentReviewPane.commentPane.isEditMode) {\n return this.alertBox();\n }\n if (isNullOrUndefined(text)) {\n text = '';\n }\n this.insertCommentInternal(text);\n };\n Editor.prototype.insertCommentInternal = function (text) {\n if (this.selection.isEmpty) {\n // If selection is at paragraph end, move selection to previous word similar to MS Word\n if (this.selection.start.isAtSamePosition(this.selection.end) && this.selection.start.isAtParagraphEnd) {\n var startOffset = this.selection.start.offset;\n this.selection.start.offset = startOffset - 1 !== -1 ? startOffset - 1 : startOffset;\n }\n this.selection.selectCurrentWord();\n // If paragraph mark selected, remove paragraph mark selection\n if (this.selection.isParagraphLastLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getLineLength(this.selection.end.currentWidget) + 1) {\n this.selection.end.offset -= 1;\n }\n }\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startIndex = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var endParagraphInfo = this.selection.getParagraphInfo(this.selection.end);\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n this.initComplexHistory('InsertComment');\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n this.initInsertInline(commentRangeStart);\n if (isNullOrUndefined(position.paragraph)) {\n var endIndex_1 = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n var endPos = this.selection.getTextPosBasedOnLogicalIndex(endIndex_1);\n position.setPositionInternal(endPos);\n }\n // Updates the cloned position, since comment start is added in the same line.\n if (isSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var commentAdv = new CommentElementBox(HelperMethods.getUtcDate());\n if (this.owner.editorHistory) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(commentAdv);\n }\n commentAdv.author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n commentAdv.initial = this.constructCommentInitial(commentAdv.author);\n commentAdv.text = text;\n commentAdv.commentId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n commentRangeStart.comment = commentAdv;\n commentRangeStart.commentId = commentAdv.commentId;\n commentRangeEnd.comment = commentAdv;\n commentRangeEnd.commentId = commentAdv.commentId;\n commentAdv.commentStart = commentRangeStart;\n commentAdv.commentEnd = commentRangeEnd;\n this.addCommentWidget(commentAdv, true, true, true);\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(commentAdv);\n this.editorHistory.updateHistory();\n }\n // this.selection.selectPosition(this.selection.getTextPosBasedOnLogicalIndex(startIndex), this.selection.getTextPosBasedOnLogicalIndex(endIndex));\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection, false);\n if (!this.isUserInsert) {\n var comment = this.owner.commentReviewPane.commentPane.comments.get(commentAdv);\n comment.postComment();\n }\n };\n /**\n * Delete all the comments in current document\n *\n * @returns {void}\n */\n Editor.prototype.deleteAllComments = function () {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n // this.documentHelper.clearSearchHighlight();\n this.initComplexHistory('DeleteAllComments');\n this.owner.isLayoutEnabled = false;\n var historyInfo;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo = this.editorHistory.currentHistoryInfo;\n }\n while (this.documentHelper.comments.length > 0) {\n var comment = this.documentHelper.comments[0];\n this.initComplexHistory('DeleteComment');\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo.addModifiedAction(this.editorHistory.currentHistoryInfo);\n }\n }\n this.selection.selectContent(this.owner.documentStart, true);\n if (this.editorHistory) {\n this.editorHistory.currentHistoryInfo = historyInfo;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * Delete current selected comment.\n *\n * @returns {void}\n */\n Editor.prototype.deleteComment = function () {\n if ((this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || isNullOrUndefined(this.owner) || isNullOrUndefined(this.owner.viewer)\n || isNullOrUndefined(this.owner.documentHelper.currentSelectedComment) || this.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n this.deleteCommentInternal(this.owner.documentHelper.currentSelectedComment);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentInternal = function (comment) {\n this.initComplexHistory('DeleteComment');\n if (comment) {\n if (comment.replyComments.length > 0) {\n for (var i = comment.replyComments.length - 1; i >= 0; i--) {\n this.deleteCommentInternal(comment.replyComments[i]);\n }\n }\n this.deleteCommentWidgetInternal(comment);\n var commentStart = comment.commentStart;\n var commentEnd = comment.commentEnd;\n if (commentEnd.indexInOwner !== -1) {\n this.removeInline(commentEnd);\n }\n if (commentStart.indexInOwner !== -1) {\n this.removeInline(commentStart);\n }\n commentStart.removeCommentMark();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.deleteCommentWidgetInternal = function (comment) {\n if (this.owner.editorHistory) {\n this.initHistory('DeleteCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(comment);\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.deleteCommentWidget(comment);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentWidget = function (comment) {\n var commentIndex = this.documentHelper.comments.indexOf(comment);\n if (commentIndex !== -1) {\n this.documentHelper.comments.splice(commentIndex, 1);\n }\n else if (comment.isReply && comment.ownerComment) {\n commentIndex = comment.ownerComment.replyComments.indexOf(comment);\n comment.ownerComment.replyComments.splice(commentIndex, 1);\n }\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.deleteComment(comment);\n if (this.documentHelper.currentSelectedComment === comment) {\n this.documentHelper.currentSelectedComment = undefined;\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.resolveComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Resolve' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Resolve') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, true);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.reopenComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Reopen' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reopen') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, false);\n };\n /**\n * @private\n */\n Editor.prototype.resolveOrReopenComment = function (comment, resolve) {\n comment.isResolved = resolve;\n for (var i = 0; i < comment.replyComments.length; i++) {\n comment.replyComments[i].isResolved = resolve;\n }\n if (this.owner.commentReviewPane) {\n if (resolve) {\n this.owner.commentReviewPane.resolveComment(comment);\n }\n else {\n this.owner.commentReviewPane.reopenComment(comment);\n }\n }\n this.reLayout(this.selection, false, false);\n };\n /**\n * @param {CommentElementBox} parentComment - Specified the parent comment\n * @param {string} text - Specified the text.\n * @private\n * @returns {void}\n */\n Editor.prototype.replyComment = function (parentComment, text) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var commentWidget = parentComment;\n if (parentComment) {\n this.initComplexHistory('InsertComment');\n var currentCmtStart = commentWidget.commentStart;\n var currentCmtEnd = commentWidget.commentEnd;\n var offset = currentCmtStart.line.getOffset(currentCmtStart, 1);\n var startPosition = new TextPosition(this.documentHelper.owner);\n startPosition.setPositionParagraph(currentCmtStart.line, offset);\n var endOffset = currentCmtEnd.line.getOffset(currentCmtEnd, 1);\n var endPosition = new TextPosition(this.documentHelper.owner);\n endPosition.setPositionParagraph(currentCmtEnd.line, endOffset);\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n startPosition = this.selection.start;\n endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isAtSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n this.initInsertInline(commentRangeStart);\n // Updates the cloned position, since comment start is added in the same paragraph.\n if (isAtSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var replyComment = new CommentElementBox(HelperMethods.getUtcDate());\n replyComment.author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n replyComment.text = text ? text : '';\n replyComment.commentId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n replyComment.isReply = true;\n commentWidget.replyComments.push(replyComment);\n replyComment.ownerComment = commentWidget;\n if (this.owner.editorHistory) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistory.currentBaseHistoryInfo.removedNodes.push(replyComment);\n }\n commentRangeStart.comment = replyComment;\n commentRangeStart.commentId = replyComment.commentId;\n commentRangeEnd.comment = replyComment;\n commentRangeEnd.commentId = replyComment.commentId;\n replyComment.commentStart = commentRangeStart;\n replyComment.commentEnd = commentRangeEnd;\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.addReply(replyComment, false, true);\n }\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(replyComment);\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection);\n }\n };\n Editor.prototype.removeInline = function (element) {\n this.selection.start.setPositionParagraph(element.line, element.line.getOffset(element, 0));\n this.selection.end.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + element.length);\n this.initHistory('RemoveInline');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n }\n this.removeSelectedContents(this.documentHelper.selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @param {CommentElementBox} commentWidget - Specifies the comment\n * @param {boolean} isNewComment - Specifies is new comment\n * @param {boolean} showComments - Specifies show comments\n * @param {boolean} selectComment - Specified select comment\n * @private\n * @returns {void}\n */\n Editor.prototype.addCommentWidget = function (commentWidget, isNewComment, showComments, selectComment) {\n if (this.documentHelper.comments.indexOf(commentWidget) === -1) {\n var isInserted = false;\n if (this.documentHelper.comments.length > 0) {\n var currentStart = this.selection.getElementPosition(commentWidget.commentStart).startPosition;\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n /* eslint-disable-next-line max-len */\n var paraIndex = this.selection.getElementPosition(this.documentHelper.comments[i].commentStart).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.comments.splice(i, 0, commentWidget);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.comments.push(commentWidget);\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = showComments;\n this.owner.commentReviewPane.selectedTab = 0;\n this.owner.commentReviewPane.addComment(commentWidget, isNewComment, selectComment);\n if (selectComment) {\n this.owner.selection.selectComment(commentWidget);\n }\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specifies comment element box\n * @param {string} hierarchicalIndex - Specifies the hierachical index.\n * @private\n * @returns {void}\n */\n Editor.prototype.addReplyComment = function (comment, hierarchicalIndex) {\n var index = hierarchicalIndex.split(';');\n var ownerComment = this.documentHelper.comments[parseInt(index[1], 10)];\n if (index[2] !== '') {\n ownerComment.replyComments.splice(parseInt(index[2], 10), 0, comment);\n comment.ownerComment = ownerComment;\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = true;\n this.owner.commentReviewPane.addReply(comment, false, true);\n this.owner.selection.selectComment(comment);\n }\n };\n /**\n * @param {string} password - Specifies the password\n * @param {string} protectionType - Specifies the protection type\n * @private\n * @returns {void}\n */\n Editor.prototype.addProtection = function (password, protectionType) {\n if (password === '') {\n this.protectDocument(protectionType);\n }\n else {\n this.currentProtectionType = protectionType;\n var enforceProtectionHandler = new XmlHttpRequestHandler();\n var passwordBase64 = this.base64.encodeString(password);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: '',\n spinCount: 100000\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var url = this.owner.serviceUrl + this.owner.serverActionSettings.restrictEditing;\n enforceProtectionHandler.url = url;\n enforceProtectionHandler.contentType = 'application/json;charset=UTF-8';\n enforceProtectionHandler.onSuccess = this.enforceProtectionInternal.bind(this);\n enforceProtectionHandler.onFailure = this.protectionFailureHandler.bind(this);\n enforceProtectionHandler.onError = this.protectionFailureHandler.bind(this);\n enforceProtectionHandler.customHeaders = this.owner.headers;\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (this.documentHelper.dialog.visible) {\n this.documentHelper.dialog.hide();\n }\n }\n else {\n enforceProtectionHandler.send(formObject, httprequestEventArgs);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.protectionFailureHandler = function (result) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (result.name === 'onError') {\n DialogUtility.alert(localeValue.getConstant('Error in establishing connection with web server'));\n }\n else {\n this.owner.fireServiceFailure(result);\n console.error(result.statusText);\n }\n };\n Editor.prototype.enforceProtectionInternal = function (result) {\n var data = JSON.parse(result.data);\n this.documentHelper.saltValue = data[0];\n this.documentHelper.hashValue = data[1];\n this.protectDocument(this.currentProtectionType);\n };\n Editor.prototype.toggleTrackChangesProtection = function (enabled) {\n this.viewer.owner.enableTrackChanges = enabled;\n var eventArgs = { isTrackChangesEnabled: enabled };\n this.owner.trigger(trackChangeEvent, eventArgs);\n };\n Editor.prototype.protectDocument = function (protectionType) {\n this.protect(protectionType);\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(true);\n this.documentHelper.restrictEditingPane.loadPaneValue();\n this.documentHelper.dialog.hide();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n if (protectionType === 'RevisionsOnly') {\n this.toggleTrackChangesProtection(true);\n }\n this.owner.trackChangesPane.enableDisableButton(false);\n };\n /**\n * Stop document protection.\n *\n * @param {string} password - Specifies the password\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.stopProtection = function (password) {\n if (this.documentHelper.isDocumentProtected) {\n if ((!isNullOrUndefined(this.documentHelper.saltValue) || this.documentHelper.saltValue === '')\n && (!isNullOrUndefined(this.documentHelper.hashValue) || this.documentHelper.hashValue === '')\n && (!isNullOrUndefined(password) || password === '')) {\n this.unProtectDocument();\n return;\n }\n var unProtectDocumentHandler = new XmlHttpRequestHandler();\n var passwordBase64 = this.base64.encodeString(password);\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: this.documentHelper.saltValue,\n spinCount: 100000\n };\n unProtectDocumentHandler.url = this.owner.serviceUrl + this.owner.serverActionSettings.restrictEditing;\n unProtectDocumentHandler.contentType = 'application/json;charset=UTF-8';\n unProtectDocumentHandler.customHeaders = this.owner.headers;\n unProtectDocumentHandler.onSuccess = this.onUnProtectionSuccess.bind(this);\n unProtectDocumentHandler.onFailure = this.protectionFailureHandler.bind(this);\n unProtectDocumentHandler.onError = this.protectionFailureHandler.bind(this);\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (this.documentHelper.dialog.visible) {\n this.documentHelper.dialog.hide();\n }\n }\n else {\n unProtectDocumentHandler.send(formObject, httprequestEventArgs);\n }\n this.toggleTrackChangesProtection(false);\n }\n };\n Editor.prototype.onUnProtectionSuccess = function (result) {\n var encodeString = JSON.parse(result.data);\n this.validateHashValue(encodeString[1]);\n };\n Editor.prototype.validateHashValue = function (currentHashValue) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n var decodeUserHashValue = this.base64.decodeString(currentHashValue);\n var documentHashValue = this.documentHelper.hashValue;\n var defaultHashValue = this.base64.decodeString(documentHashValue);\n var stopProtection = true;\n if (decodeUserHashValue.length === defaultHashValue.length) {\n for (var i = 0; i < decodeUserHashValue.length; i++) {\n if (decodeUserHashValue[i] !== defaultHashValue[i]) {\n stopProtection = false;\n break;\n }\n }\n }\n else {\n stopProtection = false;\n }\n if (stopProtection) {\n this.unProtectDocument();\n }\n else {\n DialogUtility.alert(localeValue.getConstant('The password is incorrect'));\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unProtectDocument = function () {\n var previousProtectionType = this.documentHelper.protectionType;\n this.documentHelper.isDocumentProtected = false;\n this.documentHelper.restrictFormatting = false;\n this.documentHelper.protectionType = 'NoProtection';\n this.documentHelper.saltValue = '';\n this.documentHelper.hashValue = '';\n this.documentHelper.selection.highlightEditRegion();\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n }\n if (previousProtectionType === 'RevisionsOnly') {\n this.toggleTrackChangesProtection(false);\n }\n this.owner.trackChangesPane.enableDisableButton(true);\n if (!isNullOrUndefined(this.editorHistory)) {\n this.owner.editorHistory.clearHistory();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n this.documentHelper.dialog.hide();\n };\n /**\n * Notify content change event\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.fireContentChange = function () {\n if (this.selection.isHighlightEditRegion) {\n if (this.owner.enableLockAndEdit) {\n this.owner.collaborativeEditingModule.updateLockRegion();\n }\n else {\n this.selection.onHighlight();\n }\n }\n this.selection.highlightFormFields();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousSectionFormat = undefined;\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n if (this.documentHelper.owner.isLayoutEnabled && !this.documentHelper.owner.editor.isUserInsert && !this.documentHelper.owner.isShiftingEnabled) {\n this.documentHelper.owner.fireContentChange();\n }\n if (!isNullOrUndefined(this.selection.editPosition)) {\n this.triggerPageSpellCheck = false;\n }\n };\n /**\n * Update physical location for text position\n *\n * @param {boolean} isSelectionChanged - Specifies the selection change\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.predictText = function () {\n this.documentHelper.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.documentHelper.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.documentHelper.prefix = '@' + String.fromCharCode(160) + this.documentHelper.prefix; //  \n this.documentHelper.editableDiv.innerText = this.documentHelper.prefix;\n this.documentHelper.selection.setEditableDivCaretPosition(this.documentHelper.prefix.length);\n };\n /* eslint-disable */\n Editor.prototype.getPrefixAndSuffix = function () {\n //let viewer: LayoutViewer = this.owner.viewer;\n var editor = this.owner;\n var documentHelper = editor.documentHelper;\n if (this.selection.text !== '') {\n documentHelper.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n documentHelper.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* eslint-disable no-cond-assign */\n while ((spaceIndex = documentHelper.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && documentHelper.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n break;\n }\n }\n if (!(documentHelper.prefix.length > 1 && documentHelper.prefix[documentHelper.prefix.length - 1] === ' ' &&\n documentHelper.prefix[documentHelper.prefix.length - 2] === '.')) {\n spaceIndex = documentHelper.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n documentHelper.prefix = '';\n }\n documentHelper.prefix = spaceIndex < 0 ? documentHelper.prefix : documentHelper.prefix.substring(spaceIndex);\n if (documentHelper.prefix.indexOf(' ') === 0 && documentHelper.prefix.length >= 1) {\n documentHelper.prefix = documentHelper.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n documentHelper.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = documentHelper.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && documentHelper.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = documentHelper.suffix.indexOf(' ');\n documentHelper.suffix = spaceIndex < 0 ? documentHelper.suffix : documentHelper.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleCtrlBackKey();\n break;\n case 46:\n event.preventDefault();\n this.handleCtrlDelete();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.insertPageBreak();\n break;\n case 48:\n event.preventDefault();\n var value = 0;\n var beforeSpacing = this.documentHelper.selection.start.paragraph.paragraphFormat.beforeSpacing;\n if (beforeSpacing > 12) {\n value = 12;\n }\n else if (beforeSpacing > 0 && beforeSpacing <= 12) {\n value = 0;\n }\n else if (beforeSpacing === 0) {\n value = 12;\n }\n this.onApplyParagraphFormat('beforeSpacing', value, true, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selection.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selection.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editor.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, true);\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n break;\n case 69:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n var eventArgs = { isTrackChangesEnabled: !this.owner.enableTrackChanges };\n this.owner.trigger(trackChangeEvent, eventArgs);\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n case 70:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertFootnote();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertEndnote();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(true, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.documentHelper.triggerSpellCheck = true;\n this.handleEnterKey();\n this.documentHelper.triggerSpellCheck = false;\n break;\n case 27:\n event.preventDefault();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n case 32:\n this.selection.handleSpaceBarKey();\n break;\n case 120:\n var textPosition = this.selection.getDocumentEnd();\n textPosition.offset = (this.selection.getDocumentEnd().offset + 1);\n if (this.selection.start.isAtSamePosition(this.selection.getDocumentStart()) &&\n this.selection.end.isAtSamePosition(textPosition)) {\n this.owner.updateFields();\n }\n else {\n this.selection.updateRefField();\n }\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleBackKey = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.delete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleEnterKey = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n if (Browser.isDevice) {\n this.documentHelper.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles Control back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlBackKey = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isForward) {\n start = end;\n }\n if (this.selection.isEmpty) {\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n /* eslint-disable max-len */\n }\n else if (((isNullOrUndefined(start.paragraph.previousRenderedWidget) || start.paragraph.previousRenderedWidget instanceof TableWidget)\n && start.offset === 0)) {\n return;\n }\n else {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n }\n }\n };\n /**\n * Handles Ctrl delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isEmpty) {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftRightKey();\n var selectedText = this.selection.text;\n var checkSpace = HelperMethods.endsWith(selectedText);\n if (checkSpace) {\n this.selection.handleShiftLeftKey();\n }\n this.owner.editorModule.delete();\n }\n else {\n this.selection.handleControlShiftRightKey();\n this.owner.editorModule.delete();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode && this.canEditContentControl || this.selection.isInlineFormFillMode()) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text);\n /* eslint-disable @typescript-eslint/indent */\n this.animationTimer = setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600);\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n Editor.prototype.getResultContentControlText = function (element) {\n var ele = element.nextNode;\n var text = '';\n while (!(ele instanceof ContentControl)) {\n if (ele instanceof TextElementBox) {\n text += ele.text;\n }\n if (isNullOrUndefined(ele)) {\n break;\n }\n if (isNullOrUndefined(ele.nextNode)) {\n if (ele.paragraph.nextRenderedWidget) {\n ele = ele.paragraph.nextRenderedWidget.firstChild.children[0];\n }\n else {\n break;\n }\n }\n else {\n ele = ele.nextNode;\n }\n }\n return text;\n };\n Editor.prototype.updateXmlMappedContentControl = function () {\n if (this.isXmlMapped) {\n var startInlineEle = this.getContentControl();\n if (startInlineEle && startInlineEle.contentControlProperties) {\n this.updateCustomXml(startInlineEle.contentControlProperties.xmlMapping.storeItemId, startInlineEle.contentControlProperties.xmlMapping.xPath, this.getResultContentControlText(startInlineEle));\n }\n }\n };\n Editor.prototype.updateCustomXml = function (itemId, xPath, text) {\n if (this.documentHelper.customXmlData.containsKey(itemId)) {\n var xml = this.documentHelper.customXmlData.get(itemId);\n var parser = new DOMParser();\n var xmlDoc = parser.parseFromString(xml, 'text/xml');\n var lastText = xPath.substring(xPath.lastIndexOf('/') + 1);\n lastText = lastText.split('[')[0];\n lastText = lastText.substring(lastText.lastIndexOf(':') + 1);\n lastText = lastText.substring(lastText.lastIndexOf('@') + 1);\n var htmlCollec = xmlDoc.getElementsByTagName(lastText);\n if (htmlCollec.length > 0) {\n htmlCollec[0].childNodes[0].nodeValue = text;\n }\n else if (xmlDoc.documentElement.attributes.length > 0 && xmlDoc.documentElement.attributes.getNamedItem(lastText) !== null) {\n xmlDoc.documentElement.attributes.getNamedItem(lastText).value = text;\n }\n else {\n return;\n }\n var newXml = new XMLSerializer();\n var xmlString = newXml.serializeToString(xmlDoc);\n this.documentHelper.customXmlData.set(itemId, xmlString);\n }\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text - text to insert\n */\n Editor.prototype.insertText = function (text) {\n if (isNullOrUndefined(text) || text === '') {\n return;\n }\n this.insertTextInternal(text, false);\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.insertTextInternal = function (text, isReplace, revisionType) {\n if (text.indexOf('\\r') >= 0 || text.indexOf('\\n') >= 0) {\n if (text === '\\r' || text === '\\n' || text === '\\r\\n') {\n this.onEnter();\n }\n else {\n this.isInsertText = true;\n this.pasteContents(text);\n this.isInsertText = false;\n }\n return;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode()) {\n var inline = this.selection.getCurrentFormField();\n var resultText = this.getFieldResultText(inline);\n var rex = new RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.length > 0 && resultText.replace(rex, '') === '') {\n resultText = '';\n this.selection.selectFieldInternal(inline);\n }\n var maxLength = inline.formFieldData.maxLength;\n if (maxLength !== 0 && resultText.length >= maxLength) {\n return;\n }\n }\n var selection = this.documentHelper.selection;\n var insertPosition;\n var isRemoved = true;\n revisionType = (this.owner.enableTrackChanges && isNullOrUndefined(revisionType)) ? 'Insertion' : revisionType;\n var commentStarts = this.checkAndRemoveComments();\n this.isListTextSelected();\n if (isNullOrUndefined(revisionType) || revisionType === 'Insertion') {\n this.initHistory('Insert');\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var paraFormat = paragraphInfo.paragraph.paragraphFormat;\n selection.editPosition = selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var bidi = selection.start.paragraph.paragraphFormat.bidi;\n if ((!selection.isEmpty && !selection.isImageSelected) ||\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n var endPosition = undefined;\n if (this.owner.enableTrackChanges) {\n if (!this.selection.start.isExistBefore(this.selection.end)) {\n endPosition = this.selection.start.clone();\n }\n else {\n endPosition = this.selection.end.clone();\n }\n this.skipReplace = true;\n }\n isRemoved = this.removeSelectedContents(selection);\n this.skipReplace = false;\n if (!isNullOrUndefined(endPosition)) {\n if (this.owner.search.isRepalceTracking) {\n this.owner.search.isRepalceTracking = false;\n }\n this.selection.start.setPositionInternal(this.selection.start);\n this.selection.end.setPositionInternal(endPosition);\n }\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n else if (selection.isEmpty && !this.documentHelper.isListTextSelected && !isReplace) {\n this.documentHelper.isTextInput = true;\n }\n paragraphInfo = this.selection.getParagraphInfo(selection.start);\n paragraphInfo.paragraph.paragraphFormat.copyFormat(paraFormat);\n var isSpecialChars = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n span.characterFormat.bidi = isBidi;\n span.isRightToLeft = isBidi;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n if (this.owner.enableTrackChanges) {\n if (span.paragraph.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(span.paragraph.characterFormat.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, span.paragraph.characterFormat, span, true);\n }\n }\n else if (!this.checkToCombineRevisionWithPrevPara(span, revisionType)) {\n this.insertRevision(span, revisionType);\n }\n }\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline, bidi, (isReplace) ? false : true);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n inline.ischangeDetected = true;\n if (inline instanceof TextElementBox && text !== ' ' && this.documentHelper.owner.isSpellCheck) {\n this.owner.spellChecker.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n if (!isReplace) {\n inline.ignoreOnceItems = [];\n }\n }\n if (inline.canTrigger && inline.text.length <= 1) {\n inline.canTrigger = false;\n }\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n var insertLangId = this.documentHelper.textHelper.getRtlLanguage(text).id;\n var inlineLangId = 0;\n var isRtl = false;\n var isInlineContainsSpecChar = false;\n var isTextContainsSpecChar = false;\n if (inline instanceof TextElementBox) {\n inlineLangId = this.documentHelper.textHelper.getRtlLanguage(inline.text).id;\n isRtl = this.documentHelper.textHelper.getRtlLanguage(inline.text).isRtl;\n isTextContainsSpecChar = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n }\n if ((!isBidi && inline.characterFormat.bidi && (inlineLangId !== 0 || (isTextContainsSpecChar && isRtl)))\n || (text === ' ' && this.selection.characterFormat.bidi)) {\n isBidi = true;\n }\n if (isBidi || !this.documentHelper.owner.isSpellCheck) {\n insertFormat.bidi = isBidi;\n }\n if ((!this.documentHelper.owner.isSpellCheck || (text !== ' ' && inline.text !== ' ')) && insertFormat.isSameFormat(inline.characterFormat) && this.canInsertRevision(inline, revisionType)\n || (text.trim() === '' && !isBidi && inline.characterFormat.bidi) || isRtl && insertFormat.isSameFormat(inline.characterFormat) && isSpecialChars) {\n this.insertTextInline(inline, selection, text, indexInInline);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.isRightToLeft = isRtl;\n tempSpan.characterFormat.copyFormat(insertFormat);\n if (inline instanceof FootnoteElementBox) {\n tempSpan.characterFormat.baselineAlignment = 'Normal';\n }\n var isRevisionCombined = false;\n var insertIndex = inline.indexInOwner;\n var prevRevisionCount = tempSpan.revisions.length;\n if (indexInInline === inline.length) {\n var index = -1;\n index = insertIndex + 1;\n if (this.owner.enableTrackChanges && !(inline instanceof BookmarkElementBox)) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === prevRevisionCount) {\n if (inline.nextNode != undefined && inline.nextNode.revisions.length == 1) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n else if (inline.paragraph.characterFormat.revisions.length == 1 && inline.paragraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType, inline.paragraph);\n }\n else {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(index, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else if (indexInInline === 0) {\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === 0) {\n this.checkToMapRevisionWithPreviousNode(inline.previousNode, tempSpan, isBidi, revisionType);\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n if (!this.owner.enableTrackChanges && !this.selection.isInField) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n }\n inline.text = inline.text.slice(0, indexInInline);\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (isRevisionCombined || tempSpan.revisions.length > prevRevisionCount) {\n this.copyElementRevision(inline, splittedSpan, true);\n }\n else if (tempSpan.revisions.length === prevRevisionCount) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n this.insertRevision(tempSpan, revisionType);\n }\n }\n else if (this.selection.isInField) {\n this.copyElementRevision(inline, splittedSpan, false);\n this.updateElementInFieldRevision(inline, tempSpan, inline.revisions, true);\n }\n if (this.owner.isSpellCheck) {\n this.owner.spellChecker.updateSplittedElementError(inline, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.documentHelper.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n if (isNullOrUndefined(revisionType) || revisionType === 'Insertion') {\n this.reLayout(selection);\n }\n this.documentHelper.isTextInput = false;\n }\n this.updateXmlMappedContentControl();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var isList = false;\n if (!(text === '\\v')) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (!isList) {\n if (!isNullOrUndefined(selection.getHyperlinkField())) {\n return;\n }\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.updateElementInFieldRevision = function (revisionElement, elementToInclude, revisions, isEnd) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice(isEnd ? rangeIndex + 1 : rangeIndex, 0, elementToInclude);\n }\n };\n Editor.prototype.retrieveFieldResultantText = function (item) {\n var resultantText = '';\n if (item.fieldType === 1) {\n var textElement = item.previousElement;\n while (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n resultantText = textElement.text + resultantText;\n textElement = (!isNullOrUndefined(textElement.previousNode)) ? textElement.previousNode.previousValidNodeForTracking : undefined;\n }\n }\n return resultantText;\n };\n Editor.prototype.checkToCombineRevisionsinBlocks = function (tempSpan, checkWidget, isEnd, revisionType) {\n if (!checkWidget || !this.owner.enableTrackChanges) {\n return;\n }\n // if (tempSpan instanceof FieldElementBox && tempSpan.fieldType === 2) {\n // return;\n // }\n if (tempSpan instanceof BookmarkElementBox || tempSpan instanceof CommentCharacterElementBox || tempSpan instanceof EditRangeStartElementBox || tempSpan instanceof EditRangeEndElementBox) {\n return;\n }\n var isCombined = false;\n if (isEnd) {\n isCombined = this.combineRevisionWithNextPara(tempSpan, revisionType);\n }\n else {\n isCombined = this.combineRevisionWithPrevPara(tempSpan, revisionType);\n }\n if (!isCombined) {\n this.insertRevision(tempSpan, revisionType);\n }\n };\n Editor.prototype.checkToMapRevisionWithNextNode = function (inline, tempSpan, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara) && inlinePara.characterFormat.revisions.length == 1) {\n var nextElementPara = inlinePara.characterFormat;\n if (!isNullOrUndefined(nextElementPara)) {\n return this.checkToMapRevisionWithInlineText(undefined, 0, tempSpan, isBidi, revisionType, nextElementPara);\n }\n return false;\n }\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var nextElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(nextElement)) {\n return this.checkToMapRevisionWithInlineText(nextElement, 0, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithPreviousNode = function (inline, tempSpan, isBidi, revisionType) {\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var prevElement = inline.previousValidNodeForTracking;\n if (!isNullOrUndefined(prevElement)) {\n return this.checkToMapRevisionWithInlineText(prevElement, prevElement.length, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithInlineText = function (inline, indexInInline, newElement, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (!isNullOrUndefined(inlinePara) && inlinePara.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(undefined, newElement, indexInInline, true, isBidi, revisionType, inlinePara);\n }\n }\n else if (!isNullOrUndefined(inline)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (inline.length === indexInInline && inline.previousValidNodeForTracking != undefined) {\n inline = inline.previousValidNodeForTracking;\n indexInInline = inline.length;\n if (inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, false, isBidi, revisionType);\n }\n }\n else if (indexInInline === 0) {\n inline = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(inline) && inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, true, isBidi, revisionType);\n }\n }\n }\n return false;\n };\n Editor.prototype.combineElementRevisions = function (inline, elementToCombine) {\n if (inline.revisions.length === 0 || elementToCombine.revisions.length === 0) {\n return;\n }\n for (var i = 0; i < inline.revisions.length; i++) {\n var prevRevision = inline.revisions[i];\n for (var j = 0; j < elementToCombine.revisions.length; j++) {\n var currentRevision = elementToCombine.revisions[i];\n if (prevRevision.range.indexOf(elementToCombine) === -1 && currentRevision.revisionType === prevRevision.revisionType && currentRevision.author === prevRevision.author) {\n elementToCombine.revisions.splice(j, 1);\n prevRevision.range.push(elementToCombine);\n elementToCombine.revisions.splice(j, 0, prevRevision);\n }\n }\n }\n };\n Editor.prototype.applyMatchedRevisionInorder = function (inline, newElement, indexInInline, isBegin, isBidi, revisionType, inlinePara) {\n var revisionsMatched;\n if (!isNullOrUndefined(inlinePara) && isNullOrUndefined(inline)) {\n revisionsMatched = this.getMatchedRevisionsToCombine(inlinePara.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inlinePara, newElement, isBegin);\n }\n return false;\n }\n else {\n revisionsMatched = this.getMatchedRevisionsToCombine(inline.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inline, newElement, isBegin);\n }\n return false;\n }\n };\n Editor.prototype.copyElementRevision = function (elementToCopy, elementToInclude, isSplitElementMerged) {\n if (!this.isTrackingFormField) {\n for (var i = 0; i < elementToCopy.revisions.length; i++) {\n var currentRevision = elementToCopy.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(elementToCopy);\n elementToInclude.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex + ((isSplitElementMerged) ? 2 : 1), 0, elementToInclude);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.mapMatchedRevisions = function (revisions, revisionElement, elementToInclude, isBegin) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n if (!this.isRevisionAlreadyIn(elementToInclude, currentRevision) || elementToInclude instanceof WCharacterFormat) {\n elementToInclude.revisions.splice(0, 0, currentRevision);\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice((isBegin) ? rangeIndex : rangeIndex + 1, 0, elementToInclude);\n }\n }\n };\n Editor.prototype.isRevisionAlreadyIn = function (element, revision) {\n if (element.revisions.length > 0) {\n for (var i = 0; i < element.revisions.length; i++) {\n var elementRevision = element.revisions[i];\n if (elementRevision.revisionID === revision.revisionID) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.getMatchedRevisionsToCombine = function (revisions, revisionType) {\n var matchedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n if (this.isRevisionMatched(revisions[i], revisionType)) {\n matchedRevisions.push(revisions[i]);\n }\n }\n return matchedRevisions;\n };\n Editor.prototype.decideInlineForTrackChanges = function (inline, revisionType) {\n var matched = false;\n if (this.owner.enableTrackChanges && !this.canInsertRevision(inline, revisionType)) {\n var currentElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(currentElement) && this.canInsertRevision(currentElement, revisionType)) {\n inline = currentElement;\n matched = true;\n }\n }\n return { 'element': inline, 'isMatched': matched };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertIMEText = function (text, isUpdate) {\n if (this.documentHelper.lastComposedText === text && isUpdate) {\n return;\n }\n // Clone selection start position\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n // Insert IME text in current selection\n this.insertText(text);\n this.documentHelper.lastComposedText = text;\n // update selection start\n var start = this.selection.start;\n this.setPositionForCurrentIndex(start, startPosition);\n // Update selection end\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionForLineWidget(start.currentWidget, start.offset + text.length);\n this.selection.selectPosition(isUpdate ? start : endPosition, endPosition);\n };\n /**\n * Insert Section break at cursor position\n *\n * @returns {void}\n */\n Editor.prototype.insertSectionBreak = function () {\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(selection) || this.owner.isReadOnlyMode || selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initHistory('SectionBreak');\n if (!selection.isEmpty) {\n selection.selectContent(selection.isForward ? selection.start : selection.end, true);\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.insertSection(selection, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n if (this.owner.layoutType === 'Continuous') {\n this.layoutWholeDocument();\n }\n };\n Editor.prototype.combineRevisionWithBlocks = function (elementBox, revisionType) {\n if (!this.owner.enableTrackChanges || isNullOrUndefined(elementBox)) {\n return;\n }\n while (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox) {\n elementBox = elementBox.nextElement;\n }\n if (isNullOrUndefined(elementBox)) {\n return;\n }\n var prevPara = elementBox.paragraph.previousRenderedWidget;\n if (prevPara instanceof TableWidget) {\n return;\n }\n var isNew = true;\n if (!isNullOrUndefined(prevPara) && !prevPara.isEmpty() && prevPara.characterFormat.revisions.length > 0) {\n var lastLine_1 = prevPara.lastChild;\n if (isNullOrUndefined(lastLine_1) || lastLine_1.children.length === 0) {\n return;\n }\n var lastElement_1 = lastLine_1.children[lastLine_1.children.length - 1];\n while (lastElement_1 instanceof BookmarkElementBox || lastElement_1 instanceof CommentCharacterElementBox) {\n lastElement_1 = lastElement_1.previousElement;\n }\n if (lastElement_1.revisions.length > 0) {\n if (this.compareElementRevision(prevPara.characterFormat, elementBox)) {\n var currentRevision = elementBox.revisions[elementBox.revisions.length - 1];\n if (this.compareElementRevision(lastElement_1, elementBox)) {\n var lastElementRevision = lastElement_1.revisions[lastElement_1.revisions.length - 1];\n isNew = false;\n if (currentRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(currentRevision.range, lastElementRevision, lastElementRevision.range.indexOf(lastElement_1) + 1);\n }\n }\n }\n }\n }\n prevPara = null;\n var lastLine = elementBox.paragraph.lastChild;\n var lastElement = lastLine.children[lastLine.children.length - 1];\n elementBox = lastElement;\n var nextPara = elementBox.paragraph.nextRenderedWidget;\n if (nextPara instanceof TableWidget) {\n return;\n }\n if (!isNullOrUndefined(nextPara) && !nextPara.isEmpty() && elementBox.paragraph.characterFormat.revisions.length > 0) {\n // let lastLine: LineWidget = elementBox.paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox) {\n firstElement = firstElement.previousElement;\n }\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n if (firstElement.revisions.length > 0) {\n var firstEleRevision = firstElement.revisions[firstElement.revisions.length - 1];\n if (this.compareElementRevision(elementBox.paragraph.characterFormat, firstElement)) {\n if (this.compareElementRevision(elementBox, firstElement)) {\n var lastElementRevision = elementBox.revisions[elementBox.revisions.length - 1];\n isNew = false;\n if (firstEleRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(firstEleRevision.range, lastElementRevision, lastElementRevision.range.indexOf(elementBox) + 1);\n }\n }\n }\n }\n }\n if (elementBox.revisions.length === 0) {\n this.insertRevision(elementBox, revisionType);\n }\n };\n Editor.prototype.checkToCombineRevisionWithNextPara = function (elementBox, revisionType) {\n var nextPara = elementBox.paragraph.nextRenderedWidget;\n if (nextPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(nextPara) && !nextPara.isEmpty()) {\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox) {\n firstElement = firstElement.previousElement;\n }\n if (isNullOrUndefined(firstElement)) {\n return false;\n }\n if (firstElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, firstElement, elementBox, true);\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkToCombineRevisionWithPrevPara = function (elementBox, revisionType) {\n var prevPara = elementBox.paragraph.previousRenderedWidget;\n if (prevPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(prevPara) && prevPara.characterFormat.revisions.length > 0) {\n if (!this.isRevisionMatched(prevPara.characterFormat, revisionType)) {\n return false;\n }\n // let firstLine: LineWidget = prevPara.firstChild as LineWidget;\n // let lastLine: LineWidget = prevPara.lastChild as LineWidget;\n // if (isNullOrUndefined(lastLine) || lastLine.children.length === 0) {\n // return false;\n // }\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n // if (lastElement instanceof BookmarkElementBox || lastElement instanceof CommentCharacterElementBox) {\n // lastElement = lastElement.previousValidNodeForTracking;\n // }\n // if (isNullOrUndefined(lastElement)) {\n // return false;\n // }\n // if (lastElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevPara.characterFormat, elementBox, false);\n return true;\n }\n // }\n }\n return false;\n };\n Editor.prototype.combineRevisionWithNextPara = function (elementBox, revisionType) {\n var isLastLine = elementBox.line.isLastLine();\n var nextElement = elementBox.nextNode;\n if (isLastLine && isNullOrUndefined(nextElement)) {\n return this.checkToCombineRevisionWithNextPara(elementBox, revisionType);\n }\n return false;\n };\n Editor.prototype.combineRevisionWithPrevPara = function (elementBox, revisionType) {\n var isFirstLine = elementBox.line.isFirstLine();\n var prevElement = elementBox.previousNode;\n if (isFirstLine && isNullOrUndefined(prevElement)) {\n return this.checkToCombineRevisionWithPrevPara(elementBox, revisionType);\n }\n return false;\n };\n Editor.prototype.removeRevision = function (revisionToRemove) {\n var elementInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset + 1, 0);\n var elementBox = elementInfo.element;\n if (elementInfo.element.revisions.length > 0) {\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === revisionToRemove.revisionType) {\n var revision = elementBox.revisions[i];\n var startIndex = revision.range.indexOf(elementBox);\n for (var j = startIndex; startIndex < revision.range.length; startIndex++) {\n revision.range[j].revisions.splice(i, 1);\n revision.range.splice(j, 1);\n }\n }\n }\n }\n };\n Editor.prototype.clearElementRevision = function (revision) {\n if (isNullOrUndefined(revision)) {\n return;\n }\n for (var i = 0; i < revision.range.length; i++) {\n if (revision.range[i] instanceof ElementBox) {\n var currentElement = revision.range[i];\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n revision.range.splice(i, 1);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.insertRevision = function (item, type, author, date, spittedRange) {\n author = !isNullOrUndefined(author) ? author : this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n var currentDate = !isNullOrUndefined(date) ? date : HelperMethods.getUtcDate();\n if (item instanceof ElementBox && !isNullOrUndefined(item.line) && item.line.paragraph.associatedCell || (item instanceof WCharacterFormat && item.ownerBase instanceof ParagraphWidget && item.ownerBase.associatedCell)) {\n var cellWidget = undefined;\n if (item instanceof ElementBox) {\n cellWidget = item.line.paragraph.associatedCell;\n }\n else if (item instanceof WCharacterFormat) {\n cellWidget = item.ownerBase.associatedCell;\n }\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var rowFormat = cellWidget.ownerRow.rowFormat;\n var matchedRevisions = this.getMatchedRevisionsToCombine(rowFormat.revisions, type);\n if (matchedRevisions.length > 0) {\n for (var i = 0; i < matchedRevisions.length; i++) {\n item.revisions.splice(0, 0, matchedRevisions[i]);\n matchedRevisions[i].range.push(item);\n }\n return;\n }\n }\n }\n var revision = new Revision(this.owner, author, currentDate);\n revision.revisionType = type;\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n if (!isNullOrUndefined(spittedRange) && spittedRange.length > 0) {\n this.clearAndUpdateRevisons(spittedRange, revision, spittedRange.indexOf(item));\n }\n else {\n item.revisions.push(revision);\n revision.range.push(item);\n }\n this.updateRevisionCollection(revision);\n };\n /**\n * Method help to clear previous revisions and include new revision at specified index\n *\n * @param range - range of elements to be cleared\n * @param revision - revision to be inserted\n * @param index - index at which to be included in the revision range\n * @returns {void}\n */\n Editor.prototype.clearAndUpdateRevisons = function (range, revision, index) {\n for (var i = 0; i < range.length; i++) {\n if (range[i] instanceof ElementBox) {\n var currentElement = range[i];\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n currentElement.revisions.push(revision);\n revision.range.splice(index + i, 0, currentElement);\n }\n }\n };\n Editor.prototype.splitRevisionByElement = function (item, revision) {\n if (item.revisions.length > 0) {\n var range = revision.range;\n var index = range.indexOf(item);\n revision.range = range.splice(0, index + 1);\n return range;\n }\n return undefined;\n };\n /**\n * Method to update revision for the splitted text element\n * @param inline - Original text element\n * @param splittedSpan - Splitted element\n */\n Editor.prototype.updateRevisionForSpittedTextElement = function (inline, splittedSpan) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedRange = this.splitRevisionByElement(inline, revision);\n this.insertRevision(splittedSpan, revision.revisionType, revision.author, revision.date, splittedRange);\n }\n };\n Editor.prototype.isRevisionMatched = function (item, type) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n if (item instanceof Revision) {\n if ((isNullOrUndefined(type) || type === item.revisionType) && item.author === author) {\n return true;\n }\n }\n else if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var elementRevision = item.revisions[i];\n if ((isNullOrUndefined(type) || type === elementRevision.revisionType) && elementRevision.author === author) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.compareElementRevision = function (element, compare) {\n if (element.revisions.length === 0 || compare.revisions.length === 0) {\n return false;\n }\n for (var i = 0; i < element.revisions.length; i++) {\n var currentRevision = element.revisions[i];\n for (var j = 0; j < compare.revisions.length; j++) {\n if (currentRevision.author === compare.revisions[i].author && currentRevision.revisionType === compare.revisions[i].revisionType) {\n return true;\n }\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canInsertRevision = function (item, type) {\n var revisionType = isNullOrUndefined(type) ? 'Insertion' : type;\n if (revisionType === 'Deletion') {\n return false;\n }\n if (this.owner.enableTrackChanges) {\n return this.isRevisionMatched(item, revisionType);\n //if it has revision\n }\n else if (item.revisions.length > 0) {\n return false;\n }\n return true;\n };\n Editor.prototype.insertRevisionAtEnd = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.previousValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, true, revisionType);\n };\n Editor.prototype.insertRevisionAtPosition = function (item, newElement, isEnd, revisionType) {\n // if (newElement instanceof FieldElementBox && (newElement as FieldElementBox).fieldType === 2) {\n // return false;\n // }\n var prevRevisionLength = newElement.revisions.length;\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(item, (isEnd) ? item.length : 0, newElement, false, revisionType);\n // Check to combine with previous and next element\n if (isEnd) {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(item.nextNode, newElement, false, revisionType);\n }\n }\n else {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithPreviousNode(item.previousNode, newElement, false, revisionType);\n }\n }\n return isRevisionCombined;\n };\n Editor.prototype.insertRevisionAtBegining = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.nextValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, false, revisionType);\n };\n Editor.prototype.splitRevisionForSpittedElement = function (element, spittedElement) {\n for (var i = element.revisions.length - 1; i >= 0; i--) {\n var revision = element.revisions[i];\n var splittedRange = this.splitRevisionByElement(element, revision);\n this.insertRevision(spittedElement, revision.revisionType, revision.author, revision.date, splittedRange);\n }\n };\n /**\n * Method to combine element revision if not inserts new revision\n */\n // private checkToCombineRevision(element: ElementBox, newElement: ElementBox, revisionType: RevisionType): boolean {\n // let isCombined: boolean = false;\n // if (this.isRevisionMatched(element, revisionType)) {\n // isCombined = true;\n // this.combineElementRevision(element, newElement, true);\n // } else {\n // this.insertRevision(newElement, revisionType);\n // }\n // return isCombined;\n // }\n Editor.prototype.combineElementRevision = function (currentElementRevisions, elementToCombine) {\n for (var i = 0; i < currentElementRevisions.length; i++) {\n for (var j = 0; j < elementToCombine.length; j++) {\n var currentRevision = currentElementRevisions[i];\n var revisionToCombine = elementToCombine[i];\n if (currentRevision.author === revisionToCombine.author && currentRevision.revisionType === revisionToCombine.revisionType) {\n var rangeLength = revisionToCombine.range.length;\n for (var k = 0; k < rangeLength; k++) {\n var item = revisionToCombine.range[0];\n item.revisions.splice(item.revisions.indexOf(revisionToCombine), 1);\n revisionToCombine.range.splice(0, 1);\n currentRevision.range.push(item);\n item.revisions.push(currentRevision);\n }\n if (revisionToCombine.range.length === 0) {\n this.owner.revisions.remove(revisionToCombine);\n }\n }\n }\n }\n };\n Editor.prototype.combineRevisions = function (block, startPosition, endposition) {\n if (!this.owner.enableTrackChanges) {\n return;\n }\n var info = this.selection.getLineInfo(block, startPosition.offset);\n var elementInfo = info.line.getInline(startPosition.offset, 0);\n var currentElement = elementInfo.element;\n if (currentElement.revisions.length > 0) {\n if (this.isRevisionMatched(currentElement, 'Insertion')) {\n var nextElement = currentElement.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement.revisions.length > 0) {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var range = nextElement.revisions[nextElement.revisions.length - 1].range;\n this.clearAndUpdateRevisons(range, revision, revision.range.indexOf(currentElement) + 1);\n }\n }\n }\n // let startOffset: number = startPosition.currentWidget.getOffset(firstElement, 0);\n // let endOffset: number = endposition.currentWidget.getOffset(lastElement, 0);\n };\n /**\n * Method to update the revision for whole block\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.insertRevisionForBlock = function (widget, revisionType, isTOC, revision) {\n if (widget.childWidgets.length === 0 || !this.owner.enableTrackChanges) {\n return;\n }\n if (revisionType === 'Deletion') {\n var editPostion = this.selection.editPosition;\n var start = this.selection.start.clone();\n var end = this.selection.end.clone();\n this.documentHelper.layout.clearListElementBox(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var line = (widget.childWidgets[i]);\n this.removeContent(line, 0, this.documentHelper.selection.getLineLength(line));\n }\n this.selection.editPosition = editPostion;\n this.selection.start.setPositionInternal(start);\n this.selection.end.setPositionInternal(end);\n // let textPosition: TextPosition = this.selection.getTextPosBasedOnLogicalIndex(editPostion);\n // this.selection.selectContent(textPosition, true);\n this.removeEmptyLine(widget);\n this.documentHelper.layout.reLayoutParagraph(widget, 0, 0);\n }\n else {\n var skipParaMark = false;\n if (isNullOrUndefined(revision)) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n revision = new Revision(this.owner, author, HelperMethods.getUtcDate());\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n revision.revisionType = revisionType;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var elemets = widget.childWidgets[i].children;\n if (elemets.length === 0) {\n var paraIndex = widget.containerWidget.childWidgets.indexOf(widget);\n var prevWidget = undefined;\n if (paraIndex > 0) {\n prevWidget = widget.containerWidget.childWidgets[paraIndex - 1];\n }\n if (!isNullOrUndefined(prevWidget) && prevWidget instanceof ParagraphWidget && prevWidget.characterFormat.revisions.length > 0) {\n if (this.isRevisionMatched(prevWidget.characterFormat, revisionType)) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevWidget.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevWidget.characterFormat, widget.characterFormat, false);\n skipParaMark = true;\n revision = undefined;\n }\n }\n }\n }\n for (var j = 0; j < elemets.length; j++) {\n if (j === 0 && !isTOC) {\n var prevRevisionCount = elemets[i].revisions.length;\n this.checkToCombineRevisionsinBlocks(elemets[i], true, false, 'Insertion');\n if (elemets[i].revisions.length > prevRevisionCount) {\n revision = elemets[i].revisions[elemets[i].revisions.length - 1];\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n }\n if (!isTOC && !skipParaMark) {\n widget.characterFormat.revisions.push(revision);\n revision.range.push(widget.characterFormat);\n }\n if (!isNullOrUndefined(revision)) {\n this.updateRevisionCollection(revision);\n }\n }\n };\n Editor.prototype.updateRevisionCollection = function (revision) {\n var isInserted = false;\n var paraIndex = undefined;\n if (this.owner.revisions.changes.indexOf(revision) < 0) {\n if (!this.documentHelper.revisionsInternal.containsKey(revision.revisionID)) {\n this.documentHelper.revisionsInternal.add(revision.revisionID, revision);\n }\n if (this.owner.revisions.changes.length > 0) {\n var currentStart = this.owner.selection.start;\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var currentRange = this.owner.revisions.changes[i].range[0];\n if (currentRange instanceof ElementBox && !isNullOrUndefined(currentRange.line) && currentRange.line.paragraph.bodyWidget) {\n paraIndex = this.selection.getElementPosition(this.owner.revisions.changes[i].range[0]).startPosition;\n }\n else if (currentRange instanceof WRowFormat) {\n var rowWidget = currentRange.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n var firstPara = this.selection.getFirstParagraph(firstCell);\n if (firstPara.bodyWidget) {\n var selection = this.documentHelper.selection;\n this.updateEditPosition(firstCell, selection);\n paraIndex = this.selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n }\n }\n else if (currentRange instanceof WCharacterFormat) {\n var paraWidget = currentRange.ownerBase;\n if (paraWidget.lastChild && paraWidget.lastChild.paragraph.bodyWidget) {\n var offset = paraWidget.getLength();\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(paraWidget.lastChild, offset);\n paraIndex = startPosition;\n }\n }\n if (!isNullOrUndefined(paraIndex) && !isNullOrUndefined(currentStart)) {\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.owner.revisions.changes.splice(i, 0, revision);\n break;\n }\n }\n }\n }\n if (!isInserted) {\n this.owner.revisions.changes.push(revision);\n }\n this.documentHelper.updateAuthorIdentity();\n }\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Editor.prototype.insertSection = function (selection, selectFirstBlock) {\n var newSectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat.cloneFormat();\n var lastBlock;\n var firstBlock;\n if (selection.start.paragraph.isInsideTable) {\n var table = this.documentHelper.layout.getParentTable(selection.start.paragraph);\n table = table.combineWidget(this.owner.viewer);\n var insertBefore = false;\n if (selection.start.paragraph.associatedCell.rowIndex === 0) {\n insertBefore = true;\n }\n var newParagraph = new ParagraphWidget();\n var previousBlock = table.previousRenderedWidget;\n if (!insertBefore) {\n lastBlock = this.splitTable(table, selection.start.paragraph.associatedCell.ownerRow);\n this.documentHelper.layout.layoutBodyWidgetCollection(lastBlock.index, lastBlock.containerWidget, lastBlock, false);\n lastBlock = lastBlock.getSplitWidgets().pop();\n }\n else {\n lastBlock = table;\n }\n var insertIndex = 0;\n if ((isNullOrUndefined(previousBlock) || !previousBlock.bodyWidget.equals(lastBlock.bodyWidget)) && insertBefore) {\n insertIndex = 0;\n newParagraph.index = 0;\n }\n else {\n insertIndex = lastBlock.indexInOwner + 1;\n newParagraph.index = lastBlock.index + 1;\n }\n lastBlock.containerWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n newParagraph.containerWidget = lastBlock.containerWidget;\n this.updateNextBlocksIndex(newParagraph, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.containerWidget, newParagraph, false);\n lastBlock = newParagraph;\n }\n else {\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var selectionStart = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n //Split Paragraph\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, selectionStart);\n lastBlock = selection.start.paragraph.getSplitWidgets().pop();\n }\n //Split body widget\n firstBlock = this.splitBodyWidget(lastBlock.bodyWidget, newSectionFormat, lastBlock).firstChild;\n if (firstBlock instanceof TableWidget) {\n firstBlock.updateRowIndex(0);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(firstBlock.index, firstBlock.containerWidget, firstBlock, false);\n if (firstBlock instanceof TableWidget) {\n firstBlock = selection.getFirstParagraphInFirstCell(firstBlock);\n }\n if (selectFirstBlock) {\n selection.selectParagraphInternal(firstBlock, true);\n }\n return firstBlock;\n };\n /**\n * @private\n */\n Editor.prototype.splitBodyWidget = function (bodyWidget, sectionFormat, startBlock) {\n //let sectionIndex: number;\n //Move blocks after the start block to next body widget\n var newBodyWidget = this.documentHelper.layout.moveBlocksToNextPage(startBlock, true);\n //Update SectionIndex for splitted body widget\n this.updateSectionIndex(sectionFormat, newBodyWidget, true);\n // insert New header footer widget in to section index \n this.insertRemoveHeaderFooter(newBodyWidget.sectionIndex, true);\n if (this.documentHelper.viewer instanceof PageLayoutViewer) {\n //update header and footer for splitted widget\n this.documentHelper.layout.layoutHeaderFooter(newBodyWidget, this.owner.viewer, newBodyWidget.page);\n }\n //Update Child item index from 0 for new Section\n this.updateBlockIndex(0, newBodyWidget.firstChild);\n // Start sinfting from first block\n this.owner.viewer.updateClientArea(newBodyWidget.sectionFormat, newBodyWidget.page);\n return newBodyWidget;\n };\n Editor.prototype.insertRemoveHeaderFooter = function (sectionIndex, insert) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n // Need to handle further\n this.documentHelper.headersFooters.splice(sectionIndex, 0, {});\n }\n else {\n this.documentHelper.headersFooters[sectionIndex] = {};\n }\n };\n Editor.prototype.updateBlockIndex = function (blockIndex, block) {\n var blocks;\n var sectionIndex = block.bodyWidget.sectionIndex;\n do {\n blocks = block.getSplitWidgets();\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].index = blockIndex;\n }\n blockIndex++;\n block = blocks.pop().nextRenderedWidget;\n } while (!isNullOrUndefined(block) && block.bodyWidget.sectionIndex === sectionIndex);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionIndex = function (sectionFormat, startBodyWidget, increaseIndex) {\n var currentSectionIndex = startBodyWidget.sectionIndex;\n var blockIndex = 0;\n var bodyWidget = startBodyWidget;\n do {\n if (bodyWidget.index === currentSectionIndex && sectionFormat) {\n bodyWidget.sectionFormat = sectionFormat;\n }\n if (increaseIndex) {\n bodyWidget.index++;\n }\n else {\n bodyWidget.index--;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list) || selection.start.paragraph.containerWidget instanceof FootNoteWidget) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var previousList = undefined;\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n else {\n previousList = this.checkNextLevelAutoList(text);\n if (!isNullOrUndefined(previousList)) {\n convertList = true;\n }\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = String.fromCharCode(61623);\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n if (!isNullOrUndefined(previousList)) {\n selection.paragraphFormat.setList(previousList);\n }\n else {\n this.autoConvertList(selection, listLevel);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.checkNextLevelAutoList = function (text) {\n var selection = this.documentHelper.selection;\n var previousList = undefined;\n var convertList = false;\n var currentParagraph = selection.start.paragraph;\n var prevParagraph = selection.getPreviousParagraphBlock(currentParagraph);\n var isList = false;\n while (!isNullOrUndefined(prevParagraph) && prevParagraph instanceof ParagraphWidget) {\n if (prevParagraph.paragraphFormat.listFormat && prevParagraph.paragraphFormat.listFormat.listId !== -1) {\n isList = true;\n break;\n }\n prevParagraph = selection.getPreviousParagraphBlock(prevParagraph);\n }\n if (isList) {\n var listNumber = this.documentHelper.layout.getListNumber(prevParagraph.paragraphFormat.listFormat, true);\n var prevListText = listNumber.substring(0, listNumber.length - 1);\n var currentListText = text.substring(0, text.length - 1);\n //check if numberFormat equal\n var inputString = void 0;\n if (listNumber.substring(listNumber.length - 1) !== text.substring(text.length - 1)) {\n convertList = false;\n }\n else if (currentListText.match(/^[0-9]+$/) && prevListText.match(/^[0-9]+$/)) {\n inputString = parseInt(currentListText, 10);\n if (parseInt(prevListText, 10) === inputString || parseInt(prevListText, 10) + 1 === inputString\n || parseInt(prevListText, 10) + 2 === inputString) {\n convertList = true;\n }\n }\n else if (currentListText.match(/^[a-zA-Z]+$/) && prevListText.match(/^[a-zA-Z]+$/)) {\n if (prevListText.charCodeAt(0) === text.charCodeAt(0) || prevListText.charCodeAt(0) + 1 === text.charCodeAt(0)\n || prevListText.charCodeAt(0) + 2 === text.charCodeAt(0)) {\n convertList = true;\n }\n else if (currentListText.match(/^[MDCLXVImdclxvi]+$/) && prevListText.match(/^[MDCLXVImdclxvi]+$/)) {\n var prevListNumber = this.getNumber(prevListText.toUpperCase());\n var currentListNumber = this.getNumber(currentListText.toUpperCase());\n if (prevListNumber === currentListNumber || prevListNumber + 1 === currentListNumber\n || prevListNumber + 2 === currentListNumber) {\n convertList = true;\n }\n }\n }\n if (convertList) {\n previousList = this.documentHelper.getListById(prevParagraph.paragraphFormat.listFormat.listId);\n }\n }\n return previousList;\n };\n Editor.prototype.getNumber = function (roman) {\n var conversion = { 'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1 };\n var arr = roman.split('');\n var num = 0;\n for (var i = 0; i < arr.length; i++) {\n var currentValue = conversion[arr[i]];\n var nextValue = conversion[arr[i + 1]];\n if (currentValue < nextValue) {\n num -= (currentValue);\n }\n else {\n num += (currentValue);\n }\n }\n return num;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.documentHelper.lists.length > 0) {\n newList.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.documentHelper;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n newList.abstractList = newAbstractList;\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index, skipReLayout) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n if (isNullOrUndefined(skipReLayout) || !skipReLayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex, element.line.paragraph.bidi);\n }\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox) {\n this.insertBookMarkText(element, text);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.documentHelper.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, text) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n if (element instanceof EditRangeEndElementBox || element instanceof BookmarkElementBox) {\n element.line.children.splice(spanIndex, 0, spanObj);\n }\n else {\n element.line.children.splice(spanIndex + 1, 0, spanObj);\n }\n spanObj.line = element.line;\n this.documentHelper.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.documentHelper.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n if (selection.isInlineFormFillMode() && index == 0) {\n // special case to insert text before fieldEnd while filling a text form field.\n // when spell check enabled the white space and charaters are inserted as saperate text element box and getInline returns fieldEnd with index 0\n fieldEnd.line.children.splice(spanIndex, 0, span);\n }\n else {\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n }\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n if (this.owner.enableTrackChanges) {\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n var revisionType = 'Insertion';\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(fieldEnd, index, span, isBidi, revisionType);\n if (!isRevisionCombined && span.revisions.length === 0) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(fieldEnd.nextNode, span, isBidi, revisionType);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.documentHelper.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n if (this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat && this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousElement instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.documentHelper.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.documentHelper.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.selection.getParagraphInfo(selection.end);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.editorHistory.updateComplexHistory();\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.isForHyperlinkFormat = true;\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n this.isForHyperlinkFormat = false;\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n //this.documentHelper.layout.allowLayout = false;\n this.appylingHyperlinkFormat(selection);\n //this.documentHelper.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkRangeFromRevision = function (inline, removeCollection) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n if (rangeIndex >= 0) {\n currentRevision.range.splice(rangeIndex, 1);\n }\n if (currentRevision.range.length === 0 && removeCollection) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkWholeRangeInRevision = function (item, revision) {\n var currentRevision = revision;\n item.revisions.splice(item.revisions.indexOf(item), 1);\n var rangeLength = currentRevision.range.length;\n for (var rangeIndex = 0; rangeIndex < rangeLength; rangeIndex++) {\n currentRevision.range.splice(0, 1);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n if (inline.fieldEnd) {\n inline.fieldEnd.fieldBegin = undefined;\n }\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.documentHelper.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.documentHelper.fields.splice(fieldIndex, 1);\n }\n var formFieldIndex = this.documentHelper.formFields.indexOf(inline.fieldBegin);\n if (formFieldIndex !== -1) {\n this.documentHelper.formFields.splice(formFieldIndex, 1);\n }\n inline.fieldBegin.fieldEnd = undefined;\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Insert Hyperlink\n *\n * @param {string} address - Hyperlink URL\n * @param {string} displayText - Display text for the hyperlink\n * @param {string} screenTip - The screen tip text.\n * @returns {void}\n */\n Editor.prototype.insertHyperlink = function (address, displayText, screenTip) {\n address = address.replace(/\\s/g, \"\");\n if (isNullOrUndefined(displayText)) {\n displayText = address;\n }\n if (!isNullOrUndefined(screenTip)) {\n address = address + '\\\" \\\\o \\\"' + screenTip;\n }\n this.insertHyperlinkInternal(address, displayText, this.owner.selection.text !== displayText, false);\n };\n /**\n * @private\n */\n Editor.prototype.insertHyperlinkInternal = function (url, displayText, remove, isBookmark) {\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternalInternal(selection, url, displayText, isBookmark);\n }\n else {\n this.documentHelper.layout.allowLayout = false;\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var fieldStartPosition = new TextPosition(this.documentHelper.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.documentHelper.layout.allowLayout = true;\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.selection.getParagraphInfo(endPosition);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternalInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n var commentStarts = this.checkAndRemoveComments();\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n var isTrackEnabled = this.owner.enableTrackChanges;\n this.owner.enableTrackChanges = false;\n isRemoved = this.removeSelectedContents(selection);\n this.owner.enableTrackChanges = isTrackEnabled;\n }\n if (isRemoved) {\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n //let initial: number = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n this.insertElement(element);\n //let paragraph: ParagraphWidget = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n //let offset: number = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n Editor.prototype.initInsertInline = function (element, insertHyperlink) {\n this.initHistory('InsertInline');\n this.insertInlineInSelection(this.documentHelper.selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.insertElementInCurrentLine = function (selection, inline) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection - Specified the selection\n * @param {string} url - Specifies the url\n * @param {string} displayText - Specified the display test\n * @param {boolean} isBookmark - Specifies is bookmark\n * @private\n * @returns {boolean} - Return tru of hyperlink is edited.\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n this.skipFieldDeleteTracking = false;\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.skipFieldDeleteTracking = false;\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n offset = newFieldBegin.fieldEnd.line.getOffset(newFieldBegin.fieldEnd, 1);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraphInternal(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n *\n * @returns {void}\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var blockInfo = this.selection.getParagraphInfo(fieldStartPosition);\n var fieldStartString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n blockInfo = this.selection.getParagraphInfo(fieldSeparatorPosition);\n var fieldSeparatorString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n blockInfo = this.selection.getParagraphInfo(selection.start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n selection.end.setPositionInternal(selection.start);\n this.delete();\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldSeparatorString));\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n selection.end.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(startIndex));\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldStartString));\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event - Specifies the paste event\n * @param {any} pasteWindow - Specifies the paste window\n * @private\n */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n this.currentPasteOptions = this.owner.defaultPasteOption;\n this.isHtmlPaste = false;\n if (this.documentHelper.owner.enableLocalPaste) {\n this.paste();\n }\n else {\n this.selection.isViewPasteOptions = true;\n if (this.selection.pasteElement) {\n this.selection.pasteElement.style.display = 'none';\n }\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n var textContent = '';\n var htmlContent = '';\n var rtfContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n if (Browser.info.name !== 'msie') {\n rtfContent = clipbordData.getData('Text/Rtf');\n htmlContent = clipbordData.getData('Text/Html');\n }\n this.copiedTextContent = textContent = clipbordData.getData('Text');\n this.previousCharFormat = new WCharacterFormat();\n this.previousCharFormat.copyFormat(this.selection.start.paragraph.characterFormat);\n this.previousParaFormat = new WParagraphFormat();\n this.previousParaFormat.copyFormat(this.selection.start.paragraph.paragraphFormat);\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n htmlContent = '';\n rtfContent = '';\n }\n if (rtfContent !== '') {\n this.pasteAjax(rtfContent, '.rtf');\n }\n else if (htmlContent !== '') {\n this.isHtmlPaste = true;\n var doc = new DOMParser().parseFromString(htmlContent, 'text/html');\n var result = new XMLSerializer().serializeToString(doc);\n result = result.replace(//gi, '');\n result = result.replace(//gi, '');\n // Removed namesapce which is added when using XMLSerializer.\n // When copy content from MS Word, the clipboard html content already have same namespace which cause duplicate namespace\n // Here, removed the duplicate namespace.\n result = result.replace('xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n this.pasteAjax(result, '.html');\n }\n else if (textContent !== null && textContent !== '') {\n this.selection.currentPasteAction = 'TextOnly';\n this.pasteContents(textContent);\n this.applyPasteOptions(this.currentPasteOptions, true);\n this.copiedContent = undefined;\n this.documentHelper.editableDiv.innerHTML = '';\n }\n else if (Browser.info.name !== 'msie' && clipbordData.items !== undefined && clipbordData.items.length !== 0) {\n for (var m = 0; m < clipbordData.items.length; m++) {\n var item = clipbordData.items[m];\n if (item.type === 'image/png' || (item.type === \"image/svg+xml\" && item.kind !== 'string')) {\n this.pasteImage(item.getAsFile());\n }\n }\n }\n else if (Browser.info.name === 'msie' && clipbordData.files !== undefined && clipbordData.files.length !== 0 &&\n (clipbordData.files[0].type === 'image/png')) {\n this.pasteImage(clipbordData.files[0]);\n }\n // if (textContent !== '') {\n // this.pasteContents(textContent);\n // this.documentHelper.editableDiv.innerHTML = '';\n // }\n }\n };\n Editor.prototype.pasteImage = function (imgFile) {\n var _this = this;\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.onPasteImage(fileReader.result);\n };\n fileReader.readAsDataURL(imgFile);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPasteImage = function (data) {\n var image = document.createElement('img');\n var editor = this;\n image.addEventListener('load', function () {\n editor.insertImage(data, this.width, this.height);\n });\n image.src = data;\n };\n Editor.prototype.pasteAjax = function (content, type) {\n var proxy = this;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n content: content,\n type: type\n };\n var editor = this;\n this.pasteRequestHandler = new XmlHttpRequestHandler();\n this.owner.documentHelper.viewerContainer.focus();\n showSpinner(this.owner.element);\n this.pasteRequestHandler.url = proxy.owner.serviceUrl + this.owner.serverActionSettings.systemClipboard;\n this.pasteRequestHandler.responseType = 'json';\n this.pasteRequestHandler.contentType = 'application/json;charset=UTF-8';\n this.pasteRequestHandler.customHeaders = proxy.owner.headers;\n this.pasteRequestHandler.onSuccess = this.pasteFormattedContent.bind(this);\n this.pasteRequestHandler.onFailure = this.onPasteFailure.bind(this);\n this.pasteRequestHandler.onError = this.onPasteFailure.bind(this);\n var httprequestEventArgs = { serverActionType: 'SystemClipboard', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n hideSpinner(this.owner.element);\n }\n else {\n this.pasteRequestHandler.send(formObject, httprequestEventArgs);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteFormattedContent = function (result) {\n var _this = this;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.pasteContents(isNullOrUndefined(result.data) ? this.copiedTextContent : result.data);\n if (this.currentPasteOptions !== 'KeepSourceFormatting') {\n this.applyPasteOptions(this.currentPasteOptions);\n }\n hideSpinner(this.owner.element);\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 0);\n };\n Editor.prototype.onPasteFailure = function (result) {\n this.owner.fireServiceFailure(result);\n console.error(result.status, result.statusText);\n hideSpinner(this.owner.element);\n this.documentHelper.updateFocus();\n };\n /**\n * Pastes provided sfdt content or the data present in local clipboard if any.\n *\n * @param {string} sfdt? insert the specified sfdt content at current position\n * @returns {void}\n */\n Editor.prototype.paste = function (sfdt, defaultPasteOption) {\n var _this = this;\n if (isNullOrUndefined(sfdt)) {\n sfdt = this.owner.enableLocalPaste ? this.copiedData : undefined;\n }\n if (!isNullOrUndefined(defaultPasteOption)) {\n this.currentPasteOptions = defaultPasteOption;\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (sfdt) {\n var document_1 = JSON.parse(sfdt);\n this.pasteContents(document_1);\n this.applyPasteOptions(this.currentPasteOptions);\n if (this.chartType) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n this.chartType = false;\n }\n }\n };\n Editor.prototype.getUniqueListOrAbstractListId = function (isList) {\n if (isList && this.documentHelper.lists.length) {\n var sortedList = this.documentHelper.lists.slice().sort(function (a, b) {\n return a.listId - b.listId;\n });\n return sortedList[sortedList.length - 1].listId + 1;\n }\n else if (this.documentHelper.abstractLists.length) {\n var sortedAbsList = this.documentHelper.abstractLists.slice().sort(function (a, b) {\n return a.abstractListId - b.abstractListId;\n });\n return sortedAbsList[sortedAbsList.length - 1].abstractListId + 1;\n }\n return 0;\n };\n Editor.prototype.checkSameLevelFormat = function (lstLevelNo, abstractList, list) {\n return abstractList.levels[lstLevelNo].listLevelPattern === list.abstractList.levels[lstLevelNo].listLevelPattern\n && abstractList.levels[lstLevelNo].numberFormat === list.abstractList.levels[lstLevelNo].numberFormat\n && (abstractList.levels[lstLevelNo].listLevelPattern === 'Bullet'\n || abstractList.levels[lstLevelNo].startAt === list.abstractList.levels[lstLevelNo].startAt);\n };\n Editor.prototype.listLevelPatternInCollection = function (lstLevelNo, listLevel) {\n var _this = this;\n return this.documentHelper.lists.filter(function (list) {\n return list.abstractList.levels[lstLevelNo].listLevelPattern === listLevel.listLevelPattern\n && list.abstractList.levels[lstLevelNo].numberFormat === listLevel.numberFormat\n && (listLevel.listLevelPattern === 'Bullet' || list.abstractList.levels[lstLevelNo].startAt === listLevel.startAt)\n && _this.isEqualParagraphFormat(list.abstractList.levels[lstLevelNo].paragraphFormat, listLevel.paragraphFormat);\n })[0];\n };\n Editor.prototype.isEqualParagraphFormat = function (source, dest) {\n if ((isNullOrUndefined(dest.leftIndent) && source.leftIndent !== 0)\n || (!isNullOrUndefined(dest.leftIndent) && Math.round(source.leftIndent) !== Math.round(dest.leftIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.rightIndent) && source.rightIndent !== 0)\n || (!isNullOrUndefined(dest.rightIndent) && Math.round(source.rightIndent) !== Math.round(dest.rightIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.firstLineIndent) && source.firstLineIndent !== 0)\n || (!isNullOrUndefined(dest.firstLineIndent) && Math.round(source.firstLineIndent) !== Math.round(dest.firstLineIndent))) {\n return false;\n }\n if ((isNullOrUndefined(dest.beforeSpacing) && source.beforeSpacing !== 0)\n || (!isNullOrUndefined(dest.beforeSpacing) && Math.round(source.beforeSpacing) !== Math.round(dest.beforeSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.afterSpacing) && source.afterSpacing !== 0)\n || (!isNullOrUndefined(dest.afterSpacing) && Math.round(source.afterSpacing) !== Math.round(dest.afterSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.textAlignment) && source.textAlignment !== 'Left')\n || (!isNullOrUndefined(dest.textAlignment) && source.textAlignment !== dest.textAlignment)) {\n return false;\n }\n if ((isNullOrUndefined(dest.bidi) && source.bidi !== false)\n || (!isNullOrUndefined(dest.bidi) && source.bidi !== dest.bidi)) {\n return false;\n }\n if ((isNullOrUndefined(dest.contextualSpacing) && source.contextualSpacing !== false)\n || (!isNullOrUndefined(dest.contextualSpacing) && source.contextualSpacing !== dest.contextualSpacing)) {\n return false;\n }\n if ((isNullOrUndefined(dest.keepWithNext) && source.keepWithNext !== false)\n || (!isNullOrUndefined(dest.keepWithNext) && source.keepWithNext !== dest.keepWithNext)) {\n return false;\n }\n if ((isNullOrUndefined(dest.keepLinesTogether) && source.keepLinesTogether !== false)\n || (!isNullOrUndefined(dest.keepLinesTogether) && source.keepLinesTogether !== dest.keepLinesTogether)) {\n return false;\n }\n if ((isNullOrUndefined(dest.widowControl) && source.widowControl !== false)\n || (!isNullOrUndefined(dest.widowControl) && source.widowControl !== dest.widowControl)) {\n return false;\n }\n if ((isNullOrUndefined(dest.outlineLevel) && source.outlineLevel !== 'BodyText')\n || (!isNullOrUndefined(dest.outlineLevel) && source.outlineLevel !== dest.outlineLevel)) {\n return false;\n }\n if ((isNullOrUndefined(dest.lineSpacing) && source.lineSpacing !== 1)\n || (!isNullOrUndefined(dest.lineSpacing) && Math.round(source.lineSpacing) !== Math.round(dest.lineSpacing))) {\n return false;\n }\n if ((isNullOrUndefined(dest.lineSpacingType) && source.lineSpacingType !== 'Multiple')\n || (!isNullOrUndefined(dest.lineSpacingType) && source.lineSpacingType !== dest.lineSpacingType)) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBlocksToUpdate = function (blocks) {\n var blcks = [];\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj.paragraphFormat && obj.paragraphFormat.listFormat\n && Object.keys(obj.paragraphFormat.listFormat).length > 0) {\n blcks.push(obj);\n }\n else if (obj.rows) {\n for (var j = 0; j < obj.rows.length; j++) {\n var currentRow = obj.rows[j];\n for (var k = 0; k < currentRow.cells.length; k++) {\n var cell = currentRow.cells[k];\n blcks = blcks.concat(this.getBlocksToUpdate(cell.blocks));\n }\n }\n }\n }\n return blcks;\n };\n Editor.prototype.updateListIdForBlocks = function (blocks, abstractList, list, id, idToUpdate) {\n var update = false;\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj.paragraphFormat && obj.paragraphFormat.listFormat\n && Object.keys(obj.paragraphFormat.listFormat).length > 0) {\n var format = obj.paragraphFormat.listFormat;\n var existingList = this.listLevelPatternInCollection(format.listLevelNumber, abstractList.levels[format.listLevelNumber]);\n if (format.listId === id) {\n if (isNullOrUndefined(existingList) && (!list || (list\n && !this.checkSameLevelFormat(format.listLevelNumber, abstractList, list)))) {\n update = true;\n format.listId = idToUpdate;\n }\n else if (!isNullOrUndefined(existingList)\n && this.checkSameLevelFormat(format.listLevelNumber, abstractList, existingList)) {\n if (!format.isUpdated) {\n format.listId = existingList.listId;\n format.isUpdated = true;\n }\n update = false;\n }\n }\n }\n else if (obj.rows) {\n for (var j = 0; j < obj.rows.length; j++) {\n var row = obj.rows[j];\n for (var k = 0; k < row.cells.length; k++) {\n var cell = row.cells[k];\n var toUpdate = this.updateListIdForBlocks(cell.blocks, abstractList, list, id, idToUpdate);\n if (!update) {\n update = toUpdate;\n }\n }\n }\n }\n }\n return update;\n };\n Editor.prototype.updatePasteContent = function (pasteContent, sectionId) {\n var uniqueListId = this.getUniqueListOrAbstractListId(true);\n if (pasteContent.lists.filter(function (obj) { return obj.listId === uniqueListId; }).length > 0) {\n var sortedPasteList = pasteContent.lists.slice().sort(function (a, b) {\n return a.listId - b.listId;\n });\n uniqueListId = sortedPasteList[sortedPasteList.length - 1].listId + 1;\n }\n var uniqueAbsLstId = this.getUniqueListOrAbstractListId(false);\n if (pasteContent.abstractLists.filter(function (obj) {\n return obj.abstractListId === uniqueAbsLstId;\n }).length > 0) {\n var sortedPasteAbsList = pasteContent.abstractLists.slice().sort(function (a, b) {\n return a.abstractListId - b.abstractListId;\n });\n uniqueAbsLstId = sortedPasteAbsList[sortedPasteAbsList.length - 1].abstractListId + 1;\n }\n var _loop_1 = function (k) {\n var list = pasteContent.lists[k];\n var abstractList = pasteContent.abstractLists.filter(function (obj) {\n return obj.abstractListId === list.abstractListId;\n })[0];\n var lstDup = this_1.documentHelper.lists.filter(function (obj) {\n return obj.listId === list.listId;\n });\n if (!isNullOrUndefined(abstractList)) {\n var isUpdate = this_1.updateListIdForBlocks(pasteContent.sections[sectionId].blocks, abstractList, lstDup[0], list.listId, uniqueListId);\n if (isUpdate) {\n abstractList.abstractListId = uniqueAbsLstId;\n list.listId = uniqueListId;\n list.abstractListId = uniqueAbsLstId;\n uniqueListId++;\n uniqueAbsLstId++;\n }\n else {\n pasteContent.lists.splice(k, 1);\n pasteContent.abstractLists.splice(pasteContent.abstractLists.indexOf(abstractList), 1);\n k--;\n }\n }\n out_k_1 = k;\n };\n var this_1 = this, out_k_1;\n for (var k = 0; k < pasteContent.lists.length; k++) {\n _loop_1(k);\n k = out_k_1;\n }\n var blocks = this.getBlocksToUpdate(pasteContent.sections[sectionId].blocks);\n for (var i = 0; i < blocks.length; i++) {\n var blck = blocks[i];\n delete blck.paragraphFormat.listFormat.isUpdated;\n }\n };\n /**\n * @private\n */\n Editor.prototype.getBlocks = function (pasteContent, isPaste, sections, comments, revision) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r\\n/g, '\\r');\n if (this.isInsertText) {\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n txt = txt.replace(/\\r/g, '\\n');\n }\n else {\n txt = txt.replace(/\\n/g, '\\r');\n }\n }\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n arr = txt.split('\\n');\n }\n else {\n arr = txt.split('\\r');\n }\n var widget = [];\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widget;\n for (var i = 0; i < arr.length; i++) {\n if (i === arr.length - 1 && arr[i].length === 0) {\n continue;\n }\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n if (element !== currentInline.element) {\n element = this.selection.getNextValidElement(currentInline.element);\n }\n var insertFormat = void 0;\n if (startParagraph.isEmpty()) {\n insertFormat = startParagraph.characterFormat;\n }\n else if (!isNullOrUndefined(element)) {\n insertFormat = element.characterFormat;\n }\n else {\n this.copyInsertFormat(startParagraph.characterFormat, false);\n }\n var insertParaFormat = this.documentHelper.selection.copySelectionParagraphFormat();\n if (!isNullOrUndefined(this.previousParaFormat)) {\n insertParaFormat = this.previousParaFormat;\n }\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n //Too many character in single line it took time past the content will cause layout performance, so spliting by space.\n var words = arr[i].split(/(\\s+)/);\n for (var j = 0; j < words.length; j++) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = words[j];\n line.children.push(textElement);\n textElement.line = line;\n }\n }\n paragraph.childWidgets.push(line);\n paragraph.containerWidget = bodyWidget;\n widget.push(paragraph);\n }\n widgets.push(bodyWidget);\n }\n else {\n this.viewer.owner.parser.addCustomStyles(pasteContent);\n if (pasteContent.comments && pasteContent.comments.length > 0) {\n this.documentHelper.owner.parser.commentsCollection = new Dictionary();\n this.documentHelper.owner.parser.commentStarts = new Dictionary();\n this.documentHelper.owner.parser.commentEnds = new Dictionary();\n this.documentHelper.owner.parser.parseComments(pasteContent, comments ? comments : this.documentHelper.comments);\n }\n var bodyWidget = void 0;\n this.selection.currentPasteAction = 'DefaultPaste';\n for (var i = 0; i < pasteContent.sections.length; i++) {\n var parser = this.documentHelper.owner.parser;\n parser.isPaste = isPaste;\n parser.isHtmlPaste = this.isHtmlPaste;\n if (!this.isPasteListUpdated && !isNullOrUndefined(pasteContent.lists)) {\n if (this.documentHelper.lists.length > 0) {\n this.updatePasteContent(pasteContent, i);\n }\n this.isPasteListUpdated = true;\n if (!isNullOrUndefined(pasteContent.abstractLists)) {\n parser.parseAbstractList(pasteContent, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(pasteContent.lists)) {\n parser.parseList(pasteContent, this.documentHelper.lists);\n }\n }\n if (!isNullOrUndefined(pasteContent.revisions)) {\n if (isPaste) {\n var revisionChanges = this.viewer.owner.revisionsInternal.changes;\n if (!isNullOrUndefined(parser.revisionCollection)) {\n parser.revisionCollection = undefined;\n }\n parser.revisionCollection = new Dictionary();\n var revisionCollection = parser.revisionCollection;\n if (!(this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && parser.isCutPerformed)) {\n if (pasteContent.revisions.length >= 1) {\n for (var i_1 = 0; i_1 < pasteContent.revisions.length; i_1++) {\n var revisionCheck = true;\n if (revisionCollection.containsKey(pasteContent.revisions[i_1].revisionId)) {\n if (revisionChanges.length > 0) {\n for (var j_1 = 0; j_1 < revisionChanges.length; j_1++) {\n if (revisionChanges[j_1].revisionID === pasteContent.revisions[i_1].revisionId) {\n revisionCheck = false;\n }\n }\n }\n if (revisionCheck) {\n var revision_1 = revisionCollection.get(pasteContent.revisions[i_1].revisionId);\n revisionChanges.push(revision_1);\n }\n }\n else {\n parser.parseRevisions(pasteContent, revisionChanges);\n }\n }\n }\n }\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n else {\n parser.revisionCollection = this.documentHelper.revisionsInternal;\n parser.parseRevisions(pasteContent, revision);\n }\n }\n bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n if (!isPaste) {\n sections.unshift(bodyWidget);\n }\n else {\n widgets.push(bodyWidget);\n }\n parser.parseBody(pasteContent.sections[i].blocks, bodyWidget.childWidgets);\n if (pasteContent.lastParagraphMarkCopied && this.selection.start.paragraph.isEmpty() && this.documentHelper.pages.length == 1 && this.documentHelper.pages[0].bodyWidgets[0].childWidgets.length == 1) {\n parser.parseSectionFormat(pasteContent.sections[i].sectionFormat, bodyWidget.sectionFormat);\n }\n parser.isPaste = false;\n parser.isHtmlPaste = false;\n }\n if (pasteContent.lastParagraphMarkCopied) {\n var paragraphWidget = new ParagraphWidget();\n bodyWidget.childWidgets.push(paragraphWidget);\n }\n }\n if (this.currentPasteOptions === 'MergeWithExistingFormatting') {\n this.applyMergeFormat(widgets);\n }\n return widgets;\n };\n Editor.prototype.applyMergeFormat = function (bodyWidgets) {\n var startParagraph = this.selection.start.paragraph;\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n var insertFormat = element ? element.characterFormat :\n this.copyInsertFormat(startParagraph.characterFormat, false);\n var insertParaFormat = this.documentHelper.selection.copySelectionParagraphFormat();\n for (var k = 0; k < bodyWidgets.length; k++) {\n var widgets = bodyWidgets[k].childWidgets;\n for (var i = 0; i < widgets.length; i++) {\n var widget = widgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.paragraphFormat.copyFormat(insertParaFormat);\n this.applyFormatInternal(widget, insertFormat);\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var row = widget.childWidgets[j];\n for (var k_1 = 0; k_1 < row.childWidgets.length; k_1++) {\n var cell = row.childWidgets[k_1];\n for (var l = 0; l < cell.childWidgets.length; l++) {\n this.applyFormatInternal(cell.childWidgets[l], insertFormat);\n }\n }\n }\n }\n }\n }\n };\n Editor.prototype.applyFormatInternal = function (widget, insertFormat) {\n if (widget instanceof ParagraphWidget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n for (var k = 0; k < lineWidget.children.length; k++) {\n var inlineCharacterFormat = lineWidget.children[k].characterFormat;\n var characterFormat = inlineCharacterFormat.cloneFormat();\n if (characterFormat.bold) {\n lineWidget.children[k].characterFormat.bold = characterFormat.bold;\n }\n if (characterFormat.italic) {\n lineWidget.children[k].characterFormat.italic = characterFormat.italic;\n }\n if (characterFormat.underline !== 'None') {\n lineWidget.children[k].characterFormat.underline = characterFormat.underline;\n }\n }\n }\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var rowWidget = widget.childWidgets[j];\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n for (var l = 0; l < cellWidget.childWidgets.length; l++) {\n this.applyFormatInternal(cellWidget.childWidgets[l], insertFormat);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyPasteOptions = function (options, isPasteOptionTextOnly) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '' || isPasteOptionTextOnly) {\n return;\n }\n //this.isSkipHistory = true;\n this.currentPasteOptions = options;\n var start = this.selection.isForward ? this.selection.start : this.selection.end;\n var currentFormat = start.paragraph.paragraphFormat;\n var copiedContent = this.copiedContent;\n var copiedTextContent = this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n }\n this.copiedContent = copiedContent;\n this.copiedTextContent = copiedTextContent;\n this.selection.isViewPasteOptions = true;\n // }\n switch (options) {\n case 'KeepSourceFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent);\n break;\n case 'MergeWithExistingFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent, currentFormat);\n break;\n case 'KeepTextOnly':\n this.pasteContents(this.copiedTextContent);\n break;\n }\n //this.isSkipHistory = false;\n };\n /**\n * @private\n */\n Editor.prototype.applyTablePasteOptions = function (options) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '') {\n return;\n }\n this.isPaste = true;\n var copiedContent = this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n }\n var widgets = this.getBlocks(copiedContent, true);\n var currentFormat = this.selection.start.paragraph.paragraphFormat;\n switch (options) {\n case 'NestTable':\n this.pasteAsNestedTable(widgets, currentFormat);\n break;\n case 'InsertAsRows':\n this.pasteAsNewRow(widgets[0].childWidgets[0]);\n break;\n case 'InsertAsColumns':\n this.pasteAsNewColumn(widgets[0].childWidgets[0]);\n break;\n case 'OverwriteCells':\n this.pasteOverwriteCell(widgets[0].childWidgets[0]);\n break;\n }\n this.isPaste = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteContents = function (content, currentFormat) {\n if (typeof (content) !== 'string') {\n this.copiedContent = content;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n var inline = this.selection.getCurrentFormField();\n var resultText = this.getFieldResultText();\n var maxLength = inline.formFieldData.maxLength;\n var selectedTextLength = this.documentHelper.selection.text.length;\n if (maxLength > 0) {\n if (selectedTextLength === 0) {\n var contentlength = maxLength - resultText.length;\n content = content.substring(0, contentlength);\n }\n else if (selectedTextLength > 0) {\n content = content.substring(0, selectedTextLength);\n }\n }\n }\n this.pasteContentsInternal(this.getBlocks(content, true), true, currentFormat);\n if (content.comments && content.comments.length > 0) {\n this.documentHelper.layout.layoutComments(this.documentHelper.comments);\n }\n this.isInsertField = false;\n };\n Editor.prototype.pasteContentsInternal = function (widgets, isPaste, currentFormat) {\n this.isPaste = isPaste;\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable) {\n var isTablePaste = false;\n if (widgets.length === 1) {\n var childWidgets = widgets[0].childWidgets;\n if ((childWidgets.length < 3)) {\n if (childWidgets.length === 1 && childWidgets[0] instanceof TableWidget || childWidgets.length === 2 && childWidgets[0] instanceof TableWidget && childWidgets[1].isEmpty()) {\n isTablePaste = true;\n }\n }\n }\n if (isTablePaste) {\n var startCell = selection.start.paragraph.associatedCell;\n var endCell = selection.end.paragraph.associatedCell;\n var newTable = widgets[0].childWidgets[0];\n // tslint:disable-next-line:max-line-length\n if (startCell.ownerTable.equals(endCell.ownerTable)) {\n if (selection.start.paragraph.associatedCell.rowIndex === 0 && selection.end.paragraph.associatedCell.rowIndex === 0\n && startCell.equals(endCell) && !this.selection.isCellSelected(startCell, selection.start, selection.end)) {\n this.selection.currentPasteAction = 'InsertAsColumns';\n this.pasteAsNewColumn(newTable);\n }\n else {\n this.selection.currentPasteAction = 'OverwriteCells';\n this.pasteOverwriteCell(newTable);\n }\n this.isPaste = false;\n return;\n }\n }\n }\n var commentStartToInsert;\n //if (!this.isSkipHistory) {\n commentStartToInsert = this.checkAndRemoveComments();\n //}\n this.defaultPaste(widgets, currentFormat);\n //if (!this.isSkipHistory) {\n this.updateHistoryForComments(commentStartToInsert);\n //}\n };\n Editor.prototype.defaultPaste = function (widgets, currentFormat) {\n var selection = this.documentHelper.selection;\n var isRemoved = true;\n //if (!this.isSkipHistory) {\n this.initComplexHistory('Paste');\n //}\n if (this.documentHelper.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n //if (!this.isSkipHistory) {\n this.initHistory('Paste');\n //}\n if (!selection.isEmpty || this.documentHelper.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n this.pasteContent(widgets, currentFormat);\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n this.isPaste = false;\n };\n Editor.prototype.pasteAsNewColumn = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cloneTable = data.clone();\n var rowWidget = cloneTable.childWidgets[0];\n var numberOfRows = cloneTable.childWidgets.length;\n var numberOfColumns = rowWidget.childWidgets.length;\n var cellIndex = startCell.columnIndex;\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = numberOfColumns;\n var rowSpannedCells = [];\n if (numberOfRows > table.childWidgets.length) {\n this.addRows(numberOfRows - table.childWidgets.length, table);\n this.tableUpdate(table);\n }\n else if (table.childWidgets.length > numberOfRows) {\n this.addRows(table.childWidgets.length - numberOfRows, cloneTable, table);\n this.tableUpdate(table);\n }\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n var rowWidget_1 = cloneTable.childWidgets[j];\n var cellWidget = rowWidget_1.childWidgets[i];\n var cell = row.childWidgets[startCell.columnIndex];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.index;\n newCell.containerWidget = row;\n var prevCell = row.previousWidget;\n var spannedCell = this.rowspannedCollection(row, rowSpannedCells);\n if (cell != null) {\n newCell.cellFormat.copyFormat(cell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n else if (spannedCell.length > 0) {\n for (var z = 0; z < spannedCell.length; z++) {\n if (prevCell.rowIndex + (spannedCell[z].cellFormat.rowSpan - 1) >= row.rowIndex) {\n newCell.cellFormat.copyFormat(spannedCell[z].cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n }\n }\n cellWidget.containerWidget = newCell.containerWidget;\n newCell.childWidgets = cellWidget.childWidgets;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(i, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n }\n }\n this.tableReLayout(table, startParagraph, newCell);\n }\n };\n Editor.prototype.pasteAsNestedTable = function (widgets, currentFormat) {\n var data = widgets[0].childWidgets[0];\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteNested');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var startParagraph = undefined;\n var dataTable = data.clone();\n var endCell = this.selection.end.paragraph.containerWidget;\n var pasteCell = void 0;\n if (startCell != endCell) {\n var row = startCell.ownerRow;\n while (row != endCell.ownerRow.nextRow) {\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n pasteCell = row.childWidgets[cellIndex];\n var clonedTable = dataTable.clone();\n var newPara = new ParagraphWidget();\n pasteCell.childWidgets = [];\n pasteCell.childWidgets[0] = clonedTable;\n pasteCell.childWidgets[1] = newPara;\n newPara.containerWidget = pasteCell;\n clonedTable.containerWidget = pasteCell;\n clonedTable.index = 0;\n newPara.index = 1;\n row.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell);\n }\n else {\n this.defaultPaste(widgets, currentFormat);\n }\n }\n };\n Editor.prototype.pasteOverwriteCell = function (data) {\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteOverwrite');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var cloneTable = data.clone();\n // let rowWidget: TableRowWidget = cloneTable.childWidgets[0] as TableRowWidget;\n var numberOfRows = cloneTable.childWidgets.length;\n var endCell = this.getOwnerCell(!this.selection.isForward);\n // let columnCount: number = numberOfColumns;\n // let newCell: TableCellWidget = undefined;\n var coloumnIndexPaste = startCell.columnIndex;\n var rowIndexPaste = startCell.rowIndex;\n var startParagraph = undefined;\n var row = this.selection.start.paragraph.associatedCell.ownerRow;\n var rowWidget = cloneTable.childWidgets[0];\n var newCells = void 0; // = rowWidget.childWidgets[0] as TableCellWidget;\n var numberOfColumns = rowWidget.childWidgets.length;\n var row2 = startCell.ownerRow;\n if (startCell != endCell) {\n var k = 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var columnSpan = void 0;\n var cloneCells = void 0;\n while (row2 != endCell.ownerRow.nextRow) {\n rowWidget = cloneTable.childWidgets[k] || cloneTable.childWidgets[k = 0];\n var rowWidgetLength = rowWidget.childWidgets.length;\n var cellIndexSE = 0;\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n rowWidget = cloneTable.childWidgets[k];\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n if (columnSpan > 1 && cellIndexSE >= (rowWidgetLength - (columnSpan - 1))) {\n columnSpan = 1;\n cellIndex = cellIndex + (columnSpan - 1);\n cellIndexSE = 0;\n }\n newCells = rowWidget.childWidgets[cellIndexSE] || rowWidget.childWidgets[cellIndexSE = 0];\n cloneCells = newCells.clone();\n var pasteCell = row2.childWidgets[cellIndex];\n for (var x = 0; x < cloneCells.childWidgets.length; x++) {\n var newPara = cloneCells.childWidgets[x];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[x] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan;\n rowSpanIndex = cellIndex;\n }\n if (newCells.cellFormat.columnSpan > 1) {\n columnSpan = newCells.cellFormat.columnSpan;\n }\n row2.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(cloneCells);\n }\n cellIndexSE++;\n }\n row2 = row2.nextRow;\n k++;\n }\n this.tableReLayout(table, startParagraph, cloneCells);\n }\n else {\n var rowsToAdd = void 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var pasteCell = void 0;\n if (numberOfRows > table.childWidgets.length - rowIndexPaste) {\n rowsToAdd = numberOfRows - table.childWidgets.length + rowIndexPaste;\n this.addRows(rowsToAdd, table);\n }\n for (var i = 0; i < numberOfRows; i++) {\n var cellIndex = startCell.columnIndex;\n rowWidget = cloneTable.childWidgets[i];\n var numberOfColumns_1 = rowWidget.childWidgets.length;\n for (var cellIterate = 0; cellIterate < numberOfColumns_1; cellIterate++) {\n newCells = rowWidget.childWidgets[cellIterate];\n var cloneCells = newCells.clone();\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n pasteCell = row.childWidgets[cellIndex];\n if (!pasteCell) {\n pasteCell = cloneCells;\n pasteCell.containerWidget = row;\n pasteCell.index = cellIndex;\n }\n for (var index = 0; index < cloneCells.childWidgets.length; index++) {\n var newPara = cloneCells.childWidgets[index];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[index] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan; //getting span\n rowSpanIndex = cellIndex;\n }\n row.childWidgets.splice(cellIndex++, 1, pasteCell);\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell);\n }\n }\n };\n Editor.prototype.pasteAsNewRow = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteRow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = endCell.ownerRow;\n if (this.editorHistory) {\n this.cloneTableToHistoryInfo(table);\n }\n var rowCount = this.getRowCountToInsert();\n var columncount = this.getColumnCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n index++;\n var pasteRowCount = data.childWidgets.length;\n for (var i = 0; i < pasteRowCount; i++) {\n var newRow = data.childWidgets[i].clone();\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, false);\n var cellWidget = undefined;\n var paragraphWidget = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cellWidget = table.childWidgets[index].firstChild;\n paragraphWidget = this.selection.getFirstParagraph(cellWidget);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraphWidget = this.selection.getFirstParagraphInFirstCell(widget);\n }\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.selectParagraphInternal(paragraphWidget, true);\n this.reLayout(this.selection, true);\n };\n Editor.prototype.tableUpdate = function (table) {\n table.isGridUpdated = false;\n table.calculateGrid();\n table.buildTableColumns();\n table.isGridUpdated = true;\n };\n Editor.prototype.rowspannedCollection = function (row, rowSpannedCells) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n }\n return rowSpannedCells;\n };\n Editor.prototype.insertSpannedCells = function (row, rowSpannedCells, newCell, cellIndex) {\n var isCellInserted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n };\n Editor.prototype.addRows = function (count, table, ownerTable) {\n var rowPlacement = 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = false;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var rows = table.childWidgets.length;\n var rowWidget = table.childWidgets[rows - 1];\n var column = rowWidget.childWidgets.length;\n var cloneTable = ownerTable ? ownerTable : table;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = rowWidget.childWidgets[column - 1];\n var row = endCell.ownerRow;\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n //this.reLayout(this.selection, true);\n };\n Editor.prototype.pasteContent = function (widgets, currentFormat) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var insertPosition = '';\n this.updateInsertPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n insertPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n var position = this.selection.start;\n if (!this.selection.isForward) {\n position = this.selection.end;\n }\n var blockInfo = this.selection.getParagraphInfo(position);\n insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.owner.isPastingContent = true;\n this.pasteCopiedData(widgets, currentFormat);\n var endPosition = '';\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n endPosition = this.editorHistory.currentBaseHistoryInfo.endPosition;\n }\n else {\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n var startPosition = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(startPosition, insertPosition);\n var end = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(end, endPosition);\n this.pasteTextPosition = { startPosition: startPosition, endPosition: end };\n this.documentHelper.owner.isPastingContent = false;\n this.documentHelper.selection.fireSelectionChanged(true);\n };\n Editor.prototype.pasteCopiedData = function (bodyWidget, currentFormat) {\n if (this.documentHelper.layout.isBidiReLayout) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n if (this.isPaste && this.isSectionEmpty(this.selection) && !this.selection.start.paragraph.isInHeaderFooter) {\n this.previousSectionFormat = new WSectionFormat();\n this.previousSectionFormat.copyFormat(this.selection.start.paragraph.bodyWidget.sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.copyFormat(bodyWidget[0].sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.footerDistance = this.previousSectionFormat.footerDistance;\n this.selection.start.paragraph.bodyWidget.sectionFormat.headerDistance = this.previousSectionFormat.headerDistance;\n if (this.owner.viewer instanceof PageLayoutViewer) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n this.owner.viewer.updatePageBoundingRectangle(this.selection.start.paragraph.bodyWidget, page, page.boundingRectangle.y);\n this.owner.viewer.updateClientArea(this.selection.start.paragraph.bodyWidget.sectionFormat, page);\n }\n }\n for (var k = 0; k < bodyWidget.length; k++) {\n var widgets = bodyWidget[k].childWidgets;\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(currentFormat)) {\n widget.paragraphFormat.copyFormat(currentFormat);\n var insertFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, false);\n widget.characterFormat.mergeFormat(insertFormat);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n var insertPosition = this.selection.start;\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n if (this.currentPasteOptions === 'KeepTextOnly') {\n var paraFormat = new WParagraphFormat(this.selection.start.paragraph);\n this.selection.start.paragraph.paragraphFormat = paraFormat;\n }\n this.insertElement(newParagraph.childWidgets[0].children, newParagraph.paragraphFormat);\n }\n }\n else if (widget instanceof BlockWidget) {\n var startParagraph = this.selection.start.paragraph;\n var isTable = widget instanceof TableWidget;\n if (isTable) {\n var table = widget;\n this.generateTableRevision(table);\n if (startParagraph.isInsideTable) {\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (startParagraph.isEmpty() && startParagraph.previousWidget instanceof TableWidget && !this.isPaste) {\n return this.insertTableRows(table, startParagraph.previousWidget);\n }\n }\n this.insertBlockInternal(widget);\n }\n }\n }\n };\n Editor.prototype.generateTableRevision = function (table) {\n if (this.owner.enableTrackChanges && !isNullOrUndefined(table)) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.insertRevision(row.rowFormat, 'Insertion');\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var para = cell.childWidgets[k];\n if (!isNullOrUndefined(para)) {\n this.insertRevisionForBlock(para, 'Insertion');\n }\n }\n }\n }\n }\n };\n Editor.prototype.isSectionEmpty = function (selection) {\n var startParagraph = selection.start.paragraph;\n if (startParagraph) {\n if (startParagraph.isInsideTable || startParagraph.isInHeaderFooter ||\n startParagraph !== selection.end.paragraph) {\n return false;\n }\n var bodyWidget = startParagraph.bodyWidget;\n if (bodyWidget) {\n var page = bodyWidget.page;\n if (page) {\n if ((isNullOrUndefined(page.previousPage) || page.previousPage.sectionIndex !== page.sectionIndex)\n && isNullOrUndefined(page.nextPage) && startParagraph.isEmpty() &&\n bodyWidget.childWidgets.length === 1) {\n return true;\n }\n }\n }\n }\n return false;\n };\n /**\n * Insert table on undo\n *\n * @param {TableWidget} table - Specifies the table\n * @param {TableWidget} newTable - Speciefies the new table\n * @param {boolean} moveRows - Specifies the new row\n * @private\n * @private {void}\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows) {\n //Gets the index of current table.\n var insertIndex = table.getIndex();\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n var owner = table.containerWidget;\n //remove old table revisions if it is present.\n this.constructRevisionsForTable(table, false);\n this.removeBlock(table, true);\n //Inserts table in the current table position. \n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n newTable.index = table.index;\n table.containerWidget = undefined;\n newTable.containerWidget = owner;\n this.documentHelper.layout.clearTableWidget(newTable, true, true, true);\n newTable.buildTableColumns();\n this.constructRevisionsForTable(newTable, true);\n newTable.isGridUpdated = true;\n this.updateNextBlocksIndex(newTable, true);\n this.documentHelper.layout.linkFieldInTable(newTable);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canConstructRevision = function (item) {\n if ((item.revisions.length > 0 && item.revisions[0].range.length === 0) || item.removedIds.length > 0) {\n return true;\n }\n return false;\n };\n Editor.prototype.constructRevisionsForTable = function (table, canConstructRevision) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n if (canConstructRevision) {\n if (this.canConstructRevision(rowWidget.rowFormat)) {\n this.constructRevisionFromID(rowWidget.rowFormat, true);\n }\n for (var rowIndex = 0; rowIndex < rowWidget.childWidgets.length; rowIndex++) {\n var cellWidget = rowWidget.childWidgets[rowIndex];\n for (var paraIndex = 0; paraIndex < cellWidget.childWidgets.length; paraIndex++) {\n if (cellWidget.childWidgets[paraIndex] instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(cellWidget.childWidgets[paraIndex], canConstructRevision);\n }\n }\n }\n }\n else {\n this.removeDeletedCellRevision(rowWidget);\n }\n }\n };\n Editor.prototype.constructRevisionsForBlock = function (paragraph, canConstructRevision) {\n for (var linIndex = 0; linIndex < paragraph.childWidgets.length; linIndex++) {\n var lineWidget = paragraph.childWidgets[linIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n if (canConstructRevision) {\n if (lineWidget.children[elementIndex] instanceof ElementBox && this.canConstructRevision(lineWidget.children[elementIndex])) {\n this.constructRevisionFromID(lineWidget.children[elementIndex], true);\n }\n }\n }\n }\n if (this.canConstructRevision(paragraph.characterFormat)) {\n this.constructRevisionFromID(paragraph.characterFormat, true);\n }\n };\n /**\n * @private\n * @param paraWidget\n * @param startoffset\n * @param endoffset\n * @param revisionId\n * @param isParaMarkIncluded\n * @returns {void}\n */\n Editor.prototype.applyRevisionForCurrentPara = function (paraWidget, startoffset, endoffset, revisionId, isParaMarkIncluded) {\n var elementInfo = paraWidget.getInline(startoffset + 1, 0);\n var currentElement = elementInfo.element;\n var skipElement = false;\n if (startoffset === paraWidget.getLength()) {\n skipElement = true;\n }\n var endElement = paraWidget.getInline(endoffset, 0).element;\n if (endoffset > paraWidget.getLength()) {\n isParaMarkIncluded = true;\n }\n if (!isNullOrUndefined(currentElement) && !isNullOrUndefined(endElement)) {\n if (!skipElement && currentElement === endElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else {\n while (!isNullOrUndefined(currentElement) && currentElement !== endElement) {\n if (!skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n if (!isNullOrUndefined(currentElement.nextNode)) {\n currentElement = currentElement.nextNode.nextValidNodeForTracking;\n }\n skipElement = false;\n }\n if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n }\n }\n else if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else if (!isNullOrUndefined(endElement)) {\n endElement.removedIds.push(revisionId);\n this.constructRevisionFromID(endElement, true);\n }\n if (isParaMarkIncluded) {\n paraWidget.characterFormat.removedIds.push(revisionId);\n this.constructRevisionFromID(paraWidget.characterFormat, true);\n }\n };\n /**\n * Insert table on undo\n *\n * @param {Selection} selection - Specified the selection\n * @param {WBlock} block - Spcifies the block\n * @param {WTable} table - Specifies the table.\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraphInternal(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n *\n * @param {Selection} selection - Specified the selection\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true; \n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n var removedCommentStart = this.checkAndRemoveComments();\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.insertInlineInternal = function (element, revisionType) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n revisionType = (isNullOrUndefined(revisionType) ? 'Insertion' : revisionType);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n if ((paragraph.paragraphFormat.textAlignment === 'Center' || paragraph.paragraphFormat.textAlignment === 'Right')\n && paragraph.paragraphFormat.listFormat.listId === -1) {\n paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n var isUndoing = !isNullOrUndefined(this.editorHistory) ? (this.editorHistory.isUndoing || this.editorHistory.isRedoing) : false;\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n if (this.owner.enableTrackChanges && element.isValidNodeForTracking && !isUndoing) {\n this.insertRevision(element, revisionType);\n }\n if (element.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(element, true);\n }\n element.linkFieldCharacter(this.documentHelper);\n if (element instanceof FootnoteElementBox) {\n if (element.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(element);\n }\n if (element.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(element);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0, undefined, undefined);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, revisionType, true);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element, paragraphFormat) {\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var begin = undefined;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var curInline = undefined;\n var prevElement = undefined;\n var indexInInline = 0;\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) { // Add new Element in current \n insertIndex++;\n begin = false;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n begin = true;\n }\n else {\n insertIndex++;\n prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.slice(0, indexInInline);\n if (curInline.revisions.length > 0 && !this.owner.enableTrackChanges) {\n this.splitRevisionForSpittedElement(curInline, prevElement);\n }\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n if (element[i] instanceof TextElementBox && element[i].text.indexOf(' ') >= 0) {\n this.documentHelper.triggerSpellCheck = true;\n }\n var prevRevisionsCount = element[i].revisions.length;\n element[i].ischangeDetected = true;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.documentHelper);\n var isRevisionCombined = this.updateRevisionForElement(curInline, element[i], indexInInline, (i === 0) ? true : false, prevElement, begin);\n //Check to combine elements with previous / next para\n if (isTrackingEnabled && !isRevisionCombined && element[i].revisions.length === prevRevisionsCount) {\n //if (!(element[i] instanceof FieldElementBox && (element[i] as FieldElementBox).fieldType === 2)) {\n this.checkToCombineRevisionsinBlocks(element[i], prevRevisionsCount === element[i].revisions.length, (i > 0 && i === element.length - 1), 'Insertion');\n //}\n }\n curInline = element[i];\n insertIndex++;\n }\n if (paragraphFormat && (isNullOrUndefined(paragraph.paragraphFormat.listFormat.list) ||\n (!isNullOrUndefined(paragraph.paragraphFormat.listFormat) && paragraph.paragraphFormat.listFormat.listId === -1))) {\n paragraph.paragraphFormat.copyFormat(paragraphFormat);\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, 0, this.isInsertField ? undefined : paragraph.paragraphFormat.bidi);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.updateRevisionForElement = function (currentElement, newElement, indexInInline, isFirstItem, prevElement, isBeginning) {\n if (!this.owner.enableTrackChanges) {\n return false;\n }\n if (isNullOrUndefined(currentElement) && isNullOrUndefined(prevElement)) {\n return false;\n }\n var isMiddle = isNullOrUndefined(isBeginning) ? true : false;\n var prevRevisionCount = newElement.revisions.length;\n if (isFirstItem) {\n if (isMiddle) {\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(currentElement, indexInInline, newElement, false, 'Insertion');\n if (isRevisionCombined || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(currentElement, prevElement, true);\n }\n else if (newElement.revisions.length === 0) {\n this.splitRevisionForSpittedElement(currentElement, prevElement);\n this.insertRevision(newElement, 'Insertion');\n }\n }\n else if (isBeginning) {\n return this.insertRevisionAtBegining(currentElement, newElement, 'Insertion');\n }\n else {\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n }\n else {\n // if (currentElement instanceof FieldElementBox && currentElement.fieldType === 2) {\n // currentElement = (currentElement as FieldElementBox).previousElement;\n // }\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n return false;\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, revisionType, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n var isBidi = paragraph.paragraphFormat.bidi && element.isRightToLeft;\n var isEqualFormat = false;\n revisionType = isNullOrUndefined(revisionType) ? 'Insertion' : revisionType;\n var isUndoing = this.skipTracking();\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isRevisionCombined = false;\n var prevRevisionCount = newElement.revisions.length;\n if (this.owner.editorHistory && (this.owner.editorHistory.isUndoing || this.owner.editorHistory.isRedoing)\n && newElement instanceof TextElementBox) {\n isEqualFormat = element.characterFormat.isEqualFormat(newElement.characterFormat)\n && this.documentHelper.textHelper.isRTLText(newElement.text);\n }\n if (!isEqualFormat) {\n if (index === element.length) {\n // Add new Element in current \n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n if (newElement.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(newElement, true, element);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtEnd(element, newElement, revisionType);\n }\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (newElement.removedIds.length > 0) {\n this.constructRevisionFromID(newElement, false);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtBegining(element, newElement, revisionType);\n }\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else {\n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n if (element.revisions.length > 0 && !isTrackingEnabled && !isUndoing && newElement.removedIds.length === 0) {\n this.splitRevisionForSpittedElement(element, textElement);\n }\n element.text = element.text.substr(0, index);\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n isRevisionCombined = true;\n this.isTrackingFormField = element.previousElement instanceof FieldElementBox ? true : false;\n if (newElement.removedIds.length > 0 && !this.isTrackingFormField) {\n this.constructRevisionFromID(newElement, false);\n this.copyElementRevision(element, textElement, true);\n }\n else if (this.owner.enableTrackChanges) {\n if (!(newElement instanceof BookmarkElementBox) && !(newElement instanceof CommentCharacterElementBox) && !(newElement instanceof EditRangeStartElementBox) && !(newElement instanceof EditRangeEndElementBox)) {\n var isRevisionCombined_1 = this.checkToMapRevisionWithInlineText(element, index, newElement, isBidi, revisionType);\n if (isRevisionCombined_1 || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(element, textElement, true);\n }\n else if (newElement.revisions.length === prevRevisionCount) {\n this.splitRevisionForSpittedElement(element, textElement);\n this.insertRevision(newElement, revisionType);\n }\n }\n else {\n this.copyElementRevision(element, textElement, false);\n }\n }\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n }\n else {\n element.text = element.text.substring(0, index) + newElement.text + element.text.substring(index);\n }\n newElement.line = element.line;\n if (!isNullOrUndefined(newElement.line.paragraph.containerWidget) && !isNullOrUndefined(newElement.line.paragraph.containerWidget.containerWidget) && newElement.line.paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n newElement.line.paragraph.containerWidget.containerWidget.height += newElement.height;\n }\n newElement.linkFieldCharacter(this.documentHelper);\n if (newElement instanceof ContentControl && newElement.type === 0) {\n this.documentHelper.contentControlCollection.push(newElement);\n }\n if (newElement instanceof ShapeBase && newElement.textWrappingStyle !== 'Inline') {\n if (paragraph.floatingElements.indexOf(newElement) === -1) {\n paragraph.floatingElements.push(newElement);\n }\n if (paragraph.bodyWidget.floatingElements.indexOf(newElement) === -1) {\n paragraph.bodyWidget.floatingElements.push(newElement);\n }\n }\n if (isTrackingEnabled && !isRevisionCombined && !isUndoing && !this.skipFieldDeleteTracking) {\n this.checkToCombineRevisionsinBlocks(newElement, prevRevisionCount === newElement.revisions.length, (index === element.length), revisionType);\n }\n if (newElement instanceof FootnoteElementBox) {\n if (isUndoing) {\n // this.documentHelper.layout.isLayoutWhole = true;\n newElement.isLayout = false;\n }\n if (newElement.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(newElement);\n }\n if (newElement.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(newElement);\n }\n }\n if (relayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex, undefined, undefined);\n }\n };\n Editor.prototype.incrementCommentIndex = function (isBidi, element, insertIndex) {\n if (!this.owner.editorHistory || !(this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo) || (this.owner.editorHistory && this.owner.editorHistory.currentHistoryInfo\n && (this.owner.editorHistory.currentHistoryInfo.action !== \"SkipCommentInline\" ||\n this.owner.editorHistory.currentHistoryInfo.action === \"SkipCommentInline\" &&\n (this.owner.editorHistory.currentHistoryInfo.modifiedActions[0] === this.editorHistory.currentBaseHistoryInfo\n || (this.owner.editorHistory.currentHistoryInfo.modifiedActions[0] !== this.editorHistory.currentBaseHistoryInfo\n && !(element instanceof CommentCharacterElementBox)))))) {\n insertIndex++;\n }\n return insertIndex;\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.constructRevisionFromID = function (insertElement, isEnd, prevElement) {\n if (insertElement.removedIds.length > 0) {\n for (var i = 0; i < insertElement.removedIds.length; i++) {\n var revisionToInclude = undefined;\n if (this.documentHelper.revisionsInternal.containsKey(insertElement.removedIds[i])) {\n revisionToInclude = this.documentHelper.revisionsInternal.get(insertElement.removedIds[i]);\n insertElement.revisions.push(revisionToInclude);\n isEnd = isEnd ? true : this.skipTracking();\n if (isEnd) {\n if (this.editorHistory.isRedoing && this.owner.editorHistory.currentBaseHistoryInfo && this.owner.editorHistory.currentBaseHistoryInfo.action === 'BackSpace') {\n isEnd = false;\n }\n }\n if (!isNullOrUndefined(prevElement)) {\n var rangeIndex = revisionToInclude.range.indexOf(prevElement);\n if (rangeIndex >= 0) {\n revisionToInclude.range.splice(rangeIndex + ((isEnd) ? 1 : 0), 0, insertElement);\n }\n else {\n revisionToInclude.range.splice(0, 0, insertElement);\n }\n }\n else {\n revisionToInclude.range.splice((isEnd) ? revisionToInclude.range.length : 0, 0, insertElement);\n }\n this.updateRevisionCollection(revisionToInclude);\n }\n }\n insertElement.removedIds = [];\n }\n else {\n // on undoing revisions will be cloned , so need to update range information.\n for (var i = 0; i < insertElement.revisions.length; i++) {\n var currentRevision = insertElement.revisions[i];\n if (this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n currentRevision = this.documentHelper.revisionsInternal.get(currentRevision.revisionID);\n currentRevision.range.splice(isEnd ? currentRevision.range.length : 0, 0, insertElement);\n this.updateRevisionCollection(currentRevision);\n }\n }\n }\n };\n /**\n * Insert block on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {WBlock} block - Specifes the block\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n Editor.prototype.insertBlockInternal = function (block) {\n var selection = this.selection;\n var isRemoved = true;\n var startPara = this.selection.start.paragraph;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n var startPosition = selection.start.clone();\n //let prevBlock: ParagraphWidget = (block as ParagraphWidget).clone()\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n this.insertNewParagraphWidget(block, false);\n if (!this.isInsertingTOC) {\n this.combineRevisions(block, startPosition, this.selection.end);\n }\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.owner.viewer);\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraphInternal(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (!isNullOrUndefined(bodyWidget)) {\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking() && block instanceof ParagraphWidget) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n else if (block instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(block, true);\n }\n else if (block instanceof TableWidget) {\n this.constructRevisionsForTable(block, true);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width? Image width\n * @param {number} height? Image height\n * @returns {void}\n */\n Editor.prototype.insertImage = function (imageString, width, height) {\n this.insertImageInternal(imageString, false, width, height);\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n * @private\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {boolean} isUiInteracted Is image instered from UI interaction.\n * @param {number} width? Image width\n * @param {number} height? Image height\n * @returns {void}\n */\n Editor.prototype.insertImageInternal = function (imageString, isUiInteracted, width, height) {\n var _this = this;\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (isNullOrUndefined(width)) {\n width = 100;\n }\n if (isNullOrUndefined(height)) {\n height = 100;\n }\n this.insertPicture(imageString, width, height, isUiInteracted);\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n };\n /**\n * Inserts a table of specified size at cursor position\n * in the document editor.\n *\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n * @returns {void}\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (columns < 1 || columns > 63) {\n DialogUtility.alert(localeValue.getConstant('Number of columns must be between 1 and 63.'));\n return;\n }\n if (rows < 1 || rows > this.documentHelper.owner.documentEditorSettings.maximumRows) {\n if (this.documentHelper.owner.locale == 'en-US') {\n DialogUtility.alert('Number of rows must be between 1 and ' + this.documentHelper.owner.documentEditorSettings.maximumRows + '.');\n }\n else {\n DialogUtility.alert(localeValue.getConstant('Number of rows must be between 1 and 32767.'));\n }\n return;\n }\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth() - table.tableFormat.leftIndent;\n table.splitWidthToTableCells(clientWidth);\n var removedComment;\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n removedComment = this.checkAndRemoveComments();\n this.initHistory('InsertTable');\n this.documentHelper.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n if (!isNullOrUndefined(table.containerWidget) && !isNullOrUndefined(table.containerWidget.containerWidget) && table.containerWidget.containerWidget instanceof FootNoteWidget) {\n table.containerWidget.containerWidget.height += table.height;\n this.isTableInsert = true;\n }\n }\n var startLine = this.selection.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.selection.getLastParagraphInLastCell(table.getSplitWidgets().pop());\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n this.isTableInsert = false;\n this.updateHistoryForComments(removedComment);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n *\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = true;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.rowInsertion = function (count, rowPlacement, startCell, endCell, row, table, isInsertRow) {\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n row.bottomBorderWidth = 0;\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i, index, table, true);\n newRow.rowFormat.copyFormat(row.rowFormat);\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, isInsertRow);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.selection.getFirstParagraphInFirstCell(widget);\n }\n if (isInsertRow) {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n };\n /**\n * Fits the table based on AutoFitType.\n *\n * @param {AutoFitType} - auto fit type\n * @returns {void}\n */\n Editor.prototype.autoFitTable = function (fitType) {\n if (this.documentHelper.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var tableAdv = this.selection.getTable(startPosition, endPosition);\n tableAdv = tableAdv.getSplitWidgets()[0];\n var parentTable = this.documentHelper.layout.getParentTable(tableAdv);\n if (!isNullOrUndefined(parentTable)) {\n this.setOffsetValue(this.selection);\n parentTable = parentTable.combineWidget(this.owner.viewer);\n this.initHistory(fitType === 'FitToContents' ? 'TableAutoFitToContents' : fitType === 'FitToWindow' ? 'TableAutoFitToWindow' : 'TableFixedColumnWidth');\n if (this.documentHelper.owner.editorHistoryModule) {\n this.cloneTableToHistoryInfo(parentTable);\n }\n parentTable.updateProperties(true, tableAdv, fitType);\n this.documentHelper.owner.isShiftingEnabled = true;\n //Layouts the table.\n this.documentHelper.layout.reLayoutTable(tableAdv);\n this.reLayout(this.selection, true);\n }\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertTableBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.owner.viewer);\n // if (this.editorHistory) {\n // let clonedTable: TableWidget = this.cloneTableToHistoryInfo(prevBlock);\n // }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n prevBlock.insertTableRowsInternal(table.childWidgets, prevBlock.childWidgets.length, true);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n if (this.checkInsertPosition(this.selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n prevBlock.isDefaultFormatUpdated = false;\n this.documentHelper.layout.reLayoutTable(prevBlock);\n this.selection.start.setPosition(paragraph.firstChild, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.selection.end.setPosition(paragraph.firstChild, true);\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n *\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n //let rowSpanCellIndex: number = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n this.copyCellFormats(row, cellIndex);\n }\n }\n this.tableReLayout(table, startParagraph, newCell);\n }\n };\n Editor.prototype.copyCellFormats = function (row, index) {\n var newCell = row.childWidgets[index];\n var newCellPara = newCell.childWidgets[0];\n (index == (row.childWidgets.length - 1)) ? --index : ++index;\n var nextCell = row.childWidgets[index];\n var nextCellpara = nextCell.childWidgets[0];\n var nextCellTextBox = nextCellpara.childWidgets[0].children[0];\n newCellPara.paragraphFormat.copyFormat(nextCellpara.paragraphFormat);\n newCell.cellFormat.copyFormat(nextCell.cellFormat);\n if (!isNullOrUndefined(nextCellTextBox)) {\n newCellPara.characterFormat.copyFormat(nextCellTextBox.characterFormat);\n }\n else {\n newCellPara.characterFormat.copyFormat(nextCellpara.characterFormat);\n }\n };\n Editor.prototype.tableReLayout = function (table, startParagraph, newCell) {\n table.updateRowIndex(0);\n var parentTable = this.documentHelper.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.skipScrollToPosition = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n *\n * @returns {TableWidget}\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat = new WTableFormat(table);\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.leftIndent = this.selection.start.paragraph.leftIndent;\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n if (this.owner.enableTrackChanges) {\n this.insertRevision(tableRow.rowFormat, 'Insertion');\n }\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex, index, table, isNewRow) {\n var tableWidget = table;\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n if (!isNullOrUndefined(index) && !isNullOrUndefined(tableWidget)) {\n if (index && index > 0 && tableWidget.childWidgets[index - 1] && tableWidget.childWidgets[index - 1].childWidgets[i]) {\n startPara = tableWidget.childWidgets[index - 1].childWidgets[i].childWidgets[0];\n }\n else if (index == 0) {\n startPara = tableWidget.childWidgets[index].childWidgets[i].childWidgets[0];\n }\n }\n var tableCell = this.createColumn(startPara, isNewRow);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph, isNewRow) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n var textElementBox = paragraph.childWidgets[0].children[0];\n if (!isNullOrUndefined(textElementBox)) {\n para.characterFormat.copyFormat(textElementBox.characterFormat);\n }\n else {\n para.characterFormat.copyFormat(paragraph.characterFormat);\n }\n if (isNewRow) {\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.paragraphFormat.leftIndent = 0;\n }\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: localizeValue.getConstant('UnTrack'),\n content: localizeValue.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.confirmCellMerge.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.confirmCellMerge();\n }\n };\n Editor.prototype.confirmCellMerge = function () {\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.owner.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var firstParagraph = this.selection.getFirstParagraph(mergedCell);\n startPosition.setPosition(firstParagraph.firstChild, true);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n var firstBlock;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n var lastBlock = cell.lastChild;\n if (lastBlock instanceof ParagraphWidget && lastBlock.isEmpty()) {\n cell.childWidgets.pop();\n }\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n firstBlock = lastBlock;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n var newBlock = block.clone();\n newBlock.containerWidget = mergedCell;\n mergedCell.childWidgets.push(newBlock);\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n }\n }\n }\n //To Ensure minimul content. \n if ((mergedCell.childWidgets.length === 0 || mergedCell.childWidgets.length === 1 && mergedCell.childWidgets[0] instanceof TableWidget) && firstBlock) {\n var newBlock = firstBlock.clone();\n mergedCell.childWidgets.push(newBlock);\n newBlock.containerWidget = mergedCell;\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether merge cell operation can be done.\n *\n * @returns {boolean} - Returns can merge cells.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.documentHelper.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraphInternal(nextParagraph, true);\n }\n else {\n this.selection.selectParagraphInternal(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n if (this.editorHistory && this.editorHistory.isUndoing &&\n this.editorHistory.currentBaseHistoryInfo.action === 'InsertTextParaReplace') {\n offset = 0;\n }\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.owner.viewer);\n if (insertAfter) {\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.constructRevisionsForBlock(newParagraph, true);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n this.documentHelper.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n insertIndex = this.moveContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable) {\n this.documentHelper.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n //let lineIndex: number = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (inline instanceof ShapeElementBox) {\n var shapeIndex = lineWidget.paragraph.floatingElements.indexOf(inline);\n if (shapeIndex !== -1) {\n lineWidget.paragraph.floatingElements.splice(shapeIndex, 1);\n }\n }\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n inline.ischangeDetected = true;\n span.ischangeDetected = true;\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n this.updateRevisionForMovedContent(inline, span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n inline.ischangeDetected = true;\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n Editor.prototype.updateRevisionForMovedContent = function (inline, tempSpan) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n }\n };\n /**\n * update complex changes when history is not preserved\n *\n * @param {number} action - Specifies the action\n * @param {string} start - Specifies the selection start\n * @param {string} end - Specified the selection end\n * @private\n * @returns {void}\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.documentHelper.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.documentHelper.updateFocus();\n this.owner.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * Re-layout content.\n *\n * @param {Selection} selection - Specifies the selection\n * @param isSelectionChanged - Specifies the selection changed\n * @private\n * @returns {void}\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged, isLayoutChanged) {\n if (!isNullOrUndefined(this.previousBlockToLayout)) {\n // Layout content for previous page to fix content based on KeepWithNext format.\n var previousBlock = this.previousBlockToLayout;\n this.documentHelper.layout.layoutBodyWidgetCollection(previousBlock.index, previousBlock.bodyWidget, previousBlock, false, false);\n this.previousBlockToLayout = undefined;\n }\n if (!this.documentHelper.isComposingIME && this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action !== 'ClearFormat') {\n if (this.editorHistory.currentHistoryInfo.action !== 'ApplyStyle') {\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n this.isHandledComplex = false;\n return;\n }\n if (isNullOrUndefined(this.documentHelper.blockToShift)) {\n this.documentHelper.removeEmptyPages();\n this.documentHelper.layout.updateFieldElements();\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }*/\n this.owner.viewer.updateScrollBars();\n if (!selection.owner.isShiftingEnabled) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (this.owner.showRevisions && this.owner.revisions.length > 0) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.shiftLayoutedItems(true);\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n if (!isNullOrUndefined(selection.start.paragraph)) {\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.containerWidget) && selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.documentHelper.layout.isRelayoutFootnote = true;\n this.shiftFootnotePageContent(selection.start.paragraph.bodyWidget.containerWidget);\n //this.documentHelper.layout.layoutfootNote(selection.start.paragraph.bodyWidget.containerWidget);\n }\n else {\n this.documentHelper.layout.isRelayoutFootnote = false;\n this.shiftFootnotePageContent();\n }\n }\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.documentHelper.updateFocus();\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n //this.documentHelper.layout.allowLayout = true;\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n if (!(this.editorHistory.undoStack && this.editorHistory.undoStack.length > 0 && this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1] instanceof HistoryInfo &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions[this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions.length - 1] === this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n else {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n if (isLayoutChanged) {\n return;\n }\n this.fireContentChange();\n if (this.owner.enableLockAndEdit) {\n // Editable region border get updated in content changes event.\n // So, handled rerendering content after applying border.\n this.owner.viewer.updateScrollBars();\n }\n this.owner.documentHelper.layout.isRelayout = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHeaderFooterWidget = function (headerFooterWidget) {\n if (isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget = this.selection.start.paragraph.bodyWidget;\n }\n this.updateHeaderFooterWidgetToPage(headerFooterWidget);\n this.shiftPageContent(headerFooterWidget.headerFooterType, headerFooterWidget.sectionFormat);\n };\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n //node = this.documentHelper.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if ((i + 1 === 1) && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') !== -1) {\n return;\n }\n if (page.index === 0 && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') === -1) {\n continue;\n }\n //if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (i > 0 || !(page.bodyWidgets[0].sectionFormat.differentFirstPage)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n //}\n }\n };\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n var update = false;\n if (isHeader) {\n update = widget != page.headerWidgetIn;\n }\n else {\n update = widget != page.footerWidgetIn;\n }\n if (update) {\n var hfWidget = widget.clone();\n this.documentHelper.layout.clearBlockWidget(hfWidget.childWidgets, true, true, true);\n hfWidget.page = page;\n hfWidget.parentHeaderFooter = widget;\n this.owner.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.documentHelper.layout.layoutHeaderFooterItems(this.owner.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidgetIn;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidgetIn;\n page.footerWidget = hfWidget;\n }\n this.removeFieldInWidget(headerOrFooter);\n this.removeFieldInWidget(headerOrFooter, undefined, true);\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInWidget = function (widget, isBookmark, isContentControl) {\n if (isNullOrUndefined(isBookmark)) {\n isBookmark = false;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n this.removeFieldInBlock(widget.childWidgets[i], isBookmark, isContentControl);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInBlock = function (block, isBookmark, isContentControl) {\n if (block instanceof TableWidget) {\n if (block.wrapTextAround && !isNullOrUndefined(block.bodyWidget)) {\n var index = block.bodyWidget.floatingElements.indexOf(block);\n if (index !== -1) {\n block.bodyWidget.floatingElements.splice(index, 1);\n }\n }\n this.removeFieldTable(block, isBookmark, isContentControl);\n }\n else if (block instanceof TableRowWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n this.removeFieldInWidget(block.childWidgets[i], isBookmark, isContentControl);\n }\n }\n else {\n this.removeField(block, isBookmark, isContentControl);\n }\n };\n Editor.prototype.removeFieldTable = function (table, isBookmark, isContentControl) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.removeFieldInWidget(row.childWidgets[j], isBookmark, isContentControl);\n }\n }\n };\n Editor.prototype.shiftFootnotePageContent = function (foot) {\n var section = this.documentHelper.pages[0].bodyWidgets[0];\n if (!isNullOrUndefined(foot)) {\n var index = this.documentHelper.pages.indexOf(foot.page);\n section = this.documentHelper.pages[index].bodyWidgets[0];\n }\n if (!isNullOrUndefined(section.page.footnoteWidget)) {\n this.checkAndShiftFromBottom(section.page, section.page.footnoteWidget);\n }\n if (!isNullOrUndefined(section.page.endnoteWidget)) {\n //this.checkAndShiftFromBottom(section.page, section.page.endnoteWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.shiftPageContent = function (type, sectionFormat) {\n // let type: HeaderFooterType = headerFooter.headerFooterType;\n var pageIndex;\n if (type.indexOf('First') !== -1) {\n pageIndex = 0;\n }\n else if (sectionFormat.differentOddAndEvenPages) {\n var isEven = type.indexOf('Even') !== -1;\n if (sectionFormat.differentFirstPage) {\n pageIndex = isEven ? 1 : 2;\n }\n else {\n pageIndex = !isEven ? 0 : 1;\n }\n }\n else {\n pageIndex = sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.documentHelper.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var section = this.documentHelper.pages[pageIndex].bodyWidgets[0];\n do {\n if (type.indexOf('Header') !== -1) {\n var widget = section.page.headerWidget;\n var isNotEmpty = !widget.isEmpty || widget.isEmpty && this.owner.enableHeaderAndFooter;\n var firstBlock = section.firstChild;\n var top_1 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n if (isNotEmpty) {\n top_1 = Math.max(headerDistance + section.page.headerWidget.height, top_1);\n }\n if (firstBlock.y !== top_1) {\n this.owner.viewer.updateClientArea(section.sectionFormat, section.page);\n firstBlock = firstBlock.combineWidget(this.owner.viewer);\n var prevWidget = firstBlock.previousRenderedWidget;\n if (prevWidget) {\n if (firstBlock.containerWidget.equals(prevWidget.containerWidget)) {\n this.owner.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n this.documentHelper.layout.updateContainerWidget(firstBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n this.documentHelper.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(section.page, section.page.footerWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n while (section) {\n var splittedSection = section.getSplitWidgets();\n section = splittedSection[splittedSection.length - 1].nextRenderedWidget;\n if (section) {\n if (pageIndex === 0) {\n break;\n }\n else {\n if (section.page.index + 1 % 2 === 0 && pageIndex === 1 ||\n (section.page.index + 1 % 2 !== 0 && pageIndex === 2)) {\n break;\n }\n var nextPage = section.page.nextPage;\n if (!isNullOrUndefined(nextPage) && nextPage.bodyWidgets[0].equals(section)) {\n section = nextPage.bodyWidgets[0];\n break;\n }\n }\n }\n }\n } while (section);\n };\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n if (bodyWidget.childWidgets.length > 1) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (!(footerWidget instanceof FootNoteWidget)) {\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n }\n if (!isNullOrUndefined(blockToShift)) {\n this.owner.viewer.updateClientArea(bodyWidget.sectionFormat, page, true);\n this.owner.viewer.cutFromTop(blockToShift.y);\n this.documentHelper.blockToShift = blockToShift;\n }\n }\n };\n Editor.prototype.allowFormattingInFormFields = function (property) {\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode() &&\n !isNullOrUndefined(this.owner.documentEditorSettings.formFieldSettings.formattingExceptions)) {\n for (var j = 0; j < this.owner.documentEditorSettings.formFieldSettings.formattingExceptions.length; j++) {\n if (property.toLowerCase() === this.owner.documentEditorSettings.formFieldSettings.formattingExceptions[j].toLowerCase()) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.getContentControl = function () {\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n var position = this.selection.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n return contentControlStart;\n }\n }\n return undefined;\n };\n Editor.prototype.checkPlainTextContentControl = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n end = this.selection.start;\n start = this.selection.end;\n }\n var startIndex = 0;\n var endIndex = 0;\n var startInline = start.currentWidget.getInline(start.offset, startIndex);\n var endInline = end.currentWidget.getInline(end.offset, endIndex);\n startIndex = startInline.index;\n endIndex = endInline.index;\n var startInlineEle = startInline.element;\n var endInlineEle = endInline.element;\n var startPosition;\n var endPosition;\n if ((startInlineEle && startInlineEle.contentControlProperties && startInlineEle.contentControlProperties.type === 'Text')\n || (endInlineEle && endInlineEle.contentControlProperties && endInlineEle.contentControlProperties.type === 'Text')) {\n startInlineEle = this.getContentControl();\n if (startInlineEle.contentControlProperties && !isNullOrUndefined(startInlineEle)) {\n var offset = startInlineEle.line.getOffset(startInlineEle, 1);\n startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(startInlineEle.line, offset);\n }\n else {\n startPosition = start;\n }\n if (endInlineEle.contentControlProperties && startInlineEle.reference) {\n endInlineEle = startInlineEle.reference;\n var endoffset = endInlineEle.line.getOffset(endInlineEle, endInlineEle.length);\n endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endInlineEle.line, endoffset);\n }\n else {\n endPosition = end;\n }\n this.selection.selectRange(startPosition, endPosition);\n }\n else if (start.paragraph.contentControlProperties\n && start.paragraph.contentControlProperties.type === 'Text') {\n this.selection.selectParagraph();\n }\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Applies character format for selection.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Spcifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update, applyStyle) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if ((this.restrictFormatting && !allowFormatting) || this.selection.checkContentControlLocked(true)) {\n return;\n }\n this.documentHelper.layout.isBidiReLayout = true;\n var selection = this.documentHelper.selection;\n if ((selection.owner.isReadOnlyMode && !allowFormatting) || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n applyStyle = isNullOrUndefined(applyStyle) ? false : applyStyle;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n this.checkPlainTextContentControl();\n if (selection.isEmpty && selection.contextType !== 'List' && !applyStyle) {\n selection.skipFormatRetrieval = true;\n if (selection.end.isAtParagraphEnd) {\n this.initHistory(action);\n this.documentHelper.owner.isShiftingEnabled = true;\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n this.reLayout(this.documentHelper.selection);\n this.documentHelper.updateFocus();\n }\n else {\n selection.fireSelectionChanged(true);\n }\n selection.skipFormatRetrieval = false;\n return;\n }\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (property === 'highlightColor' && selection.start.isInSameParagraph(selection.end)) {\n var start = selection.start;\n var end = selection.end;\n if (!this.selection.isForward) {\n end = selection.start;\n start = selection.end;\n }\n if (end.offset === selection.getLineLength(end.currentWidget) + 1 && end.offset - 1 === start.offset) {\n return;\n }\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.documentHelper.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.documentHelper.selection);\n // this.documentHelper.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n this.documentHelper.layout.isBidiReLayout = false;\n };\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = selection.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = selection.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.documentHelper.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * Preserve paragraph and offset value for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.selection.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.selection.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @returns {void}\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSubscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSuperscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', -this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n *\n * @returns {void}\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n *\n * @param {string} bullet Bullet character\n * @param {string} fontFamily Bullet font family\n * @returns {void}\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n *\n * @param {string} numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param {ListLevelPattern} listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n * @returns {void}\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n *\n * @param {BaselineAlignment} baseAlignment Specifies the baseline alignment\n * @returns {void}\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n /**\n * Clears the formatting.\n *\n * @returns {void}\n */\n Editor.prototype.clearFormatting = function () {\n var selection = this.documentHelper.selection;\n this.setPreviousBlockToLayout();\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.documentHelper.preDefinedStyles.keys; _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.documentHelper.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.documentHelper.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Creates a new instance of Style.\n *\n * @returns {void}\n */\n Editor.prototype.createStyle = function (styleString) {\n this.createStyleIn(styleString);\n };\n /**\n * Create a Style.\n * @private\n * @returns {object}\n */\n Editor.prototype.createStyleIn = function (styleString) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var style = JSON.parse(styleString);\n var styleObj = this.documentHelper.styles.findByName(style.name);\n if (styleObj !== undefined) {\n //Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.documentHelper.styles);\n return this.documentHelper.styles.findByName(style.name);\n };\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.documentHelper.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.documentHelper.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.documentHelper.layout.isBidiReLayout = false;\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'styleName', values, true, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'allCaps':\n this.updateCharacterFormat('allCaps', values);\n break;\n }\n this.reLayout(this.documentHelper.selection);\n };\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update, styleName) {\n styleName = isNullOrUndefined(styleName) ? false : styleName;\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isEmpty && !selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n if (selection.isEmpty && styleName) {\n var offset = startPosition.offset;\n var preservedStartPosition = startPosition.clone();\n var preservedEndPosition = endPosition.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n }\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.documentHelper.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.documentHelper.selection, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (!(property === 'highlightColor' && selection.isParagraphLastLine(lastLine)\n && start.currentWidget === lastLine && start.offset === selection.getLineLength(lastLine))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && ((endOffset === selection.getLineLength(lastLine) + 1) || (selection.isEmpty && selection.end.isAtParagraphEnd))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n var isStarted = true;\n var endElement = undefined;\n var indexOf = -1;\n var isIncrease = true;\n for (var j = 0; j < line.children.length; isIncrease ? j++ : j--) {\n var inlineObj = line.children[j];\n isStarted = false;\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (endElement === inlineObj) {\n endElement = undefined;\n j = indexOf;\n indexOf = -1;\n isIncrease = true;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n j += index;\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.documentHelper.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleBold = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleItalic = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n /**\n * Change the selected text to uppercase.\n * @private\n */\n Editor.prototype.changeCase = function (property) {\n if (this.selection.isEmpty || ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode())) {\n return;\n }\n this.initHistory('Uppercase');\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.changeSelectedTextCase(selection, startPosition, endPosition, property);\n this.reLayout(selection);\n };\n /**\n * Change the selected text case.\n * @private\n */\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeSelectedTextCase = function (selection, startPosition, endPosition, property, removedTextNodes) {\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n }\n var isRevert = this.editorHistory.isUndoing;\n if (isRevert && !isNullOrUndefined(removedTextNodes) && removedTextNodes.length > 0) {\n this.removedTextNodes = removedTextNodes;\n }\n var endPos = endPosition.selection.endOffset;\n this.changeTextCase(startPosition.paragraph, selection, startPosition, endPosition, property, isRevert);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (endPosition.selection.endOffset !== endPos) {\n endPosition = selection.getTextPosBasedOnLogicalIndex(endPos);\n }\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(endPosition, false);\n }\n selection.selectPosition(startPosition, endPosition);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeTextCase = function (para, selection, startPosition, endPosition, property, isRevert) {\n if (startPosition.paragraph.isInsideTable && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || selection.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n var tableCell = void 0;\n startPosition.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n tableCell = startPosition.paragraph.associatedCell;\n this.changeCaseParaFormatInCell(tableCell, startPosition, endPosition, property, isRevert);\n var table = tableCell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.changeCaseParagraph(para, selection, startPosition, endPosition, property, isRevert);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParagraph = function (para, selection, startPos, endPos, property, isRevert) {\n para = para.combineWidget(this.owner.viewer);\n var startOffsetVal = 0;\n var len = selection.getParagraphLength(para);\n var startLine = para.childWidgets.indexOf(startPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(startPos.currentWidget) : 0;\n var endOffsetVal = endPos.offset;\n var endLine = para.childWidgets.indexOf(endPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(endPos.currentWidget) : para.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (para === startPos.paragraph) {\n startOffsetVal = startPos.offset;\n }\n }\n if (!para.equals(endPos.paragraph)) {\n endOffsetVal = len;\n }\n // let count: number = 0;\n for (var i = startLine; i <= endLine; i++) {\n var line = para.childWidgets[i];\n if (i !== startLine) {\n startOffsetVal = selection.getStartLineOffset(line);\n }\n if (line === endPos.currentWidget) {\n endOffsetVal = endPos.offset;\n }\n else {\n endOffsetVal = selection.getLineLength(line);\n }\n var textCount = 0;\n var isIterationStarted = true;\n var endElementBox = undefined;\n var childIndex = -1;\n var isIncreaseIteration = true;\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < line.children.length; isIncreaseIteration ? j++ : j--) {\n var child = line.children[j];\n isIterationStarted = false;\n if (child instanceof ListTextElementBox) {\n continue;\n }\n if (endElementBox === child) {\n endElementBox = undefined;\n j = childIndex;\n childIndex = -1;\n isIncreaseIteration = true;\n }\n if (startOffsetVal >= textCount + child.length) {\n textCount += child.length;\n continue;\n }\n var startIndex = 0;\n if (startOffsetVal > textCount) {\n startIndex = startOffsetVal - textCount;\n }\n var endIndex = endOffsetVal - textCount;\n var inlineLength = child.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.changeCaseInline(child, selection, startIndex, endIndex, property, isRevert);\n j += index;\n if (endOffsetVal <= textCount + inlineLength) {\n break;\n }\n textCount += inlineLength;\n }\n }\n var endPara = endPos.paragraph;\n this.documentHelper.layout.reLayoutParagraph(para, startLine, 0);\n if (para.equals(endPara)) {\n return;\n }\n this.changeCaseNextBlock(para, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInline = function (inline, selection, startIndex, endIndex, property, isRevert) {\n if (inline instanceof TextElementBox) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert);\n }\n else {\n return this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert);\n }\n }\n return 0;\n };\n Editor.prototype.addRemovedTextNodes = function (inline, newText) {\n if (inline instanceof TextElementBox) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var span = this.editorHistory.currentBaseHistoryInfo.removedNodes[0];\n if (isNullOrUndefined(span)) {\n span = new TextElementBox();\n span.text = '';\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(span);\n }\n span.text += newText;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInlineInternal = function (inlineObj, selection, startIndex, endIndex, property, isRevert) {\n var x = 0;\n var index = inlineObj.line.children.indexOf(inlineObj);\n var paragraph = inlineObj.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inlineObj.line);\n var textElement;\n if (startIndex > 0) {\n var textToChange = inlineObj.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedTextNodes(inlineObj, textToChange);\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.line = inlineObj.line;\n //Change the text case\n textElement.text = this.getChangeCaseText(textToChange, property, isRevert);\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n if (endIndex < inlineObj.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.text = inlineObj.text.substring(endIndex);\n textElement.line = inlineObj.line;\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n var textElementBox = inlineObj;\n if (startIndex === 0) {\n var newText = textElementBox.text.substr(0, endIndex);\n this.addRemovedTextNodes(inlineObj, newText);\n //Change the text case\n textElementBox.text = this.getChangeCaseText(newText, property, isRevert);\n }\n else {\n var preText = textElementBox.text.substr(0, startIndex);\n textElementBox.text = preText;\n }\n return x;\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseNextBlock = function (block, start, end, property, isRevert) {\n block = this.getNextBlockForChangeCase(block, start, end, property, isRevert);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.changeCaseParagraph(block, this.documentHelper.selection, start, end, property, isRevert);\n }\n else {\n this.changeCaseForTable(0, block, this.documentHelper.selection, start, end, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.getNextBlockForChangeCase = function (block, start, end, property, isRevert) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n return block;\n };\n Editor.prototype.getChangeCaseText = function (input, property, isRevert) {\n if (isRevert) {\n if (!isNullOrUndefined(this.removedTextNodes) && this.removedTextNodes.length > 0) {\n var textElement = this.removedTextNodes[0];\n var oldText = textElement.text.substr(0, input.length);\n textElement.text = textElement.text.substr(oldText.length, textElement.length - oldText.length);\n input = oldText;\n if (textElement.text === '') {\n this.removedTextNodes.splice(0, 1);\n }\n }\n }\n else {\n switch (property) {\n case 'Uppercase':\n input = input.toUpperCase();\n break;\n default:\n break;\n }\n }\n return input;\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForTable = function (indexToStart, tableWidget, selection, startPos, endPos, property, isRevert) {\n tableWidget = tableWidget.combineWidget(this.owner.viewer);\n for (var i = indexToStart; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n if (endPos.paragraph.isInsideTable && selection.containsRow(row, endPos.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n this.changeCaseNextBlock(tableWidget, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedCell = function (cell, selection, property, isRevert) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(block, selection, property, isRevert);\n }\n else {\n this.changeCaseForSelTable(block, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedPara = function (paragraph, selection, property, isRevert) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (!isNullOrUndefined(element) && element instanceof TextElementBox) {\n this.addRemovedTextNodes(element, element.text);\n element.text = this.getChangeCaseText(element.text, property, isRevert);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelTable = function (tableWidget, selection, property, isRevert) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n }\n };\n // Cell\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatInCell = function (tableCell, startPos, endPos, property, isRevert) {\n var selection = this.documentHelper.selection;\n if (endPos.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(tableCell, endPos.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(tableCell, cellContainer);\n var endCell = selection.getSelectedCell(endPos.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, endPos.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, startPos, endPos)) {\n this.changeCaseParaForCellInternal(cellContainer, selection, property, isRevert);\n }\n else {\n if (startCell === cellContainer) {\n this.changeCaseParagraph(startPos.paragraph, selection, startPos, endPos, property, isRevert);\n }\n else {\n this.changeCaseParaForRow(startCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n }\n else {\n //Change case of other selected cells in the current table.\n this.changeCaseParaForTableCell(cellContainer.ownerTable, cellContainer, endCell, property, isRevert);\n }\n }\n else {\n this.changeCaseParaForRow(cellContainer.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n else {\n var wCell = selection.getContainerCell(tableCell);\n this.changeCaseParaForRow(wCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForTableCell = function (tableWidget, startCell, endCell, property, isRevert) {\n var selection = this.documentHelper.selection;\n var cellStartValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var cellEndValue = cellStartValue + startCell.cellFormat.cellWidth;\n var cellEndLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var cellEndRight = cellEndLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(cellStartValue, cellEndValue, cellEndLeft, cellEndRight);\n cellStartValue = cellInfo.start;\n cellEndValue = cellInfo.end;\n var count = tableWidget.childWidgets.indexOf(endCell.ownerRow);\n for (var m = tableWidget.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = tableWidget.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(cellStartValue) <= Math.round(left) && Math.round(left) < Math.round(cellEndValue)) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForCellInternal = function (tableCell, selection, property, isRevert) {\n for (var i = 0; i < tableCell.childWidgets.length; i++) {\n var childBlock = tableCell.childWidgets[i];\n if (childBlock instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(childBlock, selection, property, isRevert);\n }\n else {\n this.changeCaseParaFormatTableInternal(childBlock, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatTableInternal = function (table, selection, property, isRevert) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.changeCaseParaForCellInternal(row.childWidgets[y], selection, property, isRevert);\n }\n }\n };\n // Row\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForRow = function (wRow, selection, start, end, property, isRevert) {\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.changeCaseNextBlock(wRow.ownerTable, start, end, property, isRevert);\n };\n /**\n * Toggle All Caps formatting for the selected content.\n *\n * @returns {void}\n */\n Editor.prototype.toggleAllCaps = function () {\n if (this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('allCaps');\n this.selection.characterFormat.allCaps = value;\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var characterFormat = this.getSelectedCharacterFormat();\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n Editor.prototype.getSelectedCharacterFormat = function () {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (this.selection.isEmpty && this.selection.contextType === 'List') {\n var listLevel = this.selection.getListLevel(this.selection.start.paragraph);\n if (listLevel.characterFormat.uniqueCharacterFormat) {\n characterFormat = listLevel.characterFormat;\n }\n }\n else if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n return characterFormat;\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param underline Default value of ‘underline’ parameter is Single.\n * @returns {void}\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n this.updateProperty(1, underline);\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @returns {void}\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var textElement;\n var indexCountForRevision = 0;\n if (startIndex > 0) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n textElement.isRightToLeft = inline.isRightToLeft;\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n textElement.isRightToLeft = inline.isRightToLeft;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n Editor.prototype.updateRevisionForFormattedContent = function (inline, tempSpan, indexCount) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline) + indexCount;\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n }\n };\n // Cell\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else { //Format other selected cells in current table.\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.owner.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.documentHelper.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (this.isForHyperlinkFormat && this.owner.enableTrackChanges && format.ownerBase instanceof ElementBox) {\n var currentElement = format.ownerBase;\n var prevElement = currentElement.previousNode;\n if (isNullOrUndefined(prevElement)) {\n var paraWidget = currentElement.paragraph.previousWidget;\n if (!isNullOrUndefined(paraWidget) && !paraWidget.isEmpty()) {\n var lineWidget = paraWidget.lastChild;\n prevElement = lineWidget.children[lineWidget.children.length - 1];\n }\n }\n while (!isNullOrUndefined(prevElement) && !(prevElement instanceof TextElementBox)) {\n prevElement = prevElement.previousNode;\n }\n if (!isNullOrUndefined(prevElement) && prevElement.revisions.length > 0) {\n var currentRevision = prevElement.revisions[prevElement.revisions.length - 1];\n if (!this.isRevisionAlreadyIn(currentElement, currentRevision)) {\n currentElement.revisions.push(currentRevision);\n currentRevision.range.push(currentElement);\n }\n }\n else {\n this.insertRevision(currentElement, 'Insertion');\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n else if (property === 'allCaps') {\n format.allCaps = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height) {\n var modifiedFormat = new ImageInfo(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n this.documentHelper.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.documentHelper.owner.imageResizerModule) {\n this.documentHelper.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n *\n * @param {TextAlignment} textAlignment - Specified the text alignment.\n * @returns {void}\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n if (!isNullOrUndefined(this.documentHelper.selection.paragraphFormat.textAlignment) && this.documentHelper.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPreviousBlockToLayout = function () {\n var startPosition = this.documentHelper.selection.start;\n if (!this.documentHelper.selection.isForward) {\n startPosition = this.documentHelper.selection.end;\n }\n var startParagraph = startPosition.paragraph;\n if (startParagraph.paragraphFormat.keepWithNext) {\n var bodyWidget = startParagraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget instanceof BodyWidget && bodyWidget.page) {\n var previousPage = bodyWidget.page.previousPage;\n if (previousPage) {\n this.previousBlockToLayout = previousPage.bodyWidgets[0].lastChild;\n }\n }\n }\n };\n /**\n * Apply borders for selected paragraph borders\n * @private\n */\n Editor.prototype.applyParagraphBorders = function (property, bordersType, value) {\n var borders = new WBorder();\n switch (property) {\n case 'color':\n borders.color = value;\n break;\n case 'lineWidth':\n borders.lineWidth = value;\n break;\n case 'lineStyle':\n borders.lineStyle = value;\n break;\n case 'shadow':\n borders.shadow = value;\n break;\n case 'space':\n borders.space = value;\n break;\n }\n this.onApplyParagraphFormat(bordersType, borders, false, false);\n };\n /**\n * Applies paragraph format for the selection ranges.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @param {boolean} isSelectionChanged - Specifies the selection change.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if (this.restrictFormatting && !allowFormatting) {\n return;\n }\n this.setPreviousBlockToLayout();\n var action = property === 'bidi' ? 'ParagraphBidi' : (property[0].toUpperCase() + property.slice(1));\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var currentPara = selection.start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n if (property == 'leftIndent') {\n isFirstParaForList = this.isFirstParaForList(selection, currentPara);\n }\n // To stop the indentation when the paragraph x position is at the clientArea's x position\n if (value <= 0 && property == 'leftIndent') {\n var x = HelperMethods.convertPointToPixel(value);\n if ((currentPara.x + x) < this.viewer.clientArea.x)\n return;\n }\n this.initHistory(action);\n if ((this.owner.isReadOnlyMode && !allowFormatting) || !this.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && update) {\n if (isFirstParaForList) {\n this.updateListLevelIndent(value, currentPara);\n }\n else {\n this.updateListLevel(value > 0);\n }\n return;\n }\n }\n var isSkipSelection = !((value instanceof WCharacterStyle) && property == 'styleName' && selection.isEmpty);\n if (isSkipSelection && selection.isEmpty) {\n this.setOffsetValue(selection);\n var isBidiList = selection.paragraphFormat.bidi &&\n (property === 'listFormat' || selection.paragraphFormat.listId !== -1);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph;\n var layout = this.documentHelper.layout;\n // let footNoteWidgetsInfo: FootNoteWidgetsInfo = layout.getFootNodeWidgetsToShiftToPage(para);\n para = para.combineWidget(this.owner.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.layoutItemBlock(para, false);\n // if (footNoteWidgetsInfo.footNoteWidgets.length > 0) {\n // layout.moveFootNotesToPage(footNoteWidgetsInfo.footNoteWidgets, footNoteWidgetsInfo.fromBodyWidget, footNoteWidgetsInfo.toBodyWidget);\n // layout.layoutfootNote(footNoteWidgetsInfo.toBodyWidget.page.footnoteWidget);\n // }\n }\n else {\n //Iterate and update formatting's. \n if (action !== 'ParagraphBidi') {\n this.setOffsetValue(selection);\n }\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Updates the indent value in the ListLevel\n * @param {Object} value - Specifies the value\n * @param {ParagraphWidget} currentPara - Specifies the selected paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevelIndent = function (value, currentPara) {\n var list = this.documentHelper.getListById(currentPara.paragraphFormat.listFormat.listId);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var level;\n this.initHistory('List');\n if (value < 0) {\n if ((abstractList.levels[0].paragraphFormat.leftIndent + value) <= 0) {\n value = 18 - abstractList.levels[0].paragraphFormat.leftIndent;\n }\n }\n if (value == 0) {\n return;\n }\n for (var i = 0; i < abstractList.levels.length; i++) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForList(abstractList.levels[i]);\n }\n level = abstractList.levels[i];\n level.paragraphFormat.leftIndent += value;\n }\n //To Do, Implement relayouting logic for this listStyle applied paragraphs alone.\n //And shift remaining elements without layouting again.\n //It will improve the performance in large size documents.\n //The same can be reused in style modifications.\n this.documentHelper.owner.isShiftingEnabled = true;\n this.layoutWholeDocument();\n this.documentHelper.owner.isShiftingEnabled = false;\n };\n /**\n * To check the current selection is first paragraph for list\n * @param {Selection} selection - Specifies the selection\n * @param {ParagraphWidget} currentPara - Specifies the current paragraph\n * @private\n * @returns {boolean}\n */\n Editor.prototype.isFirstParaForList = function (selection, currentPara) {\n var isFirstParaForList = false;\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && currentPara.paragraphFormat.listFormat.listLevelNumber === 0) {\n //Getting the previous paragraph with same listId\n var previousParagraph = this.updateWholeListItems(currentPara, true, selection.paragraphFormat.listId);\n if (isNullOrUndefined(previousParagraph)) {\n isFirstParaForList = true;\n }\n }\n return isFirstParaForList;\n };\n /**\n * Update the list level\n *\n * @param {boolean} increaseLevel - Specifies the increase level\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var documentHelper = this.documentHelper;\n var listFormat = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n var list = documentHelper.getListById(paragraphFormat.listFormat.listId);\n var listLevel = documentHelper.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = documentHelper.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n documentHelper.selection.start.updatePhysicalPosition(true);\n documentHelper.selection.end.updatePhysicalPosition(true);\n documentHelper.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n *\n * @param {WList} list - Specified the list\n * @param {number} listLevelNumber - Specified the list level number\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n //let selection: Selection = this.documentHelper.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.documentHelper.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'spaceAfterAuto':\n this.updateParagraphFormat('spaceAfterAuto', value, false);\n break;\n case 'spaceBeforeAuto':\n this.updateParagraphFormat('spaceBeforeAuto', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'borders':\n case 'topBorder':\n case 'bottomBorder':\n case 'leftBorder':\n case 'rightBorder':\n case 'horizontalBorder':\n case 'verticalBorder':\n this.updateParagraphFormat(property, value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'bidi':\n var isBidiList = this.selection.paragraphFormat.listId !== -1;\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.updateParagraphFormat('bidi', value, false);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n break;\n case 'contextualSpacing':\n this.updateParagraphFormat('contextualSpacing', value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.documentHelper.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n *\n * @param {ParagraphWidget} paragraph - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n format.listFormat.ownerBase = format;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.documentHelper.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n var textAlignment = value;\n if (format.bidi && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n else if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n }\n format.textAlignment = textAlignment;\n //this.documentHelper.layout.allowLayout = false;\n }\n else if (property === 'topBorder') {\n this.applyBorder(format.borders.top, value);\n }\n else if (property === 'bottomBorder') {\n this.applyBorder(format.borders.bottom, value);\n }\n else if (property === 'leftBorder') {\n this.applyBorder(format.borders.left, value);\n }\n else if (property === 'rightBorder') {\n this.applyBorder(format.borders.right, value);\n }\n else if (property === 'horizontalBorder') {\n this.applyBorder(format.borders.horizontal, value);\n }\n else if (property === 'verticalBorder') {\n this.applyBorder(format.borders.vertical, value);\n }\n else if (property === 'borders') {\n format.borders.copyFormat(value);\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.documentHelper.styles.findByName(value);\n }\n format.applyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.documentHelper.layout.clearListElementBox(format.ownerBase);\n if (format.listFormat.listId >= 0) {\n format.clearIndent();\n }\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n else if (property === 'bidi') {\n format.bidi = value;\n }\n else if (property === 'keepWithNext') {\n format.keepWithNext = value;\n }\n else if (property === 'keepLinesTogether') {\n format.keepLinesTogether = value;\n }\n else if (property === 'widowControl') {\n format.widowControl = value;\n }\n else if (property === 'contextualSpacing') {\n format.contextualSpacing = value;\n }\n else if (property === 'spaceAfterAuto') {\n format.spaceAfterAuto = value;\n }\n else if (property === 'spaceBeforeAuto') {\n format.spaceBeforeAuto = value;\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.listFormat.ownerBase = destFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n //destFormat.borders = sourceFormat.borders;\n };\n /**\n * Copies list level paragraph format\n *\n * @param {WParagraphFormat} oldFormat - Specifies the old format\n * @param {WParagraphFormat} newFormat - Specifies the new format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * To apply continue numbering from the previous list\n *\n * @returns {void}\n */\n Editor.prototype.applyContinueNumbering = function () {\n var selection = this.selection;\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n }\n this.applyContinueNumberingInternal(selection);\n };\n Editor.prototype.applyContinueNumberingInternal = function (selection) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n var paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n this.documentHelper.updateFocus();\n };\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var documentHelper = this.documentHelper;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId\n && levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n }\n }\n block.paragraphFormat.copyFormat(format);\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n var listLevel = this.selection.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === 0) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else if (listType === listLevel.listLevelPattern\n || this.checkNumberArabic(listType, listLevel.listLevelPattern)) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('RestartNumbering');\n }\n this.restartListAt(selection);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentList = selection.paragraphFormat.getList();\n var list = currentList.clone();\n list.listId = this.documentHelper.lists[(this.documentHelper.lists.length - 1)].listId + 1;\n this.documentHelper.lists.push(list);\n var abstractList = currentList.abstractList.clone();\n abstractList.abstractListId = this.documentHelper.abstractLists[(this.documentHelper.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n this.restartListAtInternal(selection, list.listId);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAtInternal = function (selection, listId) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId);\n this.reLayout(selection, false);\n this.documentHelper.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n }\n }\n block.paragraphFormat.listFormat.listId = listId;\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId);\n };\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.owner.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.layoutItemBlock(paragraph, false);\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n var selection = end.owner.selection;\n var lastLine = end.currentWidget;\n var isParaSelected = start.offset === 0 && (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && end.offset === selection.getLineLength(lastLine) + 1 || end.isAtParagraphEnd);\n if (!isParaSelected && (end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyParaFormatProperty(block, property, value, update);\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.documentHelper.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.documentHelper.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update) {\n table = table.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update);\n }\n }\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n * Update section format\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n var selection = this.documentHelper.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.documentHelper.clearContent();\n var startSectionIndex = startPosition.paragraph.bodyWidget.sectionIndex;\n var endSectionIndex = endPosition.paragraph.bodyWidget.sectionIndex;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (this.documentHelper.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n break;\n }\n }\n for (var i = startPageIndex; i < this.documentHelper.pages.length; i++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n // let startPageIndex: number = this.documentHelper.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.documentHelper.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.documentHelper.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.documentHelper.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(selection, property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n case 'bidi':\n return 'TableBidi';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getRowAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableCellAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n //let selection: Selection = this.documentHelper.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n else if (property === 'pageStartingNumber') {\n sectionFormat.pageStartingNumber = value;\n }\n else if (property === 'restartPageNumbering') {\n sectionFormat.restartPageNumbering = value;\n }\n else if (property === 'endnoteNumberFormat') {\n sectionFormat.endnoteNumberFormat = value;\n }\n else if (property === 'footNoteNumberFormat') {\n sectionFormat.footNoteNumberFormat = value;\n }\n else if (property === 'restartIndexForEndnotes') {\n sectionFormat.restartIndexForEndnotes = value;\n }\n else if (property === 'restartIndexForFootnotes') {\n sectionFormat.restartIndexForFootnotes = value;\n }\n else if (property === 'initialFootNoteNumber') {\n sectionFormat.initialFootNoteNumber = value;\n }\n else if (property === 'initialEndNoteNumber') {\n sectionFormat.initialEndNoteNumber = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutWholeDocument = function (isLayoutChanged) {\n this.documentHelper.layout.isLayoutWhole = true;\n var startPosition = this.documentHelper.selection.start;\n var endPosition = this.documentHelper.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.documentHelper.selection.end;\n endPosition = this.documentHelper.selection.start;\n }\n var startInfo = this.selection.getParagraphInfo(startPosition);\n var endInfo = this.selection.getParagraphInfo(endPosition);\n var startIndex = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n this.documentHelper.clearContent();\n // this.documentHelper.layout.isRelayout = false;\n this.documentHelper.layout.layoutItems(sections, true);\n // this.documentHelper.layout.isRelayout = true;\n this.documentHelper.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.documentHelper.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.documentHelper.selection, undefined, isLayoutChanged);\n this.documentHelper.layout.isLayoutWhole = false;\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.documentHelper.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections);\n } while (nextSection);\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.owner.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.documentHelper.layout.clearTableWidget(block, true, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n previousBodyWidget.page.destroy();\n // this.documentHelper.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.equals(bodyWidget));\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n case 'TableBidi':\n this.editorHistory.initializeHistory(action);\n this.updateTableFormat(selection, 'bidi', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n this.applyTablePropertyValue(selection, property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.documentHelper.layout.reLayoutTable(tableStartPosition.paragraph.associatedCell.ownerTable);\n }\n };\n /**\n * update cell format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * Update row format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.documentHelper.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_2 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer) {\n // let index: number = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n block = block.combineWidget(this.viewer);\n section = block.containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.documentHelper.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n this.documentHelper.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var start = startPos.clone();\n var body = start.paragraph.containerWidget;\n var isFirstLine = start.currentWidget.isFirstLine();\n var isMultipleSectionSelected = this.checkMultipleSectionSelected(start, endPos);\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n if (isMultipleSectionSelected && this.selection.currentPasteAction == \"DefaultPaste\" && isFirstLine && start.offset < 1) {\n var currentParagraph = start.paragraph;\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n line.paragraph = paragraph;\n paragraph.containerWidget = body;\n paragraph.childWidgets.push(line);\n body.childWidgets.push(paragraph);\n paragraph.index = currentParagraph.index;\n paragraph.x = start.location.x;\n paragraph.y = start.location.y;\n }\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.checkMultipleSectionSelected = function (start, end) {\n var startSectionIndex = this.getBodyWidgetIndex(start);\n var endSectionIndex = this.getBodyWidgetIndex(end);\n if (startSectionIndex == endSectionIndex) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBodyWidgetIndex = function (textPosition) {\n var position = textPosition.hierarchicalPosition;\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n index = position.indexOf(';');\n value = position.substring(0, index);\n var bodyWidgetIndex = parseInt(value, 10);\n return bodyWidgetIndex;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== selection.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell.ownerTable.index !== end.paragraph.associatedCell.ownerTable.index)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n // if (inline instanceof FootnoteElementBox) {\n // this.removeFootnote(inline);\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(end.paragraph.associatedCell, start, end))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction);\n }\n else {\n this.deletePara(paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n };\n /**\n * Merge the selected cells.\n *\n * @returns {void}\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.documentHelper) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n *\n * @returns {void}\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.owner.viewer);\n this.selection.selectTable();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var considerTrackChanges = true;\n if (!this.skipTracking()) {\n var count = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.revisions.length === 1 && row.rowFormat.revisions[0].revisionType === 'Insertion'\n && row.rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser)) {\n this.isRemoveRevision = true;\n this.unlinkRangeFromRevision(row.rowFormat, true);\n this.isRemoveRevision = false;\n if (row.rowFormat.revisions[0].range.length === 0) {\n row.rowFormat.revisions.splice(0, 1);\n }\n count++;\n }\n }\n if (count === table.childWidgets.length) {\n considerTrackChanges = false;\n }\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n if (this.owner.enableTrackChanges && considerTrackChanges) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n if (i === 0) {\n var nextCell = table.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n this.trackRowDeletion(table.childWidgets[i]);\n }\n }\n else {\n this.removeBlock(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: locale.getConstant('UnTrack'),\n content: locale.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onDeleteColumnConfirmed.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.onDeleteColumnConfirmed();\n }\n };\n Editor.prototype.onDeleteColumnConfirmed = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.selectColumn();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n }\n };\n /**\n * Deletes the selected row(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n var blockInfo = this.selection.getParagraphInfo(startPos);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n this.selection.selectRow();\n var commentStart = [];\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n startPos = startPos.clone();\n if (!this.selection.isEmpty) {\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n this.removeRow(row);\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n if (this.owner.enableTrackChanges && this.checkIsNotRedoing()) {\n this.trackRowDeletion(tableRow, true, false);\n }\n else {\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n if (this.owner.enableTrackChanges) {\n this.trackRowDeletion(row, true, false);\n }\n else {\n this.removeRow(row);\n }\n }\n if (!this.owner.enableTrackChanges || isNullOrUndefined(table.childWidgets)) {\n this.selection.selectParagraphInternal(paragraph, true);\n }\n else {\n var textPosition = this.selection.getTextPosBasedOnLogicalIndex(startIndex);\n this.selection.selectContent(textPosition, true);\n // this.selection.start.setPositionInternal(startPos);\n // this.selection.end.setPositionInternal(this.selection.start);\n }\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n Editor.prototype.trackRowDeletion = function (row, canremoveRow, updateHistory) {\n var rowFormat = row.rowFormat;\n if (!isNullOrUndefined(rowFormat)) {\n var canInsertRevision = true;\n if (rowFormat.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(rowFormat);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(rowFormat, undefined)) {\n if (isNullOrUndefined(canremoveRow) || canremoveRow) {\n this.removeRow(row);\n }\n else {\n this.removeRevisionsInRow(row);\n }\n return true;\n }\n }\n else if (revision.revisionType === 'Deletion') {\n this.unlinkWholeRangeInRevision(rowFormat, revision);\n }\n }\n if (canInsertRevision) {\n if ((isNullOrUndefined(updateHistory) || updateHistory) && this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n }\n this.insertRevision(rowFormat, 'Deletion');\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n if (cellWidget.childWidgets[j] instanceof TableWidget) {\n this.trackInnerTable(cellWidget.childWidgets[i], canremoveRow, updateHistory);\n }\n else {\n var paraWidget = cellWidget.childWidgets[j];\n // We used this boolean since for table tracking we should add removed nodes only for entire table not for every elements in the table\n this.skipTableElements = true;\n this.insertRevisionForBlock(paraWidget, 'Deletion');\n this.skipTableElements = false;\n }\n }\n }\n }\n return false;\n };\n Editor.prototype.trackInnerTable = function (tableWidget, canremoveRow, updateHistory) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n this.trackRowDeletion(tableWidget.childWidgets[i], canremoveRow, updateHistory);\n }\n };\n Editor.prototype.returnDeleteRevision = function (revisions) {\n for (var i = 0; i < revisions.length; i++) {\n if (revisions[i].revisionType === 'Deletion') {\n return revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (row.rowFormat.revisions.length > 0) {\n this.removeRevisionsInRow(row);\n }\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n /**\n * @private\n * @param {TableWidget} table Specifies the table widget\n * @returns {void}\n */\n Editor.prototype.updateTable = function (table) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n };\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.selection.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n if (end.paragraph.isInsideTable) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.documentHelper.selection.getLineLength(paragraph.lastChild);\n }\n // If previous widget is splitted paragraph, combine paragraph widget.\n var block = paragraph.previousRenderedWidget ?\n paragraph.previousRenderedWidget.combineWidget(this.documentHelper.viewer) : undefined;\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset) ||\n (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentHistoryInfo &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && block && block.isPageBreak()\n && (startOffset === 0 && !start.currentWidget.isFirstLine || startOffset > 0))) {\n isCombineNextParagraph = true;\n }\n var paraEnd = end.clone();\n paraEnd.offset = paraEnd.offset - 1;\n var paraReplace = (start.paragraph === paragraph && start.isAtParagraphStart && paraEnd.isAtParagraphEnd &&\n this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && this.editorHistory.currentBaseHistoryInfo.action === 'Insert');\n if (paraReplace) {\n this.editorHistory.currentBaseHistoryInfo.action = 'InsertTextParaReplace';\n }\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n end.currentWidget === paragraph.lastChild || paraReplace) {\n var isStartParagraph = start.paragraph === paragraph;\n if (!this.isInsertingTOC || this.owner.enableTrackChanges && end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine() || paraReplace) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n var revisionLength = paragraph.characterFormat.revisions.length;\n if (paragraph.isEmpty() && revisionLength > 0) {\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.removeBlock(paragraph);\n }\n if (!isNullOrUndefined(block) && !isStartParagraph && !paraReplace) {\n this.delBlockContinue = true;\n this.delBlock = block;\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && !section.equals(nextSection) && section.index !== nextSection.index) {\n this.delSection = nextSection;\n }\n else {\n this.delSection = undefined;\n }\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n this.delBlockContinue = false;\n this.delBlock = undefined;\n if (editAction === 4) {\n return;\n }\n else {\n if (this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action === 'ParaMarkTrack') {\n this.addRemovedNodes(paragraph.characterFormat.cloneFormat());\n if (paragraph.characterFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(paragraph.characterFormat, true);\n }\n paragraph.characterFormat.revisions = [];\n }\n else {\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC' && this.editorHistory.currentBaseHistoryInfo.action !== 'Reject Change') {\n if (isCombineNextParagraph) {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.deleteParagraphMark(currentParagraph, selection, editAction, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n }\n }\n else {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.addRemovedNodes(paragraph);\n }\n }\n return;\n }\n }\n else {\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC') {\n var removedNodeLength = -1;\n if (this.editorHistory.currentBaseHistoryInfo) {\n removedNodeLength = this.editorHistory.currentBaseHistoryInfo.removedNodes.length;\n }\n this.insertRevisionForBlock(paragraph, 'Deletion');\n if (paragraph.isEmpty() && !(end.paragraph.previousRenderedWidget instanceof TableWidget)) {\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (removedNodeLength === -1) {\n this.addRemovedNodes(paragraph);\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.splice(removedNodeLength, 0, paragraph);\n }\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n }\n else {\n // On deleting para, para items may be added with delete revisions so we need to ensure whether it can be combined with prev/ next para.\n this.combineRevisionWithBlocks(paragraph.firstChild.children[0]);\n }\n if (paragraph === end.paragraph && this.editorHistory.currentBaseHistoryInfo.action === 'Delete') {\n var paraInfo = this.selection.getParagraphInfo(end);\n this.selection.editPosition = this.selection.getHierarchicalIndex(paraInfo.paragraph, paraInfo.offset.toString());\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n return;\n }\n }\n else {\n //this.documentHelper.comments;\n var foot = void 0;\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n }else if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n }*/\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.addRemovedNodes(paragraph);\n this.removeBlock(paragraph);\n /* let widget: IWidget;\n for(let i:number =0;i< foot.childWidgets.length; i++) {\n widget = foot.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n \r\n let para: ParagraphWidget = widget;\n if (!isNullOrUndefined(para)) {\n this.removeBlock(para);\n }}}*/\n }\n if (this.documentHelper.blockToShift === paragraph) {\n this.documentHelper.blockToShift = undefined;\n }\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.selection.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && isNullOrUndefined(nextWidget) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.selection.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n };\n Editor.prototype.deleteSection = function (selection, section, nextSection, editAction) {\n if (editAction < 4) {\n this.combineSectionInternal(selection, section, nextSection);\n }\n //Copies the section properties, if this is last paragraph of section.\n if (editAction > 2) {\n section.sectionFormat.copyFormat(nextSection.sectionFormat);\n }\n };\n Editor.prototype.combineSectionInternal = function (selection, section, nextSection) {\n // if (section.sectionFormat.isEqualFormat(nextSection.sectionFormat)) {\n // } else {\n var bodyWidget = section.getSplitWidgets()[0];\n var currentSection = [];\n this.combineSectionChild(bodyWidget, currentSection);\n bodyWidget = currentSection[0];\n var lastBlockIndex = bodyWidget.lastChild.index;\n this.updateBlockIndex(lastBlockIndex + 1, nextSection.firstChild);\n var insertIndex = 0;\n var containerWidget = nextSection;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets.splice(i, 1)[0];\n containerWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.bodyWidget, block, false);\n block = block.getSplitWidgets().pop();\n containerWidget = block.containerWidget;\n insertIndex = block.indexInOwner + 1;\n i--;\n }\n this.updateSectionIndex(undefined, nextSection, false);\n this.addRemovedNodes(bodyWidget);\n // this.insert\n // }\n };\n /* eslint-disable max-len */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget && !isNullOrUndefined(block.paragraphFormat.baseStyle) && block.paragraphFormat.baseStyle.name === 'Normal') {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n if (block instanceof ParagraphWidget) {\n newParagraph.paragraphFormat.lineSpacing = block.paragraphFormat.lineSpacing;\n newParagraph.paragraphFormat.lineSpacingType = block.paragraphFormat.lineSpacingType;\n var style = this.documentHelper.styles.findByName('Normal');\n if (!isNullOrUndefined(style)) {\n newParagraph.paragraphFormat.baseStyle = new WParagraphStyle();\n newParagraph.paragraphFormat.baseStyle.copyStyle(style);\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine);\n if (paragraphAdv.containerWidget.childWidgets[insertIndex]) {\n var line = (paragraphAdv.containerWidget.childWidgets[insertIndex]);\n for (var i = 0; i < line.childWidgets.length; i++) {\n var linewid = line.childWidgets[i];\n for (var j = 0; j < linewid.children.length; j++) {\n var inline = linewid.children[j];\n if (inline instanceof FootnoteElementBox) {\n this.removeFootnote(inline);\n }\n }\n }\n }\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n Editor.prototype.removeCommentsInBlock = function (block) {\n if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var row = block.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block_1 = cell.childWidgets[k];\n this.removeCommentsInBlock(block_1);\n }\n }\n }\n }\n else {\n this.removeCommentInPara(block);\n }\n };\n Editor.prototype.removeCommentInPara = function (block) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var lineWidget = block.childWidgets[i];\n //Iterate through each line widgets.\n for (var j = 0; j < lineWidget.children.length; j++) {\n this.removeCommentsInline(lineWidget.children[j]);\n }\n }\n };\n Editor.prototype.removeCommentsInline = function (inline) {\n if (inline instanceof CommentCharacterElementBox) {\n if (inline.commentType === 1) {\n // if (!inline.comment.isReply) {\n // for (let i: number = 0; i < inline.comment.replyComments.length; i++) {\n // this.removeCommentsInline(inline.comment.replyComments[i].commentEnd);\n // }\n // }\n // if (inline.comment.commentStart && inline.comment.commentStart.commentMark) {\n // inline.comment.commentStart.removeCommentMark();\n // }\n // if (!inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment) >= 0\n // || inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment.ownerComment) >= 0) {\n // this.deleteCommentWidget(inline.comment);\n // }\n }\n else {\n inline.removeCommentMark();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeBlock = function (block, isSkipShifting, skipElementRemoval) {\n var index;\n var blockCollection;\n var containerWidget;\n if (!skipElementRemoval) {\n this.removeFieldInBlock(block);\n this.removeFieldInBlock(block, true);\n this.removeFieldInBlock(block, undefined, true);\n this.removeCommentsInBlock(block);\n }\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n for (var i = 0; i < block.childWidgets.length; i++) {\n var isSkipTracking = void 0;\n if (!this.isPasteRevertAction()) {\n isSkipTracking = this.skipTracking();\n }\n if (block.childWidgets[i] instanceof TableRowWidget && !isSkipTracking) {\n var tableDelete = block.childWidgets[i];\n this.removeDeletedCellRevision(tableDelete);\n }\n if (block.childWidgets[i] instanceof LineWidget) {\n var line = block.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof FootnoteElementBox && !this.selection.isEmpty) {\n this.removeFootnote(element);\n }\n }\n }\n }\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n if (!isNullOrUndefined(containerWidget.containerWidget) && containerWidget.containerWidget instanceof FootNoteWidget) {\n containerWidget.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false, isSkipShifting);\n }\n };\n Editor.prototype.removePrevParaMarkRevision = function (currentBlock, isFromDelete) {\n isFromDelete = isNullOrUndefined(isFromDelete) ? false : isFromDelete;\n if (this.owner.enableTrackChanges || currentBlock.characterFormat.revisions.length != 0) {\n var currentPara = currentBlock;\n var rangeIndex = -1;\n var revision = void 0;\n var nonEmptyEndPara = currentPara;\n if (!isFromDelete && !isNullOrUndefined(nonEmptyEndPara.previousRenderedWidget)) {\n nonEmptyEndPara = nonEmptyEndPara.previousRenderedWidget;\n }\n if (nonEmptyEndPara.characterFormat.revisions.length > 0) {\n revision = nonEmptyEndPara.characterFormat.revisions[nonEmptyEndPara.characterFormat.revisions.length - 1];\n rangeIndex = revision.range.indexOf(nonEmptyEndPara.characterFormat);\n }\n if (rangeIndex >= 0 && !isNullOrUndefined(revision)) {\n var lastRange = revision.range[rangeIndex];\n var isParaMark = lastRange instanceof WCharacterFormat;\n if (isParaMark) {\n revision.range.splice(rangeIndex, 1);\n if (nonEmptyEndPara.characterFormat && nonEmptyEndPara.characterFormat.revisions.indexOf(revision) > -1) {\n nonEmptyEndPara.characterFormat.revisions.splice(nonEmptyEndPara.characterFormat.revisions.indexOf(revision), 1);\n }\n if (revision.range.length == 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n }\n }\n }\n };\n Editor.prototype.isPasteRevertAction = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n return true;\n }\n return false;\n };\n Editor.prototype.toCheckForTrack = function (block) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (block instanceof TableWidget && block.childWidgets.length > 0) {\n var rowFormat = block.childWidgets[0].rowFormat;\n if ((rowFormat.revisions.length > 0 && rowFormat.revisions[0].revisionType !== 'Insertion'\n && rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser))\n || (rowFormat.revisions.length === 0)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.removeFootnote = function (element, paragraph) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnoteWidget = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnoteWidget.bodyWidgets.length; j++) {\n if (element === (footnoteWidget.bodyWidgets[j]).footNoteReference) {\n footnoteWidget.height -= footnoteWidget.bodyWidgets[j].childWidgets[0].height;\n footnoteWidget.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (footnoteWidget.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(this.documentHelper.footnoteCollection.indexOf(element), 1);\n };\n Editor.prototype.removeEndnote = function (element, paragraph) {\n if (element.paragraph.bodyWidget.page.endnoteWidget) {\n var endnoteWidget = element.paragraph.bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnoteWidget.bodyWidgets.length; j++) {\n if (element === (endnoteWidget.bodyWidgets[j]).footNoteReference) {\n endnoteWidget.height -= endnoteWidget.bodyWidgets[j].childWidgets[0].height;\n endnoteWidget.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (endnoteWidget.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(this.documentHelper.endnoteCollection.indexOf(element), 1);\n };\n Editor.prototype.removeAutoShape = function (inline) {\n var shapeIndex = inline.line.paragraph.floatingElements.indexOf(inline);\n inline.line.paragraph.bodyWidget.floatingElements.splice(inline.line.paragraph.bodyWidget.floatingElements.indexOf(inline), 1);\n inline.line.paragraph.floatingElements.splice(shapeIndex, 1);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeField = function (block, isBookmark, isContentControl) {\n var collection = this.documentHelper.fields;\n if (isBookmark) {\n collection = this.documentHelper.bookmarks.keys;\n }\n else if (isContentControl) {\n collection = this.documentHelper.contentControlCollection;\n }\n if (block.floatingElements.length > 0) {\n for (var z = 0; z < block.floatingElements.length; z++) {\n var inline = block.floatingElements[z];\n this.removeAutoShape(inline);\n }\n }\n for (var i = 0; i < collection.length; i++) {\n var element = isBookmark ?\n this.documentHelper.bookmarks.get(collection[i]) : collection[i];\n if (element.line.paragraph === block) {\n if (isBookmark) {\n this.documentHelper.bookmarks.remove(collection[i]);\n }\n else if (isContentControl) {\n this.documentHelper.contentControlCollection.splice(i, 1);\n }\n else {\n this.documentHelper.fields.splice(i, 1);\n if (this.documentHelper.formFields.indexOf(element) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(element), 1);\n }\n }\n i--;\n }\n }\n if (this.documentHelper.footnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var element = this.documentHelper.footnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnote = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnote.bodyWidgets.length; j++) {\n if (element === (footnote.bodyWidgets[j]).footNoteReference) {\n footnote.height -= (footnote.bodyWidgets[j]).height;\n footnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (footnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (this.documentHelper.endnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var element = this.documentHelper.endnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.endnoteWidget) {\n var endnote = element.paragraph.bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnote.bodyWidgets.length; j++) {\n if (element === (endnote.bodyWidgets[j]).footNoteReference) {\n endnote.height -= (endnote.bodyWidgets[j]).height;\n endnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (endnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * @private\n * @param {IWidget} node Specifies the node.\n * @returns {void}\n */\n Editor.prototype.addRemovedNodes = function (node) {\n if (node instanceof CommentCharacterElementBox && node.commentType === 0 && node.commentMark) {\n node.removeCommentMark();\n }\n if (node instanceof ContentControl && node.type === 0) {\n this.documentHelper.contentControlCollection.splice(this.documentHelper.contentControlCollection.indexOf(node), 1);\n }\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(node) !== -1) {\n this.documentHelper.fields.splice(this.documentHelper.fields.indexOf(node), 1);\n }\n if (this.documentHelper.formFields.indexOf(node) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n if (this.delBlock.indexInOwner !== -1) {\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n }\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n }\n };\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else if (isCellCleared) {\n this.documentHelper.layout.reLayoutTable(containerCell.ownerRow.ownerTable);\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var para = end.paragraph;\n var bodyWidget = para.bodyWidget instanceof BodyWidget ? para.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction, endCells) {\n var clonedTable = undefined;\n var action = 'Delete';\n var isDeleteCells = false;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(endCells)) {\n endCell = endCells;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n clonedTable = this.cloneTableToHistoryInfo(table);\n if (this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack') {\n return;\n }\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n selection.owner.isLayoutEnabled = false;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n //let cells: TableCellWidget[] = [];\n var isRowSelected = this.isWholeRowSelected(startCell.ownerRow, startColumnIndex, endColumnIndex);\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (!isRowSelected) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n var tiltle = localizeValue.getConstant('UnTrack');\n var content = localizeValue.getConstant('Merge Track');\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: tiltle,\n content: content,\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onConfirmedTableCellsDeletion.bind(this, table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action)\n },\n closeOnEscape: true, position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeDeletedCellRevision = function (row) {\n if (row.rowFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(row.rowFormat, true);\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n var paraWidget = cellWidget.childWidgets[j];\n if (!isNullOrUndefined(paraWidget) && paraWidget instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n if (!isNullOrUndefined(lineWidget.children)) {\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.revisions.length > 0) {\n this.unlinkRangeFromRevision(element, true);\n }\n }\n }\n }\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n }\n }\n };\n Editor.prototype.onConfirmedTableCellsDeletion = function (table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var canRemoveRow = false;\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (isRowSelected) {\n canRemoveRow = this.trackRowDeletion(row, false);\n if (canRemoveRow) {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n if (!canRemoveRow && row.childWidgets.length === 0) {\n var rowToRemove = table.childWidgets[i];\n var prevRenderedRow = rowToRemove.previousRenderedWidget;\n while (!isNullOrUndefined(prevRenderedRow)) {\n for (var k = 0; k < prevRenderedRow.childWidgets.length; k++) {\n var cell = prevRenderedRow.childWidgets[k];\n if (rowToRemove.rowIndex < cell.ownerRow.rowIndex + cell.cellFormat.rowSpan) {\n cell.cellFormat.rowSpan--;\n }\n }\n prevRenderedRow = prevRenderedRow.previousRenderedWidget;\n }\n this.updateNextBlocksIndex(rowToRemove, false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.onConfirmedCellDeletion = function (row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction) {\n var isStarted = false;\n var isCellCleared = false;\n this.removeDeletedCellRevision(row);\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n //this.removeRevisionForCell(cell, true);\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n for (var k = 0; k < cell_1.childWidgets.length; k++) {\n var para = cell_1.childWidgets[k];\n for (var l = 0; l < para.childWidgets.length; l++) {\n var block = para.childWidgets[l];\n if (block instanceof LineWidget) {\n var line = block;\n for (var j_2 = 0; j_2 < line.children.length; j_2++) {\n var element = line.children[j_2];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n }\n }\n }\n }\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n };\n Editor.prototype.removeRevisionForRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0 && this.skipTracking()) {\n this.unlinkRangeFromRevision(rowWidget.rowFormat, true);\n this.addRemovedRevisionInfo(rowWidget.rowFormat, undefined);\n }\n };\n Editor.prototype.removeRevisionsInRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0) {\n for (var i = 0; i < rowWidget.rowFormat.revisions.length; i++) {\n var rowRevision = rowWidget.rowFormat.revisions[i];\n this.unlinkWholeRangeInRevision(rowWidget.rowFormat, rowRevision);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForCell = function (cellWidget, removeCollection) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.unlinkRangeFromRevision(currentElement, removeCollection);\n this.addRemovedRevisionInfo(currentElement, undefined);\n }\n }\n }\n }\n else if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.removeRevisionForInnerTable(cellWidget.childWidgets[i]);\n }\n }\n };\n Editor.prototype.removeRevisionForInnerTable = function (tableWidget) {\n if (tableWidget.childWidgets.length > 0) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n if (!isNullOrUndefined(row)) {\n this.removeRevisionForRow(row);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForBlock = function (paraWidget, revision, skipParaMark, addToRevisionInfo) {\n if (paraWidget.characterFormat.revisions.length > 0 && !skipParaMark) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(paraWidget.characterFormat, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n else {\n this.unlinkRangeByRevision(paraWidget.characterFormat, revision);\n }\n paraWidget.characterFormat.revisions = [];\n }\n if (!isNullOrUndefined(paraWidget)) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(currentElement, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(currentElement, true);\n }\n else {\n this.unlinkRangeByRevision(currentElement, revision);\n }\n currentElement.revisions = [];\n }\n }\n }\n }\n };\n Editor.prototype.unlinkRangeByRevision = function (item, revision) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (currentRevision.author === revision.author && currentRevision.revisionType === revision.revisionType) {\n item.revisions.splice(item.revisions.indexOf(revision), 1);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n }\n }\n };\n Editor.prototype.isWholeRowSelected = function (ownerRow, startColumnIndex, endColumnIndex) {\n var columnCount = startColumnIndex + endColumnIndex;\n if (startColumnIndex === 0 && ownerRow.childWidgets.length - 1 === columnCount) {\n return true;\n }\n return false;\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n var totalLength = cell.childWidgets.length - 1;\n for (var i = cell.childWidgets.length - 1; i > -1; i--) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && i === totalLength) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n if (!this.checkClearCells(selection)) {\n for (var j = paragraph.childWidgets.length - 1; j >= 0; j--) {\n var inline = paragraph.childWidgets[j];\n for (var k = inline.children.length - 1; k >= 0; k--) {\n var element = inline.children[k];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n else if (element instanceof BookmarkElementBox && element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n }\n }\n }\n else if (!paragraph.isEmpty()) {\n this.removeInlines(paragraph, paragraph.firstChild, 0, paragraph.lastChild, paragraph.lastChild.getEndOffset(), editAction);\n }\n continue;\n }\n this.removeBlock(block);\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n if (cell.childWidgets.length === 1) {\n //Add Index for line Widget\n selection.editPosition = this.selection.getHierarchicalIndex(cell.childWidgets[0], '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n }\n }\n return true;\n };\n Editor.prototype.paragrapghBookmarkCollection = function (block, existingBookmark) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n var bookmark = this.documentHelper.bookmarks.get(bookmarkCol.keys[i]);\n if (bookmark.paragraph === block) {\n existingBookmark.push(bookmark);\n }\n }\n return existingBookmark;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell)) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n if (this.toCheckForTrack(ownerTable)) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var inline = ownerTable.childWidgets[i];\n this.trackRowDeletion(inline);\n if (end.paragraph.isInsideTable && selection.containsRow(inline, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.owner.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n this.deleteContent(table, selection, editAction);\n }\n else {\n if (this.owner.enableTrackChanges) {\n if (isNullOrUndefined(end.paragraph.associatedCell) && !end.paragraph.isInsideTable) {\n var previousChild = end.paragraph.previousRenderedWidget.lastChild;\n var endCells = previousChild.lastChild;\n this.deleteCellsInTable(table, selection, start, end, editAction, endCells);\n }\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.selection.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n if (this.owner.enableTrackChanges) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n this.trackRowDeletion(table.childWidgets[i]);\n }\n }\n else {\n this.deleteContent(table, selection, editAction);\n }\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = selection.getFirstParagraphInCell(cell);\n selection.editPosition = this.selection.getHierarchicalIndex(firstParagraph, '0');\n };\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.selection.getHierarchicalIndex(paragraph, '');\n var end = this.selection.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n /**\n * @private\n * @param table\n * @returns {TableWidget}\n */\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.documentHelper.selection.start.paragraph.isInsideTable &&\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction);\n }\n };\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.documentHelper.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n var startPosition = this.selection.start.clone();\n var endPosition = this.selection.end.clone();\n var editPosition = this.selection.editPosition;\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset, editAction);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset, editAction);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n }\n }\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n if (this.skipReplace) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = undefined;\n this.updateInsertPosition();\n }\n this.selection.editPosition = editPosition;\n }\n if (isRemoved) {\n this.removeEmptyLine(paragraph);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n };\n Editor.prototype.skipTracking = function () {\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n return true;\n }\n else if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' || this.editorHistory.currentBaseHistoryInfo.action === 'Accept Change')) {\n return true;\n }\n return false;\n };\n Editor.prototype.canHandleDeletion = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'DeleteRow')) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param comment\n * Deletes comment start and end markers along with its comment widgets.\n */\n Editor.prototype.deleteCommentInSelection = function (comment) {\n //if comment end mark is in selection, both comment start and end markers will get deleted along with its comment widgets.\n var curentBaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo\n && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.initComplexHistory('DeleteCommentInline');\n }\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n }\n this.selection.editPosition = curentBaseHistoryInfo.insertPosition;\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.editPosition;\n this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset, editAction) {\n var count = this.selection.getLineLength(lineWidget);\n var startText = undefined;\n var textCount = 0;\n var lastText = undefined;\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n if (isNullOrUndefined(editAction) || editAction !== 2) {\n for (var k = 0; k < lineWidget.children.length; k++) {\n var elementbox = lineWidget.children[k];\n if (elementbox instanceof TextElementBox) {\n var text = elementbox.text;\n if (text.length + textCount > startOffset && !(textCount > startOffset)) {\n startText = text[startOffset - textCount - 1];\n if (isNullOrUndefined(startText) && (startOffset - textCount) === 0) {\n startText = lastText;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text.length + textCount > endOffset) {\n if ((text[endOffset - textCount] === ' ' && startOffset === 0) || (startText === ' ' && text[endOffset - textCount] === ' ')) {\n endOffset += 1;\n }\n }\n lastText = text[text.length - 1];\n }\n textCount += elementbox.length;\n }\n }\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n if (inline instanceof BookmarkElementBox) {\n if (this.documentHelper.bookmarks.containsKey(inline.name)) {\n this.documentHelper.bookmarks.remove(inline.name);\n }\n }\n if (inline instanceof ShapeBase && inline.textWrappingStyle !== 'Inline') {\n this.removeAutoShape(inline);\n }\n //clear form field revisions if it is intentionally deleted.\n if (this.skipFieldDeleteTracking && inline.revisions.length > 0) {\n var fieldInline = inline;\n if (fieldInline instanceof FieldElementBox) {\n if (fieldInline.fieldType === 1 || fieldInline.fieldType === 2) {\n fieldInline = fieldInline.fieldBegin;\n }\n this.clearFieldElementRevisions(fieldInline, inline.revisions);\n }\n }\n if (this.canHandleDeletion() || (this.owner.enableTrackChanges && !this.skipTracking() && !this.skipFieldDeleteTracking && !this.isInsertingTOC)) {\n if (!this.skipTableElements) {\n this.addRemovedNodes(inline.clone());\n }\n this.handleDeleteTracking(inline, startOffset, endOffset, i);\n }\n else {\n // if (editAction < 4) {\n if (inline instanceof FootnoteElementBox) {\n inline.isLayout = false;\n }\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n this.addRemovedNodes(inline);\n lineWidget.children.splice(i, 1);\n }\n }\n else if (inline instanceof TextElementBox) {\n var span = this.handleDeleteTracking(inline, startIndex, endIndex);\n //if (editAction < 4) {\n // let span: TextElementBox = new TextElementBox();\n // span.characterFormat.copyFormat(inline.characterFormat);\n // span.text = inline.text.substr(startIndex, endIndex - startIndex);\n // for (let i = inline.revisions.length - 1; i >= 0; i--) {\n // let revision: Revision = inline.revisions[i];\n // let splittedRange: object[] = this.splitRevisionByElement(inline, revision);\n // this.insertRevision(span, revision.revisionType, revision.author, revision.date, splittedRange);\n // }\n // inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n if (!isNullOrUndefined(span)) {\n if (!this.skipTableElements) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n // else {\n // this.insertTextInternal(span.text, false, 'Deletion');\n // this.editorHistory.currentBaseHistoryInfo.revisionToRemove = inline.revisions[inline.revisions.length - 1];\n // // let info: ElementInfo = this.selection.start.currentWidget.getInline(startOffset +1, 0);\n // // let element: ElementBox = info.element.clone();\n // //this.addRemovedNodes(span);\n // }\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n this.documentHelper.layout.clearListElementBox(lineWidget.paragraph);\n }\n };\n /**\n * Deletes comment widgets from comment pane along with history preservation.\n */\n Editor.prototype.deleteCommentWidgetInline = function (inline) {\n // let curentBaseHistoryInfo: BaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n // if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo) {\n // this.initComplexHistory('DeleteCommentInline');\n // }\n // // if (!this.selection.isElementInSelection(inline.comment.commentStart, true)) {\n // // this.removeCommentCharacters.push(inline.comment.commentStart);\n // // }\n // this.deleteCommentWidgetInternal(inline.comment);\n // if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // // let index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // this.editorHistory.currentHistoryInfo.modifiedActions.push(this.editorHistory.currentHistoryInfo.modifiedActions.splice(index, 1)[0]);\n // let lstActionHistoryInfo: HistoryInfo = this.editorHistory.currentHistoryInfo;\n // let frstAction: BaseHistoryInfo = lstActionHistoryInfo.modifiedActions[0];\n // // if (frstAction.action === \"DeleteCommentWidget\" && frstAction.removedNodes[0] instanceof CommentElementBox\n // // && !(frstAction.removedNodes[0] as CommentElementBox).isReply && (lstActionHistoryInfo.modifiedActions[1].action === \"DeleteCommentWidget\")) {\n // // // index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // // this.editorHistory.currentHistoryInfo.modifiedActions.splice(index - 1, 0, this.editorHistory.currentHistoryInfo.modifiedActions.splice(0, 1)[0]);\n // // }\n // }\n // this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n // this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n // this.selection.editPosition = curentBaseHistoryInfo.insertPosition; \n // this.editorHistory.currentHistoryInfo.insertPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.endPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.selectionStart = curentBaseHistoryInfo.selectionStart;\n // this.editorHistory.currentHistoryInfo.selectionEnd = curentBaseHistoryInfo.selectionEnd;\n };\n Editor.prototype.clearFieldElementRevisions = function (inline, revision) {\n var revisions = revision;\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n for (var j = 0; j < currentRevision.range.length; j++) {\n if (currentRevision.range[j] === inline) {\n for (var k = j; k < currentRevision.range.length; k) {\n if (currentRevision.range[j] instanceof FieldElementBox && currentRevision.range[j].fieldType === 1 && currentRevision.range[j].fieldBegin === inline) {\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n break;\n }\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n }\n }\n }\n }\n };\n Editor.prototype.addRemovedRevisionInfo = function (currentElement, spittedElement, removePrevRevisions) {\n for (var i = 0; i < currentElement.revisions.length; i++) {\n var revisionId = currentElement.revisions[i].revisionID;\n if (!isNullOrUndefined(spittedElement)) {\n spittedElement.removedIds.push(revisionId);\n }\n else {\n currentElement.removedIds.push(revisionId);\n }\n }\n if (isNullOrUndefined(spittedElement) && (isNullOrUndefined(removePrevRevisions) || removePrevRevisions)) {\n currentElement.revisions = [];\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * Clone the list level\n *\n * @param {WListLevel} source - Specifies the source\n * @private\n * @returns {WListLevel} - Returns the list level\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n *\n * @param {WListLevel} destination - Specifies the destination\n * @param {WListLevel} listLevel - Specifies the list level\n * @private\n * @returns {void}\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n *\n * @param {WLevelOverride} source @returns {void} - Specifies the level override\n * @private\n * @returns {WLevelOverride} - Returns the level overeide\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphs = function () {\n this.documentHelper.listParagraphs = [];\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var bodyWidget = this.documentHelper.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (block.paragraphFormat.listFormat.listId >= 0) {\n block.paragraphFormat.clearIndent();\n }\n if (isNullOrUndefined(this.documentHelper.listParagraphs)) {\n this.documentHelper.listParagraphs = [];\n }\n this.documentHelper.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n *\n * @param {WList} list - Specifies the list.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.documentHelper.selection;\n this.setOffsetValue(this.documentHelper.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.reLayout(selection);\n };\n /**\n * Applies bullets or numbering list\n *\n * @param {string} format - Specifies the format\n * @param {ListLevelPattern} listLevelPattern - Specifies the list level patterns\n * @param {string} fontFamily - Specifies the font family.\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.documentHelper.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.previousWidget;\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n if (!isUpdate) {\n while (!isNullOrUndefined(currentParagraph.nextWidget) && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.isEmpty() && currentParagraph.nextWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.nextWidget;\n }\n if (currentParagraph.nextWidget && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.nextWidget;\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n }\n var startListLevel = undefined;\n var levelNumber = -1;\n var initialListLevel = undefined;\n var isSameList = false;\n if (currentParagraph.paragraphFormat.listFormat.listId !== -1 && !isNullOrUndefined(currentParagraph.paragraphFormat.listFormat.listLevel)) {\n this.listNumberFormat = currentParagraph.paragraphFormat.listFormat.listLevel.numberFormat;\n this.listLevelPattern = currentParagraph.paragraphFormat.listFormat.listLevel.listLevelPattern;\n this.listLevelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(list)) {\n levelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (levelNumber > 0) {\n initialListLevel = this.documentHelper.layout.getListLevel(tempList, 0);\n isSameList = !isNullOrUndefined(initialListLevel) && levelNumber > 0 && selection.start.isInSameParagraph(selection.end);\n }\n var abstractList = tempList.abstractList;\n if (!abstractList) {\n abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n }\n if (abstractList.levels.length === 0) {\n startListLevel = this.documentHelper.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isUpdate) {\n if (listLevelPattern !== 'Bullet' && startListLevel.listLevelPattern === listLevelPattern\n && (startListLevel.numberFormat === format || startListLevel.numberFormat.indexOf(format) !== -1)) {\n selection.paragraphFormat.listId = list.listId;\n selection.paragraphFormat.listLevelNumber = levelNumber;\n selection.paragraphFormat.setList(list);\n return;\n }\n else {\n startListLevel = abstractList.levels[0];\n }\n }\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && levelNumber === 0\n && ((startListLevel.listLevelPattern !== listLevelPattern) || startListLevel.numberFormat !== format\n || (startListLevel.characterFormat.fontFamily !== fontFamily && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.documentHelper.lists.length > 0) {\n list.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.documentHelper.abstractLists.length > 0) {\n abstractList.abstractListId = this.documentHelper.abstractLists[this.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (isSameList && !isNullOrUndefined(list)) {\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (listLevelPattern === 'Bullet') {\n listLevel.numberFormat = format;\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n else {\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.characterFormat.fontFamily = fontFamily;\n var currentFormat = listLevel.numberFormat.substring(listLevel.numberFormat.length - 1);\n if (listLevel.numberFormat.length !== format.length && levelNumber > 0) {\n listLevel.numberFormat = format;\n }\n else if (format.substring(format.length - 1) !== listLevel.numberFormat.substring(listLevel.numberFormat.length - 1)) {\n listLevel.numberFormat = listLevel.numberFormat.replace(currentFormat, format.substring(format.length - 1));\n }\n }\n selection.paragraphFormat.setList(tempList);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = [String.fromCharCode(61558), String.fromCharCode(61656), String.fromCharCode(61607), String.fromCharCode(61623), String.fromCharCode(61608)];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * Insert page break at cursor position\n *\n * @returns {void}\n */\n Editor.prototype.insertPageBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.documentHelper.selection.start.paragraph.isInsideTable ||\n this.documentHelper.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('PageBreak');\n this.onEnter(true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.selection.checkForCursorVisibility();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onEnter = function (isInsertPageBreak) {\n var selection = this.documentHelper.selection;\n var format;\n if (isNullOrUndefined(selection.start.paragraph.paragraphFormat.baseStyle) ||\n selection.start.paragraph.paragraphFormat.baseStyle.name === 'Normal') {\n format = new SelectionCharacterFormat(undefined);\n format.cloneFormat(this.selection.characterFormat);\n var eleme = selection.start.paragraph.lastChild.children[selection.start.paragraph.lastChild.children.length - 1];\n if (eleme instanceof FootnoteElementBox) {\n format.baselineAlignment = 'Normal';\n }\n }\n if (this.isXmlMapped) {\n return;\n }\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyListInternal(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n var commentStartToInsert = this.checkAndRemoveComments();\n this.initHistory('Enter');\n var isRemoved = true;\n if (!selection.isEmpty) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n if (isInsertPageBreak) {\n var currentParagraph = selection.start.paragraph;\n var breakParagraph = new ParagraphWidget();\n breakParagraph.characterFormat.copyFormat(currentParagraph.characterFormat);\n breakParagraph.paragraphFormat.copyFormat(currentParagraph.paragraphFormat);\n var pageBreak = new TextElementBox();\n pageBreak.text = '\\f';\n var line = new LineWidget(breakParagraph);\n line.children.push(pageBreak);\n pageBreak.line = line;\n breakParagraph.childWidgets.push(line);\n if (this.owner.enableTrackChanges && currentParagraph.characterFormat.revisions.length > 0) {\n var currentRevision = this.retrieveRevisionInOder(currentParagraph.characterFormat);\n currentRevision.range.push(breakParagraph.characterFormat);\n breakParagraph.characterFormat.revisions.push(currentRevision);\n breakParagraph.characterFormat.removedIds = [];\n }\n this.insertParagraph(breakParagraph, true);\n selection.selectParagraphInternal(breakParagraph, true);\n }\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraphInternal(nextNode, true);\n this.updateEndPosition();\n if (isInsertPageBreak && this.editorHistory) {\n this.owner.editorHistory.updateHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n var currentPara = this.selection.start.paragraph.containerWidget.firstChild;\n if (!isNullOrUndefined(currentPara)) {\n currentPara.isChangeDetected = false;\n var nextPara = currentPara.nextRenderedWidget;\n while (this.owner.isSpellCheck && !isNullOrUndefined(nextPara)) {\n currentPara = nextPara;\n currentPara.isChangeDetected = false;\n nextPara = currentPara.nextRenderedWidget;\n }\n }\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n if (!isNullOrUndefined(format) && !isNullOrUndefined(selection.start.paragraph) && selection.start.paragraph.isEmpty()) {\n this.selection.isRetrieveFormatting = true;\n this.selection.characterFormat.cloneFormat(format);\n this.selection.isRetrieveFormatting = false;\n }\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateHistoryForComments(commentStartToInsert);\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var currentPara = paragraphAdv;\n currentPara.isChangeDetected = (offset === 0) ? true : false;\n while (this.owner.isSpellCheck && !isNullOrUndefined(currentPara.nextRenderedWidget)) {\n currentPara = currentPara.nextRenderedWidget;\n currentPara.isChangeDetected = true;\n }\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Cop ies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine)) {\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n if (paragraphAdv.paragraphFormat.baseStyle.name === paragraphAdv.paragraphFormat.baseStyle.next.name) {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n else {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n if (paragraphAdv.lastChild.children.length > 0) {\n paragraphAdv.characterFormat.copyFormat(paragraphAdv.lastChild.children[paragraphAdv.lastChild.children.length - 1].characterFormat);\n }\n // let revisions: Revision[] = [];\n // if (paragraphAdv.characterFormat.revisions.length > 0) {\n // revisions = paragraphAdv.characterFormat.revisions;\n // } else {\n if (this.owner.enableTrackChanges) {\n var lastLine = paragraphAdv.lastChild;\n if (!isNullOrUndefined(lastLine) && lastLine.children.length > 0) {\n var lastElement = lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n //ensure whether para mark can be combined with element revision\n if (!this.checkParaMarkMatchedWithElement(lastElement, paragraphAdv.characterFormat, false, 'Insertion')) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n //}\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n if (offset > 0 || !currentLine.isFirstLine()) {\n paragraphAdv = paragraphAdv.combineWidget(this.owner.viewer);\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n if (this.owner.enableTrackChanges) {\n this.insertParaRevision(paragraph, paragraphAdv.firstChild);\n }\n }\n else {\n var paragraphWidget = paragraphAdv.previousRenderedWidget;\n var isPreviousRevision = false;\n if (!isNullOrUndefined(paragraphWidget) && paragraphWidget instanceof ParagraphWidget) {\n isPreviousRevision = paragraphWidget.characterFormat.revisions.length > 0 ? true : false;\n }\n if (this.owner.enableTrackChanges) {\n if (!isPreviousRevision) {\n var firstLine = paragraphAdv.firstChild;\n var firstElement = firstLine.children[0].previousValidNodeForTracking;\n //ensure whether para mark can be combined with element revision\n if (!isNullOrUndefined(firstElement) && !this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, 'Insertion')) {\n this.insertParaRevision(paragraph);\n }\n else if (isNullOrUndefined(firstElement)) {\n insertIndex++;\n blockIndex++;\n }\n }\n else {\n if (!this.checkToMatchEmptyParaMark(paragraphAdv, paragraph)) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n }\n paragraphAdv = paragraphAdv.getSplitWidgets()[0];\n }\n insertIndex += paragraphAdv.getIndex();\n var container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n if ((!isNullOrUndefined(container.containerWidget) && container.containerWidget instanceof FootNoteWidget) || (container instanceof TableCellWidget && !isNullOrUndefined(container.bodyWidget) && container.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n var height = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n if (container instanceof TableCellWidget) {\n container.bodyWidget.height += height;\n container.bodyWidget.containerWidget.height += height;\n }\n else {\n container.containerWidget.height += height;\n container.height += height;\n }\n }\n if (this.owner.enableTrackChanges && (paragraph.characterFormat.revisions.length === 0 && paragraphAdv.characterFormat.revisions.length === 0)) {\n if (!this.checkToMatchEmptyParaMark(paragraphAdv)) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n Editor.prototype.insertParaRevision = function (paragraph, firstChild) {\n if (this.owner.enableTrackChanges && isNullOrUndefined(firstChild) && !this.isRevisionMatched(paragraph.characterFormat, 'Insertion')) {\n paragraph.characterFormat.revisions = [];\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n }\n //If it is spitted para, we need to ensure whether first element of the spitted para matches with inserted revision\n if (!isNullOrUndefined(firstChild)) {\n if (firstChild.paragraph.isInsideTable) {\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n return;\n }\n this.applyRevisionForParaMark(paragraph, firstChild, 'Insertion', true);\n // let firstElement: ElementBox = firstChild.children[0];\n // firstElement = firstElement.nextValidNodeForTracking;\n // let lastLine: LineWidget = paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n // let isCombined: boolean = false;\n // //Ensure revision matched with inserted para mark\n // if (!isNullOrUndefined(lastElement)) {\n // isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, true);\n // }\n // if (!isNullOrUndefined(firstElement)) {\n // if (paragraph.characterFormat.revisions.length > 0) {\n // if (this.isRevisionMatched(firstElement, 'Insertion')) {\n // let revisionToInclude: Revision = paragraph.characterFormat.revisions[0];\n // let matchedRevisions: Revision[] = this.getMatchedRevisionsToCombine(firstElement.revisions, 'Insertion');\n // for (let i: number = 0; i < matchedRevisions.length; i++) {\n // isCombined = true;\n // this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n // }\n // }\n // } else {\n // isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, false);\n // }\n // }\n // if (!isCombined) {\n // this.insertRevision(paragraph.characterFormat, 'Insertion');\n // }\n }\n };\n Editor.prototype.applyRevisionForParaMark = function (paragraph, firstChild, revisionType, splitRevision) {\n var firstElement = firstChild.children[0];\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n firstElement = firstElement.nextValidNodeForTracking;\n var lastLine = paragraph.lastChild;\n var lastElement = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n var isCombined = false;\n var prevRevCount = paragraph.characterFormat.revisions.length;\n //Ensure revision matched with inserted para mark\n if (!isNullOrUndefined(lastElement)) {\n isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, false, revisionType);\n }\n if (!isNullOrUndefined(firstElement)) {\n //Ensure previous inserted para mark revision matched with first element of the next paragraph.\n if (paragraph.characterFormat.revisions.length > prevRevCount) {\n if (this.isRevisionMatched(firstElement, revisionType)) {\n var revisionToInclude = paragraph.characterFormat.revisions[0];\n var matchedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n for (var i = 0; i < matchedRevisions.length; i++) {\n if (matchedRevisions[i] !== revisionToInclude) {\n isCombined = true;\n this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n }\n }\n }\n }\n else {\n isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, revisionType);\n }\n }\n if (!isCombined && (this.owner.enableTrackChanges || firstChild.paragraph.characterFormat.revisions.length > 0)) {\n this.insertRevision(paragraph.characterFormat, revisionType);\n // for spitted paragraph on moving content we maintain same revision, so if it not matched with inserted paragraph then we need to spit it.\n if (splitRevision && lastElement.revisions.length > 0 && firstElement.revisions.length > 0) {\n this.updateRevisionForSpittedTextElement(lastElement, firstElement);\n }\n }\n };\n //Combines para mark with element revision\n Editor.prototype.checkParaMarkMatchedWithElement = function (lastElement, characterFormat, isBegin, revisionType) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, characterFormat, isBegin);\n return true;\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMark = function (paraWidget, paragraphAdv) {\n var prevPara = paraWidget.previousRenderedWidget;\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Insertion');\n if (matchedRevisions.length > 0) {\n if (!isNullOrUndefined(paragraphAdv)) {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paragraphAdv.characterFormat, false);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, false);\n }\n return true;\n }\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMarkBack = function (paraWidget) {\n var prevPara = paraWidget.nextRenderedWidget;\n var lineWid = prevPara.childWidgets[0];\n var textWid = lineWid.children[0];\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n if (prevPara != undefined && lineWid != undefined && textWid != undefined && textWid.revisions.length == 1) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, true);\n return true;\n }\n }\n }\n else if (textWid != undefined && textWid.revisions.length == 1) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(textWid.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if ((block.containerWidget instanceof BodyWidget && isNullOrUndefined(block.containerWidget.containerWidget)) || (block.containerWidget instanceof BodyWidget && !isNullOrUndefined(block.containerWidget.containerWidget) && !(block.containerWidget.containerWidget instanceof FootNoteWidget))) {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.documentHelper.pages.indexOf(block.containerWidget.page); j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.rowIndex = row.index;\n cell.index = j;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget || block.containerWidget instanceof TextFrame) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n else if (!isNullOrUndefined(block.containerWidget.containerWidget) && (block.containerWidget.containerWidget instanceof FootNoteWidget)) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateEndPosition = function () {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n Editor.prototype.checkAndRemoveComments = function () {\n var selection = this.selection;\n if (selection.isEmpty) {\n return [];\n }\n var initComplexHistory = false;\n var comments = this.getSelectedComments();\n if (comments.commentEndInfo.length > 0 || comments.commentStartInfo.length > 0) {\n if (!initComplexHistory) {\n initComplexHistory = true;\n this.initComplexHistory('RemoveComment');\n }\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n //Get start and end position in order.\n var startBlockInfo = this.selection.getParagraphInfo(startPosition);\n var endBlockInfo = this.selection.getParagraphInfo(endPosition);\n for (var j = 0; j < comments.commentEndInfo.length; j++) {\n var commentToDelete = comments.commentEndInfo[j].comment;\n var commentStart = commentToDelete.commentStart;\n var commentEndMark = commentToDelete.commentEnd;\n var commentStartBlockInfo = this.selection.getParagraphInfoInternal(commentStart.line, commentStart.line.getOffset(commentStart, 0));\n var commentEndBlockInfo = this.selection.getParagraphInfoInternal(commentEndMark.line, commentEndMark.line.getOffset(commentEndMark, 0));\n if (endBlockInfo.paragraph === commentEndBlockInfo.paragraph) {\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentEnd)) {\n endBlockInfo.offset--;\n }\n }\n }\n endBlockInfo.offset--;\n }\n if (startBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n var updateStartPosition = commentStartBlockInfo.offset < startBlockInfo.offset;\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentStart)) {\n var replyCommentStart = this.selection.getParagraphInfoInternal(replyComment.commentStart.line, replyComment.commentStart.line.getOffset(replyComment.commentStart, 0));\n if (replyCommentStart.offset < startBlockInfo.offset) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n }\n }\n if (updateStartPosition) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n this.deleteCommentInternal(commentToDelete);\n }\n if (comments.commentStartInfo.length > 0) {\n for (var k = 0; k < comments.commentStartInfo.length; k++) {\n if (comments.commentStartInfo[k].line.paragraph.equals(endBlockInfo.paragraph)) {\n endBlockInfo.offset--;\n }\n this.removeInline(comments.commentStartInfo[k]);\n }\n }\n var startLineInfo = selection.getLineInfoBasedOnParagraph(startBlockInfo.paragraph, startBlockInfo.offset);\n selection.start.setPositionFromLine(startLineInfo.line, startLineInfo.offset);\n var endLineInfo = selection.getLineInfoBasedOnParagraph(endBlockInfo.paragraph, endBlockInfo.offset);\n selection.end.setPositionFromLine(endLineInfo.line, endLineInfo.offset);\n }\n return comments.commentStartInfo;\n };\n Editor.prototype.updateHistoryForComments = function (removedCommentStart) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && this.editorHistory.currentHistoryInfo.action === 'RemoveComment') {\n if (!isNullOrUndefined(removedCommentStart)) {\n for (var i = 0; i < removedCommentStart.length; i++) {\n this.initInsertInline(removedCommentStart[i], false);\n }\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onBackSpace = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n this.documentHelper.triggerSpellCheck = true;\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n var comments = this.checkAndRemoveComments();\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n this.insertSpaceInFormField();\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n for (var k = 0; k < comments.length; k++) {\n this.initInsertInline(comments[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.triggerSpellCheck = false;\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.insertRemoveBookMarkElements = function () {\n var isHandledComplexHistory = false;\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n if (!this.documentHelper.bookmarks.containsKey(bookMark.name)) {\n this.documentHelper.bookmarks.add(bookMark.name, bookMark);\n }\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkStart.clone());\n if (this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkEnd.clone());\n if (this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isBackSpace - Specifies is backspace.\n * @returns {boolean}\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end);\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n Editor.prototype.removeWholeElement = function (selection) {\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n };\n Editor.prototype.getSelectedComments = function () {\n var comments = this.documentHelper.comments;\n var commentEnds = [];\n var commentStarts = [];\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n var commentEnd = comment.commentEnd;\n var commentStart = comment.commentStart;\n if (!isNullOrUndefined(commentEnd) && this.selection.isElementInSelection(commentEnd, false)) {\n commentEnds.push(commentEnd);\n }\n else if (!isNullOrUndefined(commentStart) && this.selection.isElementInSelection(commentStart, true)) {\n commentStarts.push(commentStart);\n for (var j = 0; j < comment.replyComments.length; j++) {\n if (comment.replyComments[j].commentStart) {\n commentStarts.push(comment.replyComments[j].commentStart);\n }\n }\n }\n }\n return { commentStartInfo: commentStarts, commentEndInfo: commentEnds };\n };\n /**\n * Remove single character on left of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.selection.getParagraphInfo(selection.start);\n var endBlockInfo = this.selection.getParagraphInfo(selection.end);\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.selection.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.selection.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var isCommentDelete = false;\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n var initComplextHistory = false;\n var previousOffset = offset;\n var updateSelection = false;\n while (inline instanceof CommentCharacterElementBox) {\n var commentMark = inline;\n inline = inline.previousNode;\n if (inline) {\n previousOffset = inline.length;\n }\n if (commentMark.commentType === 0 && (isNullOrUndefined(inline) || !(inline instanceof CommentCharacterElementBox))) {\n if (isNullOrUndefined(inline)) {\n inline = commentMark;\n previousOffset = 0;\n }\n else {\n previousOffset = inline.length;\n }\n updateSelection = true;\n break;\n }\n else if (commentMark.commentType === 1) {\n if (!initComplextHistory) {\n this.initComplexHistory('RemoveComment');\n initComplextHistory = true;\n }\n this.deleteCommentInternal(commentMark.comment);\n updateSelection = true;\n }\n }\n if (updateSelection) {\n //When paragraph has only comment end mark, there will be no previous inline and comment end mark will be delete\n //And paragraph will become empty paragraph.\n //So handled special case to update selection.\n if (isNullOrUndefined(inline)) {\n var lineWidget = paragraph.childWidgets[0];\n selection.start.setPositionParagraph(lineWidget, 0);\n selection.end.setPositionParagraph(lineWidget, 0);\n }\n else {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, previousOffset);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n }\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (resultText.length === 1) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n }\n indexInInline = inlineObj.index;\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n if (begin.nextNode instanceof BookmarkElementBox) {\n end = begin.nextNode.reference;\n }\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (inline && (inline instanceof ContentControl || inline.previousNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.previousNode && !(inline.previousElement instanceof ListTextElementBox)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n var start = inline.previousNode;\n var end = inline.nextNode;\n if (!start.contentControlProperties.lockContentControl) {\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox || inline.previousNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n if (inline.previousNode) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n else {\n // remove paragraph mark and move bookmark to previous paragraph\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = paragraph.previousRenderedWidget;\n var line = prevParagraph.lastChild;\n selection.start.setPositionParagraph(inline.line, inline.line.getOffset(inline, 0));\n selection.end.setPositionParagraph(line, line.getEndOffset());\n this.removeWholeElement(selection);\n return;\n }\n }\n // Remove bookmark if selection is in between bookmark start and end element.\n }\n else if (inline.nextNode instanceof BookmarkElementBox && inline instanceof BookmarkElementBox &&\n inline.bookmarkType === 0 && inline.reference === inline.nextNode) {\n this.deleteBookmark(inline.name);\n return;\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n // if (inline instanceof CommentCharacterElementBox && inline.commentType === 1) {\n // let comment: CommentElementBox = inline.comment;\n // if (comment.isReply) {\n // comment = comment.ownerComment;\n // }\n // while (inline instanceof CommentCharacterElementBox) {\n // inline = inline.previousNode;\n // }\n // this.deleteCommentInternal(comment);\n // paragraph = inline.line.paragraph;\n // offset = inline.line.getOffset(inline, inline.length);\n // selection.start.setPositionParagraph(inline.line, offset);\n // selection.end.setPositionParagraph(inline.line, offset);\n // isCommentDelete = true;\n // }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !this.selection.isInlineFormFillMode()) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline.nextNode instanceof BookmarkElementBox) {\n var start = inline.nextNode.reference;\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n }\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (inline instanceof EditRangeStartElementBox && !(inline.previousNode instanceof EditRangeEndElementBox)) {\n return;\n }\n if (inline instanceof EditRangeEndElementBox) {\n if (!isNullOrUndefined(inline.previousNode)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var start = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (!paragraph.paragraphFormat.bidi && paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.documentHelper.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (this.owner.enableTrackChanges && paragraph.previousRenderedWidget != undefined && paragraph.previousRenderedWidget.characterFormat.revisions.length == 0) {\n if (!this.checkToMatchEmptyParaMarkBack(previousParagraph)) {\n this.insertRevision(previousParagraph.characterFormat, 'Deletion');\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n }\n else if (previousParagraph.isEmpty() && !this.owner.enableTrackChanges) {\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n }\n else if (this.owner.enableTrackChanges && previousParagraph.characterFormat.revisions != undefined && previousParagraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(paragraph, false, true);\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if ((!paragraph.isEmpty() && !this.owner.enableTrackChanges) || (!paragraph.isEmpty() && paragraph.childWidgets[0].children[0] instanceof EditRangeEndElementBox)) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n for (var j = 0; j < lineWidget.children.length; j++) {\n if (lineWidget.children[j] instanceof FootnoteElementBox) {\n var index = this.documentHelper.footnoteCollection.indexOf(lineWidget.children[j]);\n if (index === -1) {\n lineWidget.children[j].isLayout = false;\n var indexcolle = parseInt(lineWidget.children[j].text);\n this.documentHelper.footnoteCollection.splice(indexcolle - 1, 0, lineWidget.children[j]);\n // this.documentHelper.footnoteCollection.push(lineWidget.children[j] as FootnoteElementBox);\n }\n }\n }\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n this.setPositionForHistory();\n var footNoteWidgets = this.documentHelper.layout.getFootNoteWidgetsOf(paragraph);\n if (footNoteWidgets.length > 0) {\n var layout = this.documentHelper.layout;\n var bodyWidget = paragraph.bodyWidget;\n layout.layoutfootNote(bodyWidget.page.footnoteWidget);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.documentHelper.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n if (isCommentDelete) {\n this.owner.editorHistory.undoStack[this.owner.editorHistory.undoStack.length - 2].modifiedActions.push(this.owner.editorHistory.undoStack[this.owner.editorHistory.undoStack.length - 1]);\n this.owner.editorHistory.undoStack.splice(this.owner.editorHistory.undoStack.length - 1, 1);\n isCommentDelete = false;\n }\n }\n else {\n this.fireContentChange();\n }\n }\n if (initComplextHistory && this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n var childLength = lineWidget.children.length;\n for (var i = 0; i < childLength; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n var isBreak = this.removeCharacter(inline, offset, count, lineWidget, lineIndex, i);\n if (isBreak) {\n break;\n }\n count += inline.length;\n }\n };\n Editor.prototype.removeCharacter = function (inline, offset, count, lineWidget, lineIndex, i, isRearrange) {\n var isBreak = false;\n if (inline instanceof BookmarkElementBox && inline.line !== inline.reference.line && !(lineWidget.children[i] instanceof BookmarkElementBox)) {\n if (!isNullOrUndefined(inline.line.previousLine)) {\n inline.line.previousLine.children.splice(inline.line.previousLine.children.length, 0, inline);\n inline.line = inline.line.previousLine;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.previousRenderedWidget)) {\n inline.line.paragraph.previousRenderedWidget.lastChild.children.splice(inline.line.paragraph.previousRenderedWidget.lastChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.previousRenderedWidget.lastChild;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.nextRenderedWidget)) {\n inline.line.paragraph.nextRenderedWidget.firstChild.children.splice(inline.line.paragraph.nextRenderedWidget.firstChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.nextRenderedWidget.firstChild;\n }\n lineWidget.children.splice(i, 1);\n return true;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n inline.ischangeDetected = true;\n if (this.owner.isSpellCheck) {\n this.owner.spellChecker.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n }\n if (!inline.canTrigger) {\n this.documentHelper.triggerSpellCheck = false;\n }\n if (offset === count && inline.length === 1) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.addRemovedNodes(inline.clone());\n this.handleDeleteTracking(inline, indexInInline, 1, i);\n }\n else {\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n this.addRemovedNodes(inline);\n lineWidget.children.splice(i, 1);\n }\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n }\n else {\n var span = this.handleDeleteTracking(inline, indexInInline, 1);\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n if (!isNullOrUndefined(span)) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n isBreak = true;\n }\n return isBreak;\n };\n Editor.prototype.removeCharacterInLine = function (inline, indexInInline, endOffset) {\n var span = new TextElementBox();\n if (inline instanceof TextElementBox) {\n span.characterFormat.copyFormat(inline.characterFormat);\n var removedCount = (endOffset === 1) ? 1 : (endOffset - indexInInline);\n span.text = inline.text.substr(indexInInline, removedCount);\n var text = inline.text;\n inline.text = text.substring(0, indexInInline) + text.substring(indexInInline + removedCount, text.length);\n if (inline.contentControlProperties) {\n span.contentControlProperties = inline.contentControlProperties.clone();\n }\n }\n return span;\n };\n Editor.prototype.removeRevisionsInformation = function (elementBox, indexInInline, endOffset, elementIndex) {\n var removeElement = elementBox.previousElement;\n var revision;\n revision = this.retrieveRevisionInOder(removeElement);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(removeElement, undefined)) {\n elementBox.line.children.splice(elementIndex, 1);\n }\n }\n };\n Editor.prototype.handleDeleteTracking = function (elementBox, indexInInline, endOffset, elementIndex, startIndex, endIndex) {\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isUndoing = isNullOrUndefined(this.editorHistory) ? false : (this.editorHistory.isUndoing || this.editorHistory.isRedoing);\n var removedNode = undefined;\n if (this.canHandleDeletion() || (isTrackingEnabled && !this.skipTracking())) {\n if (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox) {\n if (elementBox instanceof BookmarkElementBox && elementBox.previousElement instanceof FieldElementBox && elementBox.previousElement.formFieldData) {\n if (elementBox.previousElement.revisions.length > 0) {\n this.removeRevisionsInformation(elementBox, indexInInline, endOffset, elementIndex);\n }\n }\n else {\n elementBox.line.children.splice(elementBox.indexInOwner, 1);\n }\n return undefined;\n }\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n if (!this.skipTableElements) {\n this.updateEndRevisionIndex();\n }\n if (elementBox.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(elementBox);\n var index = this.owner.revisions.changes.indexOf(revision);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(elementBox, undefined)) {\n // inserted revision same author as delete revision so we can delete\n if (isNullOrUndefined(elementIndex)) {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n }\n else {\n var index_1 = revision.range.indexOf(elementBox);\n revision.range.splice(index_1, 1);\n if (revision.range.length === 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n this.unLinkFieldCharacter(elementBox);\n elementBox.line.children.splice(elementIndex, 1);\n }\n }\n else {\n //Insert revision and delete revision (which is to be included) haven't matched\n if (isNullOrUndefined(elementIndex)) {\n var text = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n if (indexInInline === 0) {\n var prevElement = elementBox.previousElement;\n this.handleDeletionForInsertRevision(prevElement, elementBox, text, endOffset, indexInInline, true);\n }\n else if (elementBox.length !== indexInInline) {\n for (var i = elementBox.revisions.length - 1; i >= 0; i--) {\n var revision_2 = elementBox.revisions[i];\n var index_2 = revision_2.range.indexOf(elementBox);\n var newElement = new TextElementBox();\n newElement.characterFormat.copyFormat(elementBox.characterFormat);\n newElement.line = elementBox.line;\n newElement.text = elementBox.text.substr(indexInInline);\n newElement.revisions.splice(0, 0, revision_2);\n revision_2.range.splice(index_2 + 1, 0, newElement);\n text.revisions.splice(0, 0, revision_2);\n text.line = elementBox.line;\n revision_2.range.splice(index_2 + 1, 0, text);\n elementBox.text = elementBox.text.substr(0, indexInInline);\n var indexInOwner = elementBox.indexInOwner;\n elementBox.line.children.splice(indexInOwner + 1, 0, newElement);\n elementBox.line.children.splice(indexInOwner + 1, 0, text);\n this.addRemovedNodes(text.clone());\n this.insertRevision(text, 'Deletion');\n this.updateLastElementRevision(text);\n }\n }\n else if (elementBox.length === indexInInline) {\n var nextElement = elementBox.nextElement;\n this.handleDeletionForInsertRevision(nextElement, elementBox, text, endOffset, indexInInline, false);\n }\n else {\n if (endOffset === 1) {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n this.addRemovedNodes(text.clone());\n this.insertInlineInternal(text, 'Deletion');\n }\n }\n else if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.updateLastElementRevision(elementBox);\n }\n }\n }\n else if (revision.revisionType === 'Deletion') {\n if (index !== -1 && revision.author !== this.owner.currentUser) {\n var range = revision.range;\n var startOff = range[0].line.getOffset(range[0], 0);\n var lastEle = range[range.length - 1];\n var endOff = lastEle.line.getOffset(lastEle, lastEle.length);\n if (startOff === indexInInline && endOff === endOffset) {\n elementBox.revisions.splice(elementBox.revisions.indexOf(revision), 1);\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n if (elementBox.line.getOffset(elementBox, 0) === startOff) {\n this.owner.revisions.changes.splice(index, 1);\n }\n }\n }\n if (endOffset === 1) {\n if (isDelete) {\n this.selection.start.moveNextPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n if (this.isRevisionMatched(elementBox, 'Deletion')) {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n else {\n var rangeIndex = revision.range.indexOf(elementBox);\n var endOff = elementBox.line.getOffset(elementBox, elementBox.length);\n if (endOff >= endOffset && (revision.range.length > (rangeIndex + 1))) {\n this.updateRevisionForSpittedTextElement(elementBox, revision.range[(rangeIndex + 1)]);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n }\n else if (revision.range.length === 1 || indexInInline === 0) {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n if (rangeIndex !== -1 && revision.range.length !== 1) {\n this.updateRevisionForSpittedTextElement(revision.range[(rangeIndex - 1)], revision.range[rangeIndex]);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n }\n }\n else {\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n }\n }\n }\n this.updateLastElementRevision(elementBox);\n }\n }\n else {\n //No revision information in the element\n if (!isNullOrUndefined(elementIndex)) {\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n }\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n }\n }\n }\n else {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n }\n return removedNode;\n };\n Editor.prototype.toCombineOrInsertRevision = function (elementBox, type) {\n if (!this.checkToCombineRevisionsInSides(elementBox, type)) {\n this.insertRevision(elementBox, type);\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n };\n Editor.prototype.updateLastElementRevision = function (elementBox) {\n if (!this.skipTableElements) {\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.skipReplace && (!isNullOrUndefined(this.owner.search) ? !this.owner.search.isRepalceTracking : true)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.lastElementRevision)) {\n this.editorHistory.currentBaseHistoryInfo.lastElementRevision = elementBox;\n elementBox.isMarkedForRevision = true;\n }\n }\n }\n };\n Editor.prototype.updateEndRevisionIndex = function () {\n if (!isNullOrUndefined(this.editorHistory.undoStack) && this.editorHistory.undoStack.length > 0) {\n var prevHistoryInfo = this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1];\n if (prevHistoryInfo.lastElementRevision && isNullOrUndefined(prevHistoryInfo.endRevisionLogicalIndex)) {\n prevHistoryInfo.updateEndRevisionInfo();\n }\n }\n };\n Editor.prototype.retrieveRevisionInOder = function (elementBox) {\n if (elementBox.revisions.length === 1) {\n return elementBox.revisions[0];\n }\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === 'Deletion') {\n return elementBox.revisions[i];\n }\n }\n return elementBox.revisions[elementBox.revisions.length - 1];\n };\n Editor.prototype.handleDeletionForInsertRevision = function (elementToEnsure, currentElement, spittedSpan, endOffset, indexInInline, isBegin) {\n if (!isNullOrUndefined(elementToEnsure) && currentElement.revisions.length === 0 && this.isRevisionMatched(elementToEnsure, 'Deletion')) {\n this.addRemovedNodes(spittedSpan.clone());\n this.insertTextInline(elementToEnsure, this.selection, spittedSpan.text, 0);\n }\n else {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var index = revision.range.indexOf(currentElement);\n revision.range.splice((isBegin) ? index : index + 1, 0, spittedSpan);\n spittedSpan.revisions.splice(0, 0, revision);\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n if (endOffset === 1 && !isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.updateCursorForInsertRevision(currentElement, indexInInline, endOffset);\n }\n this.addRemovedNodes(spittedSpan.clone());\n this.insertInlineInternal(spittedSpan, 'Deletion');\n }\n };\n Editor.prototype.handleDeleteBySplitting = function (elementBox, indexInInline, endOffset) {\n var isDelete = false;\n if (this.owner.editorHistory) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo) && this.owner.editorHistory.currentBaseHistoryInfo.action === 'Delete');\n }\n //Update cursor position to insert removed content\n if (endOffset === 1) {\n var startPosition = elementBox.line.getOffset(elementBox, 0);\n if (startPosition > 0) {\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionForLineWidget(elementBox.line, startPosition + indexInInline);\n this.selection.start.setPositionInternal(currentPosition);\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n var spittedElement = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n this.addRemovedNodes(spittedElement.clone());\n this.insertTextInternal(spittedElement.text, false, 'Deletion');\n };\n Editor.prototype.updateCursorForInsertRevision = function (inline, startOffset, endOffset) {\n var startPosition = inline.line.getOffset(inline, 0);\n if (startPosition > 0) {\n startOffset = startPosition + startOffset;\n endOffset = startPosition + endOffset;\n }\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionFromLine(inline.line, startOffset);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionFromLine(inline.line, endOffset);\n if (!currentPosition.isExistBefore(endPosition)) {\n this.selection.start.setPositionInternal(endPosition);\n this.selection.end.setPositionInternal(endPosition);\n }\n else {\n this.selection.end.setPositionInternal(currentPosition);\n this.selection.start.setPositionInternal(currentPosition);\n }\n };\n Editor.prototype.checkToCombineRevisionsInSides = function (currentElement, revisionType) {\n var prevElement = currentElement.previousNode;\n var nextElement = currentElement.nextNode;\n var isCombined = false;\n if (!isNullOrUndefined(prevElement)) {\n prevElement = prevElement.previousValidNodeForTracking;\n if (!isNullOrUndefined(prevElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, prevElement, currentElement, false);\n isCombined = true;\n }\n }\n }\n if (!isNullOrUndefined(nextElement)) {\n nextElement = nextElement.nextValidNodeForTracking;\n if (!isNullOrUndefined(nextElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(nextElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n if (isCombined) {\n this.combineElementRevision(currentElement.revisions, nextElement.revisions);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, nextElement, currentElement, true);\n }\n isCombined = true;\n }\n }\n }\n return isCombined;\n };\n /**\n * Remove the current selected content or one character right of cursor.\n *\n * @returns {void}\n */\n Editor.prototype.delete = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n var commentStarts = this.checkAndRemoveComments();\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.insertSpaceInFormField();\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n for (var k = 0; k < commentStarts.length; k++) {\n this.initInsertInline(commentStarts[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n Editor.prototype.deleteEditElement = function (selection) {\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n };\n Editor.prototype.removeContentControlMark = function (start, end) {\n if (!start.contentControlProperties.lockContentControl) {\n this.selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n this.selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.deleteEditElement(this.selection);\n return true;\n }\n return false;\n };\n /**\n * Remove single character on right of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n var lineWidget = selection.start.currentWidget;\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = lineWidget.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (!(inline instanceof TextElementBox)) {\n inline = inline.nextElement;\n }\n if (resultText.length === 1 && inline instanceof TextElementBox) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n else {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n }\n }\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n if (inline instanceof FieldElementBox && inline.fieldType === 1 &&\n !isNullOrUndefined(inline.fieldBegin.formFieldData)) {\n return;\n }\n if (inline instanceof FootnoteElementBox) {\n return;\n }\n indexInInline = 0;\n }\n var updateSelection = inline instanceof CommentCharacterElementBox;\n //Skip removing comment start/end mark on delete key\n while (inline instanceof CommentCharacterElementBox) {\n if (inline.nextNode) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n else {\n indexInInline = 1;\n break;\n }\n }\n if (updateSelection) {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, indexInInline);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) { //Selects the entire field.\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) { //Updates the offset to delete next content. \n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (this.documentHelper.isDocumentProtected &&\n this.documentHelper.protectionType === 'ReadOnly') {\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n return;\n }\n }\n else {\n if (inline instanceof EditRangeStartElementBox) {\n inline = inline.nextNode;\n offset = inline.line.getOffset(inline, 0);\n paragraph = inline.line.paragraph;\n }\n else if (inline instanceof EditRangeEndElementBox) {\n offset++;\n }\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var editStart = inline.previousNode;\n var editEnd = inline.nextNode;\n selection.start.setPositionParagraph(editStart.line, editStart.line.getOffset(editStart, 0));\n selection.end.setPositionParagraph(editEnd.line, editEnd.line.getOffset(editEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n }\n if (inline && (inline instanceof ContentControl || inline.nextNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.nextNode) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n // Move cursor inbetween content control\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n return;\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n if (this.removeContentControlMark(inline.previousNode, inline.nextNode)) {\n return;\n }\n }\n // Remove content if content control is empty\n if (inline instanceof ContentControl && inline.previousNode instanceof ContentControl\n && inline.previousNode.reference === inline) {\n // Remove content control if there is no element presen in between start and end mark.\n if (this.removeContentControlMark(inline.previousNode, inline)) {\n return;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline.nextNode && inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n if (inline instanceof BookmarkElementBox) {\n offset = inline.line.getOffset(inline, 1);\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.documentHelper.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof FootNoteWidget) {\n return;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n if (paragraph.isEndsWithPageBreak) {\n var lastLine = paragraph.lastChild;\n var lastChild = lastLine.children[lastLine.children.length - 1];\n this.selection.start.setPositionForSelection(lastLine, lastChild, 0, this.selection.start.location);\n }\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removePrevParaMarkRevision(paragraph, true);\n this.removeBlock(paragraph, false, true);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraphInternal(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraphInternal(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraphInternal(nextParagraph, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.removePrevParaMarkRevision(currentParagraph, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n if (this.owner.enableTrackChanges && !isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Delete' && lineLength !== selection.getLineLength(selection.start.currentWidget)) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n else if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + 1, false);\n }\n else {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction, handleParaMark) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // } \n var offset = 0;\n this.removeBlock(paragraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.owner.viewer);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n var canRemoveParaMark = (!isNullOrUndefined(handleParaMark) && handleParaMark) ? this.handleDeleteParaMark(paragraph, nextPara[0]) : true;\n if (canRemoveParaMark) {\n var prevLastLineIndex = paragraph.childWidgets.length - 1;\n var elementIndex = paragraph.childWidgets[prevLastLineIndex].children.length - 1;\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline = nextParagraph.childWidgets[i];\n if (nextParagraph.characterFormat.revisions.length > 0) {\n for (var i_2 = 0; i_2 < nextParagraph.characterFormat.revisions.length; i_2++) {\n for (var j = 0; j < nextParagraph.characterFormat.revisions[i_2].range.length; j++) {\n nextParagraph.characterFormat.revisions[i_2].range[j].ownerBase = paragraph;\n }\n paragraph.characterFormat.revisions.push(nextParagraph.characterFormat.revisions[i_2]);\n }\n }\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline);\n inline.paragraph = paragraph;\n i--;\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.removeBlock(nextParagraph);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n //this.combineRevisionOnDeleteParaMark(paragraph, prevLastLineIndex, elementIndex);\n this.addRemovedNodes(nextParagraph);\n }\n }\n }\n };\n Editor.prototype.handleDeleteParaMark = function (currentPara, nextPara) {\n if (!this.owner.enableTrackChanges && currentPara.characterFormat.revisions.length > 0) {\n // If tracking disabled and revision exists then remove revision from character format\n for (var i = 0; i < currentPara.characterFormat.revisions.length; i++) {\n var currentRevision = currentPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(currentPara.characterFormat);\n currentRevision.range.splice(rangeIndex, 1);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n return true;\n }\n }\n if (this.owner.enableTrackChanges) {\n var canRemoveParaMark = false;\n if (currentPara.characterFormat.revisions.length > 0) {\n var deleteRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Deletion');\n if (!isNullOrUndefined(deleteRevision) && this.isRevisionMatched(deleteRevision, 'Deletion')) {\n var revisionIndex = currentPara.characterFormat.revisions.indexOf(deleteRevision);\n currentPara.characterFormat.revisions.splice(revisionIndex, 1);\n deleteRevision.range.splice(deleteRevision.range.indexOf(currentPara.characterFormat), 1);\n if (deleteRevision.range.length === 0) {\n this.owner.revisions.remove(deleteRevision);\n }\n canRemoveParaMark = true;\n }\n var insertRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Insertion');\n if (!isNullOrUndefined(insertRevision) && this.isRevisionMatched(currentPara.characterFormat, 'Insertion')) {\n var rangeIndex = insertRevision.range.indexOf(currentPara.characterFormat);\n insertRevision.range.splice(rangeIndex, 1);\n if (insertRevision.range.length === 0) {\n this.owner.revisions.remove(insertRevision);\n }\n canRemoveParaMark = true;\n }\n if (canRemoveParaMark) {\n return true;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n }\n return false;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n return false;\n }\n }\n return true;\n };\n Editor.prototype.insertDeleteParaMarkRevision = function (currentPara, nextPara) {\n var lastLine = currentPara.lastChild;\n var lastElement = lastLine.children.length > 0 ? lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking : undefined;\n if (!isNullOrUndefined(lastElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, currentPara.characterFormat, false);\n }\n }\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0].nextValidNodeForTracking;\n };\n Editor.prototype.retrieveRevisionByType = function (item, revisionToRetrieve) {\n for (var i = 0; i < item.revisions.length; i++) {\n if (item.revisions[i].revisionType === revisionToRetrieve) {\n return item.revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.combineRevisionOnDeleteParaMark = function (paragraph, lineIndex, elementIndex) {\n var lastLine = paragraph.childWidgets[lineIndex];\n var lastElement = lastLine.children[elementIndex];\n var firstElement = lastElement.nextNode;\n firstElement = firstElement.nextValidNodeForTracking;\n lastElement = lastElement.nextValidNodeForTracking;\n if (firstElement.revisions.length > 0 && lastElement.revisions.length > 0) {\n this.combineElementRevisions(lastElement, firstElement);\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.documentHelper.selection.editPosition === this.selection.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n this.documentHelper.selection.editPosition = this.selection.getHierarchicalIndex(currentParagraph, this.documentHelper.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.documentHelper.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n /**\n * deleteSelectedContentInternal\n * @private\n */\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.documentHelper.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n *\n * @private\n * @param {string} base64String Base64 string, web URL or file URL.\n * @param {number} width Image width\n * @param {number} height Image height\n * @returns {void}\n */\n Editor.prototype.insertPicture = function (base64String, width, height, isUiInteracted) {\n var imageElementBox = new ImageElementBox(true);\n if (HelperMethods.formatClippedString(base64String).extension === '.svg') {\n imageElementBox.metaFileImageString = base64String;\n imageElementBox.isMetaFile = true;\n this.generateFallBackImage(base64String, width, height, imageElementBox);\n }\n else {\n imageElementBox.imageString = base64String;\n }\n imageElementBox.width = width;\n imageElementBox.height = height;\n imageElementBox.textWrappingStyle = 'Inline';\n this.insertPictureInternal(imageElementBox, isUiInteracted);\n };\n Editor.prototype.generateFallBackImage = function (base64String, width, height, imageElementBox) {\n var drawImage = new Image();\n drawImage.onload = function () {\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n var draw = document.createElement('canvas');\n draw.width = width * displayPixelRatio;\n draw.height = height * displayPixelRatio;\n var context = draw.getContext('2d');\n context.scale(displayPixelRatio, displayPixelRatio);\n context.drawImage(drawImage, 0, 0, width, height);\n imageElementBox.imageString = draw.toDataURL('image/png', 1);\n };\n drawImage.src = base64String;\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox, isUiInteracted) {\n var selection = this.documentHelper.selection;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initHistory('InsertInline');\n if (isUiInteracted) {\n this.fitImageToPage(selection, imageElementBox);\n }\n this.insertInlineInSelection(selection, imageElementBox);\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageWidth = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n //Resizes image to page size.\n if (imageElementBox.width > pageWidth) {\n imageElementBox.height = imageElementBox.height * pageWidth / imageElementBox.width;\n imageElementBox.width = pageWidth;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @param {selection} Selection context.\n * @param {elementBox} Elementbox\n * @param selection\n * @param elementBox\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.documentHelper.selection.sectionFormat.bottomMargin;\n format.topMargin = this.documentHelper.selection.sectionFormat.topMargin;\n format.leftMargin = this.documentHelper.selection.sectionFormat.leftMargin;\n format.rightMargin = this.documentHelper.selection.sectionFormat.rightMargin;\n format.pageHeight = this.documentHelper.selection.sectionFormat.pageHeight;\n format.pageWidth = this.documentHelper.selection.sectionFormat.pageWidth;\n format.footerDistance = this.documentHelper.selection.sectionFormat.footerDistance;\n format.headerDistance = this.documentHelper.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 791.9;\n }\n else {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 1223.9;\n }\n else {\n sectionFormat.pageWidth = 1223.9;\n sectionFormat.pageHeight = 791.9;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 1007.9;\n }\n else {\n sectionFormat.pageWidth = 1007.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 611.9;\n }\n else {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 521.9;\n sectionFormat.pageHeight = 755.9;\n }\n else {\n sectionFormat.pageWidth = 755.9;\n sectionFormat.pageHeight = 521.9;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 1190.4;\n }\n else {\n sectionFormat.pageWidth = 1190.4;\n sectionFormat.pageHeight = 841.8;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 841.8;\n }\n else {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 595.2;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.5;\n sectionFormat.pageHeight = 595.2;\n }\n else {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 419.5;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 1031.7;\n }\n else {\n sectionFormat.pageWidth = 1031.7;\n sectionFormat.pageHeight = 728.4;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.8;\n sectionFormat.pageHeight = 728.4;\n }\n else {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 515.8;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @param blockAdv\n * @param updateNextBlockList\n * @param blockAdv\n * @param updateNextBlockList\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.documentHelper.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block) && !this.documentHelper.isTextInput) {\n //Updates the list value of the rendered paragraph.\n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateWholeListItems = function (block, isFindingListParagraph, listID) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n currentBlock = this.getNextBlockForList(page.bodyWidgets[0].firstChild);\n if (!isNullOrUndefined(currentBlock)) {\n break;\n }\n }\n }\n var isListUpdated = false;\n do {\n var listSearchResultInfo = null;\n if (isFindingListParagraph) {\n listSearchResultInfo = { paragraph: null, listId: listID };\n }\n isListUpdated = this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (isListUpdated) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n if (listSearchResultInfo.paragraph == block) {\n return null;\n }\n else {\n return listSearchResultInfo.paragraph;\n }\n }\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (!isNullOrUndefined(currentBlock)) {\n currentBlock = this.getNextBlockForList(currentBlock);\n }\n } while (currentBlock);\n return null;\n };\n Editor.prototype.getNextBlockForList = function (currentBlock) {\n if (currentBlock instanceof ParagraphWidget &&\n this.documentHelper.layout.isFirstElementWithPageBreak(currentBlock)) {\n var nextBlock = currentBlock.nextRenderedWidget;\n if (!isNullOrUndefined(nextBlock) && nextBlock.equals(currentBlock)) {\n return nextBlock;\n }\n }\n return currentBlock;\n };\n Editor.prototype.updateListItems = function (blockAdv, block, listSearchResultInfo) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block, listSearchResultInfo);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block, listSearchResultInfo);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block, listSearchResultInfo);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block.isInsideTable && row.childWidgets.indexOf(this.documentHelper.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n return true;\n }\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block, listSearchResultInfo) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block, listSearchResultInfo) {\n if (paragraph.equals(block)) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n listSearchResultInfo.paragraph = paragraph;\n }\n return true;\n }\n else {\n var currentList = undefined;\n var levelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n if (!isNullOrUndefined(listSearchResultInfo) && paragraph.paragraphFormat.listFormat.listId === listSearchResultInfo.listId) {\n listSearchResultInfo.paragraph = paragraph;\n return true;\n }\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n levelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[levelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, levelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, false);\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, true);\n }\n }\n };\n Editor.prototype.updateListNumber = function (currentListLevel, paragraph, isUpdate) {\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n var listWholeWidth = void 0;\n if (!isNullOrUndefined(element) && element.nextElement instanceof ListTextElementBox) {\n listWholeWidth = element.width + element.nextElement.width;\n }\n if (!isNullOrUndefined(element) && element instanceof ListTextElementBox) {\n var text = this.documentHelper.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n if (isUpdate) {\n var prevWidth = element.width;\n element.text = text;\n var currentWidth = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n if (currentWidth > prevWidth) {\n element.width = currentWidth;\n }\n if (!isNullOrUndefined(listWholeWidth) && element.width < listWholeWidth) {\n element.nextElement.width = (listWholeWidth - element.width);\n }\n }\n }\n }\n };\n /**\n * Get offset value to update in selection\n *\n * @param selection\n * @private\n * @returns {void}\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.documentHelper.selection;\n var lineInfo = selection.getLineInfoBasedOnParagraph(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @param textPosition\n * @param editPosition\n * @param textPosition\n * @param editPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.selection.getParagraph({ index: editPosition });\n var lineInfo = this.selection.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * Insert page number in the current cursor position.\n *\n * @param {string} numberFormat - Optional switch that overrides the numeral style of the page number.\n * @returns {void}\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @param numberFormat\n * @private\n * @returns {void}\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets.push(paragraph);\n this.pasteContentsInternal([bodyWidget], false);\n };\n /**\n * Insert Bookmark at current selection range\n *\n * @param {string} name - Name of bookmark\n * @returns {void}\n */\n Editor.prototype.insertBookmark = function (name) {\n if (this.documentHelper.bookmarks.containsKey(name)) {\n var existingBookmark = this.documentHelper.bookmarks.get(name);\n existingBookmark.line.children.splice(existingBookmark.line.children.indexOf(existingBookmark), 1);\n /* eslint-disable-next-line max-len */\n existingBookmark.reference.line.children.splice(existingBookmark.reference.line.children.indexOf(existingBookmark.reference), 1);\n this.documentHelper.bookmarks.remove(name);\n }\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n this.initComplexHistory('InsertBookmark');\n this.insertElements([bookmarkEnd], [bookmark]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.documentHelper.bookmarks.add(name, bookmark);\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, 0, this.selection.end.location);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * Deletes specific bookmark\n *\n * @param {string} bookmarkName - Name of bookmark to delete.\n * @returns {void}\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.documentHelper.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n this.initHistory('DeleteBookmark');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n this.editorHistory.updateHistory();\n }\n this.deleteBookmarkInternal(bookmark);\n }\n this.fireContentChange();\n };\n /**\n * @param bookmark\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = '';\n }\n this.documentHelper.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n if (!isNullOrUndefined(bookmark.reference)) {\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n }\n // Remove bookmark from header footer collections\n var paragraph = bookmark.line.paragraph;\n if (bookmark.line.paragraph.isInHeaderFooter) {\n var headerFooterWidget = undefined;\n if (paragraph.containerWidget instanceof TableCellWidget) {\n headerFooterWidget = paragraph.containerWidget.getContainerTable().containerWidget;\n }\n else if (paragraph.containerWidget instanceof HeaderFooterWidget) {\n headerFooterWidget = paragraph.containerWidget;\n }\n this.updateHeaderFooterWidget(headerFooterWidget);\n }\n };\n Editor.prototype.getSelectionInfo = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!(end.offset === this.selection.getLineLength(end.currentWidget) + 1\n && this.selection.isParagraphLastLine(end.currentWidget))) {\n end.offset += 1;\n }\n var blockInfo = this.selection.getParagraphInfo(start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.selection.getParagraphInfo(end);\n var endIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n return { 'start': startIndex, 'end': endIndex };\n };\n Editor.prototype.insertElements = function (endElements, startElements) {\n var info = this.getSelectionInfo();\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.start), startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.end), endElements);\n }\n };\n Editor.prototype.insertElementsInternal = function (position, elements, isRelayout) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n this.updateInsertPosition();\n var indexInInline = 0;\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n if (this.selection.start.paragraph.isEmpty()) {\n var paragraph = this.selection.start.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n elements[0].linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n position.setPositionForSelection(elements[0].line, elements[0], elements[0].length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n else {\n var inlineObj = this.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, undefined, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @param index\n * @private\n * @returns {CommentElementBox}\n */\n Editor.prototype.getCommentElementBox = function (index) {\n var position = index.split(';');\n var comment = this.documentHelper.comments[parseInt(position[1], 10)];\n if (position.length > 2 && position[2] !== '') {\n return comment.replyComments[parseInt(position[2], 10)];\n }\n return comment;\n };\n /**\n * @param position\n * @private\n * @returns {BlockInfo}\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.selection.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.selection.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @param position\n * @param isInsertPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.selection.getParagraphInfo(position);\n hierarchicalIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n *\n * @param {BorderSettings} settings\n * @returns {void}\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially.\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells\n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex + cell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (!isNullOrUndefined(selectedCell.nextWidget)) {\n cells.push(selectedCell.nextWidget);\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n *\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n *\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n * @returns {void}\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color && applyBorder.hasValue('color')) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle && applyBorder.hasValue('lineStyle')) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth && applyBorder.hasValue('lineWidth')) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow && applyBorder.hasValue('shadow')) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space && applyBorder.hasValue('space')) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n *\n * @param {WTableFormat} format Specifies table format\n * @param {boolean} isShading Specifies shading.\n * @private\n * @returns {void}\n */\n Editor.prototype.onTableFormat = function (format, isShading) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n if (isNullOrUndefined(isShading)) {\n isShading = false;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n var table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (isShading) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.shading.copyFormat(format.shading);\n }\n }\n }\n if (!isNullOrUndefined(isShading)) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n rowWidget.rowFormat.borders.copyFormat(format.borders);\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.borders.copyFormat(format.borders);\n }\n }\n }\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(this.documentHelper.selection, undefined, value, table);\n };\n Editor.prototype.applyTablePropertyValue = function (selection, property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n else if (property === 'bidi') {\n sourceFormat.bidi = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('bidi') && applyFormat.bidi !== tableFormat.bidi) {\n tableFormat.bidi = applyFormat.bidi;\n }\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n this.documentHelper.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n *\n * @param {WRowFormat} format Specifies row format\n * @private\n * @returns {void}\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.documentHelper.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n *\n * @param {WCellFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * Applies Paragraph Format changes\n *\n * @param {WParagraphFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onParaFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('ParagraphFormat');\n this.updateParagraphFormat(undefined, format, false);\n this.reLayout(this.selection, false);\n };\n /**\n * @param selection\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n this.documentHelper.owner.cellOptionsDialogModule.applyCellMarginValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.documentHelper.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.owner.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.documentHelper.layout.getTableWidth(table));\n };\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.documentHelper, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.nodes = [];\n };\n /**\n * Updates the table of contents.\n *\n * @param tocField\n * @private\n * @returns {void}\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.documentHelper.layout.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.getUpdatedTabs();\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[tabs.length - 1].tabLeader;\n }\n if (tocSettings.rightAlign && isNullOrUndefined(tocSettings.tabLeader)) {\n tocSettings.tabLeader = 'Dot';\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n *\n * @param {TableOfContentsSettings} tableOfContentsSettings\n * @returns {void}\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.isInsertingTOC = true;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n var offset = 2;\n if (tocField.fieldEnd.paragraph === tocField.fieldEnd.paragraph.bodyWidget.lastChild) {\n offset--;\n }\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, offset, this.selection.end.location);\n this.delete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n title: localizeValue.getConstant('No Headings'),\n content: localizeValue.getConstant('Add Headings'),\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widgets;\n this.pasteContentsInternal([bodyWidget], false);\n this.isInsertingTOC = false;\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n this.updateHistoryForComments(removedCommentStart);\n }\n if (widgets.length === 0) {\n this.owner.editorHistory.undo();\n this.owner.editorHistory.redoStack.pop();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n //For TOC we used to append field end at last we need to map that inserted revision to field end.\n if (fieldBegin.revisions.length > 0) {\n var currentRevision = fieldBegin.revisions[fieldBegin.revisions.length - 1];\n currentRevision.range.push(fieldEnd);\n fieldEnd.revisions.push(currentRevision);\n }\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n *\n * @private\n * @returns {ParagraphWidget[]}\n *\n */\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph) {\n var tocDomBody = this.documentHelper.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var sectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat;\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n Editor.prototype.createHeadingLevels = function (settings) {\n //let normalStyle: string = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode, isSkipRevision) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n var currentRevision = undefined;\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n // If revision enabled.\n return fieldBegin;\n };\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n var emptyParaAppended = false;\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'Toc' + this.tocStyles[styleName];\n var paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(tocStyleName)), this.documentHelper.styles);\n paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n }\n tocPara.paragraphFormat.applyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n emptyParaAppended = true;\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n var isFieldCode = false;\n var paragraph = widget;\n while (paragraph instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paragraph.childWidgets.length; lineIndex++) {\n var lineWidget = paragraph.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.isPageBreak) {\n continue;\n }\n if ((element instanceof FieldElementBox) || (element instanceof BookmarkElementBox) || isFieldCode) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n isFieldCode = true;\n }\n else if (element.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var temp = element.text;\n var tabChar = '\\t';\n if (temp.indexOf(tabChar) !== -1) {\n temp = temp.replace(new RegExp(tabChar, 'g'), ' ');\n }\n text = text + temp;\n }\n }\n }\n paragraph = paragraph.nextSplitWidget;\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n }\n if (this.owner.enableTrackChanges && !isNullOrUndefined(tocPara)) {\n if (widgets.length === 1 || emptyParaAppended) {\n this.insertRevisionForBlock(tocPara, 'Insertion', true);\n }\n else {\n var revision = this.owner.revisionsInternal.changes[0];\n this.insertRevisionForBlock(tocPara, 'Insertion', true, revision);\n }\n }\n };\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n var bodyWidget = widget.containerWidget;\n var text = (bodyWidget.page.currentPageNum).toString();\n //text element.\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.documentHelper.bookmarks.containsKey(key)) {\n var bookmark = this.documentHelper.bookmarks.get(key);\n var bodyWidget = bookmark.paragraph.containerWidget;\n var pageRef = (bodyWidget.page.currentPageNum).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n };\n /**\n * Inserts toc bookmark.\n *\n * @param widget\n * @returns {string}\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var splitParagraph = widget.getSplitWidgets();\n var firstParagraph = splitParagraph[0];\n var lastParagraph = splitParagraph.pop();\n var startLine = firstParagraph.childWidgets[0];\n var endLine = lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n if (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox) {\n do {\n startElement = startElement.nextNode;\n } while (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox);\n }\n //Returns the bookmark if already present for paragraph.\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n Editor.prototype.generateBookmarkName = function () {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n var bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n return bookmarkName;\n };\n /**\n * Change cell content alignment\n *\n * @param verticalAlignment\n * @param textAlignment\n * @param verticalAlignment\n * @param textAlignment\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellContentAlignment = function (verticalAlignment, textAlignment) {\n this.owner.isShiftingEnabled = true;\n var selection = this.owner.selection;\n if (selection.isEmpty && selection.start.paragraph.isInsideTable) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n //Selecting the table cell to update the all the paragraph format.\n selection.selectTableCell();\n this.initHistory('CellContentVerticalAlignment');\n var cellFormat = selection.start.paragraph.associatedCell.cellFormat;\n this.applyCellPropertyValue(selection, 'verticalAlignment', verticalAlignment, cellFormat);\n this.reLayout(selection, false);\n this.initHistory('TextAlignment');\n this.updateParagraphFormat('textAlignment', textAlignment, false);\n this.reLayout(this.owner.selection, false);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n else {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n if (!isNullOrUndefined(selection.getTable(selection.start, selection.end))) {\n //Table cell vertical alignment.\n this.updateSelectionTableFormat(selection, 'CellContentVerticalAlignment', verticalAlignment);\n this.reLayout(this.owner.selection, false);\n this.initHistory('TextAlignment');\n //Paragraph text alignment.\n this.updateSelectionParagraphFormatting('textAlignment', textAlignment, false);\n this.reLayout(selection, false);\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.insertEditRangeElement = function (user) {\n if (this.documentHelper.isDocumentProtected || this.documentHelper.selection.isEmpty) {\n return;\n }\n this.initComplexHistory('RestrictEditing');\n this.selection.skipEditRangeRetrieval = true;\n var selection = this.documentHelper.selection;\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable\n && selection.start.paragraph.associatedCell.ownerTable.contains(selection.end.paragraph.associatedCell)) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (startCell.rowIndex === endCell.rowIndex) {\n var startIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n var endIndex = startCell.ownerRow.childWidgets.indexOf(endCell);\n var startElement = [];\n var endElement = [];\n for (var i = startIndex; i <= endIndex; i++) {\n var editStart = this.addEditElement(user);\n if (i == startIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n }\n editStart.columnFirst = i;\n editStart.columnLast = i;\n editStart.line = selection.start.currentWidget;\n var editEnd = editStart.editRangeEnd;\n editEnd.line = selection.end.currentWidget;\n startElement.push(editStart);\n endElement.push(editEnd);\n }\n this.insertElements(endElement, startElement);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = startElement[0].line.getOffset(startElement[0], 1);\n this.selection.start.setPositionParagraph(startElement[0].line, offset);\n offset = endElement[0].line.getOffset(endElement[0], 1);\n this.selection.end.setPositionParagraph(endElement[0].line, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n else {\n this.insertEditRangeInsideTable(startCell, endCell, user);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var startLine = this.selection.getFirstParagraphInCell(startCell).childWidgets[0];\n var endLine = this.selection.getLastParagraph(endCell).childWidgets[0];\n var offset = startLine.getOffset(startLine.children[0], 1);\n this.selection.start.setPositionParagraph(startLine, offset);\n offset = endLine.getOffset(endLine.children[0], 1);\n this.selection.end.setPositionParagraph(endLine, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n }\n else {\n this.addRestrictEditingForSelectedArea(user);\n }\n this.selection.skipEditRangeRetrieval = false;\n };\n Editor.prototype.insertEditRangeInsideTable = function (startCell, endCell, user) {\n var table = startCell.ownerTable;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var endElement = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var cellSelectionStartIndex = -1;\n var cellSelectionEndIndex = -1;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n if (cellSelectionStartIndex === -1) {\n cellSelectionStartIndex = j;\n }\n cellSelectionEndIndex = j;\n }\n }\n var newEndElement = [];\n for (var z = cellSelectionStartIndex; z <= cellSelectionEndIndex; z++) {\n var index = 0;\n var startCell_1 = void 0;\n var startParagraph = void 0;\n if (z === cellSelectionStartIndex) {\n startCell_1 = row.childWidgets[cellSelectionStartIndex];\n startParagraph = this.selection.getFirstParagraphInCell(startCell_1).childWidgets[0];\n }\n var editStart = this.addEditElement(user);\n if (z === cellSelectionStartIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n }\n editStart.columnFirst = z;\n editStart.columnLast = z;\n editStart.line = startParagraph;\n editStart.line.children.splice(index, 0, editStart);\n index++;\n var editEnd = editStart.editRangeEnd;\n newEndElement.push(editEnd);\n if (endElement.length > 0 && z === cellSelectionEndIndex) {\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = editStart.line;\n editStart.line.children.splice(index, 0, endElement[l]);\n index++;\n }\n endElement = [];\n }\n }\n endElement = newEndElement;\n if (i === count && endElement.length > 0) {\n var cellWidget = row.childWidgets[cellSelectionEndIndex];\n var lastLine = this.selection.getLastParagraph(cellWidget).lastChild;\n var index = lastLine.children.length - 1;\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = lastLine;\n lastLine.children.splice(index, 0, endElement[l]);\n index++;\n }\n }\n }\n };\n Editor.prototype.addRestrictEditingForSelectedArea = function (user) {\n var editStart = this.addEditElement(user);\n var editEnd = editStart.editRangeEnd;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n this.insertElements([editEnd], [editStart]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = editStart.line.getOffset(editStart, 1);\n this.selection.start.setPositionParagraph(editStart.line, offset);\n offset = editEnd.line.getOffset(editEnd, 1);\n this.selection.end.setPositionParagraph(editEnd.line, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.addEditElement = function (user) {\n var editStart = new EditRangeStartElementBox();\n if (user.toLocaleLowerCase() === 'everyone') {\n editStart.group = user;\n }\n else {\n editStart.user = user;\n }\n var editEnd = new EditRangeEndElementBox();\n editEnd.editRangeStart = editStart;\n editStart.editRangeEnd = editEnd;\n this.editStartRangeCollection.push(editStart);\n this.addEditCollectionToDocument();\n this.editStartRangeCollection = [];\n return editStart;\n };\n /**\n * @param protectionType\n * @private\n * @returns {void}\n */\n Editor.prototype.protect = function (protectionType) {\n this.documentHelper.isDocumentProtected = true;\n this.documentHelper.protectionType = protectionType;\n this.selection.highlightEditRegion();\n if (this.editorHistory) {\n this.editorHistory.destroy();\n }\n };\n Editor.prototype.addEditCollectionToDocument = function () {\n for (var i = 0; i < this.editStartRangeCollection.length; i++) {\n var editStart = this.editStartRangeCollection[i];\n var user = editStart.user === '' ? editStart.group : editStart.user;\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n }\n this.selection.updateEditRangeCollection();\n };\n /**\n * @param editStart\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRangeCollection = function (editStart, user) {\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictions = function (user) {\n if (!this.selection.checkSelectionIsAtEditRegion()) {\n return;\n }\n this.selection.skipEditRangeRetrieval = true;\n var editStart = this.selection.getEditRangeStartElement();\n this.initHistory('RemoveEditRange');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setEditRangeInfo(editStart);\n this.editorHistory.updateHistory();\n }\n if (editStart.user === user || editStart.group === user) {\n this.removeUserRestrictionsInternal(editStart, user);\n }\n this.selection.updateEditRangeCollection();\n this.fireContentChange();\n this.selection.skipEditRangeRetrieval = false;\n };\n /**\n * @param editStart\n * @param currentUser\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictionsInternal = function (editStart, currentUser) {\n var user = currentUser;\n if (isNullOrUndefined(currentUser)) {\n user = editStart.user === '' ? editStart.group : editStart.user;\n }\n var index = this.documentHelper.editRanges.get(user).indexOf(editStart);\n this.documentHelper.editRanges.get(user).splice(index, 1);\n if (this.documentHelper.editRanges.get(user).length === 0) {\n this.documentHelper.editRanges.remove(user);\n }\n editStart.removeEditRangeMark();\n editStart.editRangeEnd.line.children.splice(editStart.editRangeEnd.indexInOwner, 1);\n editStart.line.children.splice(editStart.indexInOwner, 1);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeAllEditRestrictions = function () {\n this.selection.skipEditRangeRetrieval = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var editStart = [];\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys.length; j++) {\n editStart = this.documentHelper.editRanges.get(keys[j]);\n for (var i = 0; i < editStart.length; i++) {\n editStart[i].editRangeEnd.line.children.splice(editStart[i].editRangeEnd.indexInOwner, 1);\n editStart[i].line.children.splice(editStart[i].indexInOwner, 1);\n }\n }\n this.documentHelper.editRanges.clear();\n this.selection.updateEditRangeCollection();\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n this.selection.editRegionHighlighters.clear();\n this.owner.viewer.updateScrollBars();\n this.selection.fireSelectionChanged(false);\n this.selection.skipEditRangeRetrieval = false;\n };\n /**\n * Insert specified form field at current selection.\n *\n * @param {FormFieldType} type Form field type\n * @returns {void}\n */\n Editor.prototype.insertFormField = function (type) {\n if (isNullOrUndefined(this.selection.start) || this.owner.enableHeaderAndFooter) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!this.selection.isEmpty) {\n isRemoved = this.removeSelectedContents(this.selection);\n }\n if (isRemoved) {\n this.insertFormFieldInternal(type);\n }\n };\n Editor.prototype.insertFormFieldInternal = function (type) {\n this.updateInsertPosition();\n var element = [];\n var temp = this.getCharacterFormat(this.selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = this.getFormFieldData(type);\n fieldBegin.characterFormat.copyFormat(format);\n element.push(fieldBegin);\n var bookmark = new BookmarkElementBox(0);\n bookmark.characterFormat.copyFormat(format);\n fieldBegin.formFieldData.name = this.getBookmarkName(type, 'Insert', this.formFieldCounter);\n bookmark.name = fieldBegin.formFieldData.name;\n element.push(bookmark);\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n var result = new TextElementBox();\n if (type === 'CheckBox') {\n result.text = String.fromCharCode(9744);\n }\n else {\n result.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n result.characterFormat.copyFormat(format);\n element.push(result);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.characterFormat.copyFormat(format);\n bookmarkEnd.name = fieldBegin.formFieldData.name;\n bookmarkEnd.reference = bookmark;\n bookmark.reference = bookmarkEnd;\n element.push(bookmarkEnd);\n this.insertElement(element);\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n if (this.documentHelper.formFields.indexOf(fieldBegin) === -1) {\n this.documentHelper.formFields.push(fieldBegin);\n }\n var offset = bookmarkEnd.line.getOffset(bookmarkEnd, 1);\n this.selection.selects(bookmarkEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(this.selection, true);\n };\n Editor.prototype.getFormFieldData = function (type) {\n switch (type) {\n case 'Text':\n return new TextFormField();\n case 'CheckBox':\n return new CheckBoxFormField();\n case 'DropDown':\n return new DropDownFormField();\n }\n };\n /**\n * @param field\n * @param info\n * @private\n * @returns {void}\n */\n Editor.prototype.setFormField = function (field, info) {\n var type;\n var formField;\n if (!isNullOrUndefined(info.format)) {\n type = 'Text';\n formField = new TextFormField();\n }\n else if (!isNullOrUndefined(info.sizeType)) {\n type = 'CheckBox';\n formField = new CheckBoxFormField();\n }\n else if (!isNullOrUndefined(info.dropdownItems)) {\n type = 'DropDown';\n formField = new DropDownFormField();\n }\n if (!isNullOrUndefined(type) && !isNullOrUndefined(formField)) {\n formField.name = field.formFieldData.name;\n formField.copyFieldInfo(info);\n this.editFormField(type, formField);\n }\n };\n /**\n * @param type\n * @param formData\n * @param type\n * @param formData\n * @private\n * @returns {boolean}\n */\n Editor.prototype.editFormField = function (type, formData) {\n var begin = this.selection.getCurrentFormField();\n if (isNullOrUndefined(begin) || isNullOrUndefined(begin.formFieldData)) {\n return false;\n }\n this.initComplexHistory('FormField');\n var bookmarkStart;\n var bookmarkEnd;\n if (formData.name !== '') {\n if (begin.formFieldData.name !== formData.name &&\n this.documentHelper.bookmarks.containsKey(formData.name)) {\n this.deleteBookmark(formData.name);\n }\n bookmarkStart = new BookmarkElementBox(0);\n bookmarkStart.name = formData.name;\n bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = formData.name;\n bookmarkStart.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmarkStart;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n // Preserves the character format for hyperlink field.\n var temp = begin.characterFormat.cloneFormat();\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var textFormat = begin.fieldSeparator.nextElement.characterFormat.cloneFormat();\n var currentOffset = begin.line.getOffset(begin, 0);\n this.selection.start.setPositionParagraph(begin.line, currentOffset);\n var endElement = begin.fieldEnd;\n if (begin.nextNode && begin.nextNode instanceof BookmarkElementBox) {\n endElement = begin.nextNode.reference;\n }\n currentOffset = endElement.line.getOffset(endElement, 1);\n this.selection.end.setPositionParagraph(endElement.line, currentOffset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(this.selection, false);\n this.skipFieldDeleteTracking = false;\n this.updateInsertPosition();\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = formData;\n element.push(fieldBegin);\n fieldBegin.characterFormat.copyFormat(format);\n if (!isNullOrUndefined(bookmarkStart)) {\n element.push(bookmarkStart);\n }\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.copyFormat(format);\n element.push(fieldSeparator);\n span = new TextElementBox();\n span.characterFormat.copyFormat(textFormat);\n span.text = this.getDefaultText(formData);\n if (type === 'CheckBox') {\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formData.sizeType === 'Exactly') {\n span.characterFormat.fontSize = formData.size;\n }\n }\n else if (formData instanceof TextFormField) {\n if (formData.defaultValue !== '') {\n if (formData.type === 'Text') {\n span.text = HelperMethods.formatText(formData.format, formData.defaultValue);\n }\n else if (formData.type === 'Number') {\n span.text = HelperMethods.formatNumber(formData.format, formData.defaultValue);\n }\n else {\n span.text = HelperMethods.formatDate(formData.format, formData.defaultValue);\n }\n }\n }\n element.push(span);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n var lastElement = fieldEnd;\n if (!isNullOrUndefined(bookmarkEnd)) {\n lastElement = bookmarkEnd;\n element.push(bookmarkEnd);\n }\n this.insertElement(element);\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n var offset = lastElement.line.getOffset(lastElement, 1);\n this.selection.selects(lastElement.line, offset, true);\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection, true);\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.getDefaultText = function (formField) {\n var defaultText = '';\n if (formField instanceof CheckBoxFormField) {\n defaultText = formField.defaultValue ? String.fromCharCode(9745) : String.fromCharCode(9744);\n }\n else if (formField instanceof DropDownFormField) {\n if (formField.dropdownItems.length > 0) {\n defaultText = formField.dropdownItems[0];\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n else if (formField instanceof TextFormField) {\n if (formField.defaultValue !== '') {\n defaultText = formField.defaultValue;\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n return defaultText;\n };\n Editor.prototype.getFormFieldCode = function (type) {\n switch (type) {\n case 'Text':\n return 'FORMTEXT';\n case 'CheckBox':\n return 'FORMCHECKBOX';\n case 'DropDown':\n return 'FORMDROPDOWN';\n }\n };\n /**\n * @param field\n * @param reset\n * @param value\n * @param field\n * @param reset\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.toggleCheckBoxFormField = function (field, reset, value) {\n var formFieldData = field.formFieldData;\n if (formFieldData instanceof CheckBoxFormField && formFieldData.enabled) {\n this.initHistory('UpdateFormField');\n if (this.editorHistory) {\n var currentValue = void 0;\n if (formFieldData instanceof CheckBoxFormField) {\n currentValue = formFieldData.checked;\n }\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(field, currentValue);\n this.editorHistory.updateHistory();\n }\n if (reset) {\n formFieldData.checked = value;\n }\n else {\n formFieldData.checked = !formFieldData.checked;\n }\n var separator = field.fieldSeparator;\n var checkBoxTextElement = separator.nextNode;\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n this.owner.documentHelper.layout.reLayoutParagraph(field.line.paragraph, 0, 0);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @param field\n * @param value\n * @param reset\n * @private\n * @returns {void}\n */\n Editor.prototype.updateFormField = function (field, value, reset) {\n var formFieldData = field.formFieldData;\n if (formFieldData) {\n this.updateFormFieldInternal(field, formFieldData, value, reset);\n }\n };\n Editor.prototype.updateFormFieldInternal = function (field, formFieldData, value, reset) {\n if (formFieldData instanceof TextFormField) {\n if (value === '') {\n if (reset) {\n value = this.getDefaultText(formFieldData);\n }\n else {\n value = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n var formattedText = value;\n var type = formFieldData.type;\n if (type === 'Text' && formFieldData.format !== '') {\n formattedText = HelperMethods.formatText(formFieldData.format, value);\n }\n this.updateFormFieldResult(field, formattedText);\n }\n else if (formFieldData instanceof DropDownFormField) {\n var text = formFieldData.dropdownItems[value];\n formFieldData.selectedIndex = value;\n this.updateFormFieldResult(field, text);\n }\n var endoffset = field.fieldEnd.line.getOffset(field.fieldEnd, 1);\n var startPos = new TextPosition(this.owner);\n startPos.setPositionParagraph(field.fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPos, startPos);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.updateFormFieldResult = function (field, value) {\n //When protection is enabled with type Form Filling below method selects the field result alone.\n this.selection.selectFieldInternal(field, false, true);\n this.insertText(value);\n };\n Editor.prototype.checkBookmarkAvailability = function (name, action) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n if (bookmarkCol.containsKey(name)) {\n return false;\n }\n }\n return true;\n };\n Editor.prototype.getBookmarkName = function (type, action, count) {\n var name;\n var available = false;\n while (available === false) {\n name = type + count;\n available = this.checkBookmarkAvailability(name, action);\n count = count + 1;\n }\n return name;\n };\n /**\n * @param formField\n * @private\n * @returns {void}\n */\n Editor.prototype.applyFormTextFormat = function (formField) {\n if (!isNullOrUndefined(formField)) {\n var text = this.getFieldResultText(formField);\n var currentValue = text;\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n if (formField.fieldSeparator != undefined) {\n this.applyTextFormatInternal(formField, text);\n }\n this.initHistory('FormTextFormat');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(formField, currentValue);\n this.editorHistory.updateHistory();\n }\n }\n };\n // Inserts 5 space on Form Fill inline mode if length is 0\n Editor.prototype.insertSpaceInFormField = function () {\n if (this.documentHelper.isInlineFormFillProtectedMode && this.selection.isInlineFormFillMode()) {\n var resultText = this.getFieldResultText();\n if (resultText.length === 0 || resultText === '\\r') {\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n }\n }\n };\n /**\n * @param formField\n * @private\n * @returns {string}\n */\n Editor.prototype.getFieldResultText = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.selection.getCurrentFormField();\n }\n //Stores the current selection index, to reset after getting the result text\n var previousStartIndex = this.selection.startOffset;\n var previousEndIndex = this.selection.endOffset;\n this.selection.isModifyingSelectionInternally = true;\n this.selection.selectFieldInternal(formField, false, true);\n var resultText = this.selection.getText(false);\n //Resets the selection back to the original index\n this.selection.select(previousStartIndex, previousEndIndex);\n this.selection.isModifyingSelectionInternally = false;\n return resultText;\n };\n /**\n * @param field\n * @param text\n * @private\n * @returns {void}\n */\n Editor.prototype.applyTextFormatInternal = function (field, text) {\n var textElement = field.fieldSeparator.nextElement;\n var start = 0;\n text = text.replace(/\\r/g, '');\n do {\n if (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n textElement.text = text.slice(start, start + textElement.text.length);\n start = start + textElement.length;\n }\n if (isNullOrUndefined(textElement.nextElement)) {\n if (!isNullOrUndefined(textElement.line.nextLine)) {\n textElement = textElement.line.nextLine.children[0];\n }\n else {\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n var nextBlock = textElement.paragraph.nextRenderedWidget;\n if (isNullOrUndefined(nextBlock)) {\n break;\n }\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstParagraphBlock(nextBlock);\n }\n while (nextBlock.isEmpty()) {\n nextBlock = nextBlock.nextRenderedWidget;\n }\n textElement = nextBlock.childWidgets[0].children[0];\n }\n }\n else {\n textElement = textElement.nextElement;\n }\n } while (!(textElement instanceof FieldElementBox && textElement.fieldType === 1 &&\n textElement.fieldBegin.formFieldData instanceof TextFormField));\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n this.selection.isFormatUpdated = true;\n this.reLayout(this.selection, false);\n this.selection.isFormatUpdated = false;\n };\n Editor.prototype.constructCommentInitial = function (authorName) {\n var splittedName = authorName.split(' ');\n var initials = '';\n for (var i = 0; i < splittedName.length; i++) {\n if (splittedName[i].length > 0 && splittedName[i] !== '') {\n initials += splittedName[i][0];\n }\n }\n return initials;\n };\n /**\n * Insert Footnote at current selection\n *\n * @returns {void}\n */\n Editor.prototype.insertFootnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.isFootNoteInsert = true;\n this.isFootNote = true;\n var footnote = new FootnoteElementBox();\n footnote.characterFormat.baselineAlignment = 'Superscript';\n footnote.footnoteType = 'Footnote';\n footnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.baselineAlignment = 'Superscript';\n text.line = lineWidget;\n text.text = '?';\n lineWidget.children.push(text);\n var text1 = new TextElementBox();\n text1.text = ' ';\n text1.line = lineWidget;\n lineWidget.children.push(text1);\n paragraph.childWidgets.push(lineWidget);\n footnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(footnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var footPara;\n if (footnote.paragraph.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n if ((footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnote) {\n footPara = footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], text1.line.getOffset(text1, footnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n // this.selection.fireSelectionChanged(true);\n this.updateFootNoteIndex();\n this.reLayout(this.selection, false);\n this.separator('footnote');\n this.continuationSeparator('footnote');\n this.isFootNote = false;\n };\n Editor.prototype.updateFootnoteCollection = function (footnote) {\n if (this.documentHelper.footnoteCollection.indexOf(footnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.footnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(footnote).startPosition;\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.footnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.footnoteCollection.splice(i, 0, footnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.footnoteCollection.push(footnote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n // Footnote implementation ends\n /**\n * Insert Endnote at current selection\n *\n * @returns {void}\n */\n Editor.prototype.insertEndnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.documentHelper.layout.isEndnoteContentChanged = true;\n var endnote = new FootnoteElementBox();\n endnote.characterFormat.baselineAlignment = 'Superscript';\n endnote.footnoteType = 'Endnote';\n endnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var footText = new TextElementBox();\n footText.characterFormat.baselineAlignment = 'Superscript';\n footText.line = lineWidget;\n footText.text = '?';\n lineWidget.children.push(footText);\n var followText = new TextElementBox();\n followText.text = ' ';\n followText.line = lineWidget;\n lineWidget.children.push(followText);\n paragraph.childWidgets.push(lineWidget);\n endnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(endnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var lastpage = this.documentHelper.pages.length;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n var footPara;\n if (bodyWidget.page.endnoteWidget) {\n for (var i = 0; i < bodyWidget.page.endnoteWidget.bodyWidgets.length; i++) {\n if ((bodyWidget.page.endnoteWidget.bodyWidgets[i]).footNoteReference === endnote) {\n footPara = bodyWidget.page.endnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], footText.line.getOffset(followText, endnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n this.updateEndNoteIndex();\n this.reLayout(this.selection, false);\n this.separator('endnote');\n this.continuationSeparator('endnote');\n this.documentHelper.layout.isEndnoteContentChanged = false;\n };\n Editor.prototype.updateEndnoteCollection = function (endnote) {\n if (this.documentHelper.endnoteCollection.indexOf(endnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(endnote).startPosition;\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.endnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.endnoteCollection.splice(i, 0, endnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.endnoteCollection.push(endnote);\n }\n var lastpage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var positionchanged = false;\n // this.documentHelper.layout.isFootnoteContentChanged = true;\n var foot = void 0;\n var endnoteWidget = void 0;\n var footIndex = this.documentHelper.endnoteCollection.indexOf(endnote);\n var insertIndex = 1;\n var height = 0;\n var isCreated = void 0;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n if (bodyWidget.page.endnoteWidget) {\n for (var j = 0; j < bodyWidget.page.endnoteWidget.bodyWidgets.length; j++) {\n var currentIndex = this.documentHelper.endnoteCollection.indexOf((bodyWidget.page.endnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n // endnote.isLayout = true;\n foot = endnote; //this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endnoteWidget = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endnoteWidget = new FootNoteWidget();\n endnoteWidget.footNoteType = 'Endnote';\n endnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n //endnoteWidget.childWidgets.push(newParagraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + 18);\n }\n var body = foot.bodyWidget;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n //body.childWidgets.push(block);\n if (this.documentHelper.layout.isLayoutWhole) {\n block.containerWidget = undefined;\n }\n else {\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = endnoteWidget.sectionFormat;\n block.containerWidget.containerWidget = endnoteWidget;\n }\n // endnoteWidget.bodyWidgets[j].childWidgets.push(block);\n if (positionchanged) {\n endnoteWidget.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n endnoteWidget.bodyWidgets.push(body);\n }\n }\n insertIndex++;\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endnoteWidget;\n }\n // endNote.containerWidget = bodyWidget;\n endnoteWidget.height += height;\n // }\n // this.documentHelper.layout.layoutfootNote(endnoteWidget);\n //this.layoutfootNote(endNote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n Editor.prototype.updateEndNoteIndex = function () {\n var endNoteCollec = this.documentHelper.endnoteCollection;\n for (var i = 0; i < endNoteCollec.length; i++) {\n if (!isNullOrUndefined(endNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0])) {\n endNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0].text = endNoteCollec[i].text;\n }\n }\n };\n Editor.prototype.separator = function (type) {\n //let block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(3);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.separator.length < 1) {\n this.documentHelper.footnotes.separator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.separator.length < 1) {\n this.documentHelper.endnotes.separator.push(paragraph);\n }\n };\n Editor.prototype.continuationSeparator = function (type) {\n //var block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(4);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.continuationSeparator.length < 1) {\n this.documentHelper.footnotes.continuationSeparator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.continuationSeparator.length < 1) {\n this.documentHelper.endnotes.continuationSeparator.push(paragraph);\n }\n };\n Editor.prototype.updateFootNoteIndex = function () {\n var footNoteCollec = this.documentHelper.footnoteCollection;\n for (var i = 0; i < footNoteCollec.length; i++) {\n footNoteCollec[i].text = (i + 1).toString();\n if (!isNullOrUndefined(footNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0])) {\n footNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0].text = (i + 1).toString();\n }\n }\n };\n return Editor;\n}());\nexport { Editor };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer, WebLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageInfo } from '../selection/selection-helper';\nimport { ImageElementBox, ShapeElementBox } from '../viewer/page';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n *\n * @param {DocumentEditor} node - Specfies the document editor\n * @param {DocumentHelper} documentHelper - Specified the document helper\n * @private\n */\n function ImageResizer(node, documentHelper) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.documentHelper = documentHelper;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.documentHelper.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n *\n * @private\n * @returns {ImageElementBox | ShapeElementBox} - Returns the image element.\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @param {ImageElementBox | ShapeElementBox} value - Specifies the current element box.\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n *\n * @private\n * @returns {number} - Returns resize mark size\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n * @param {number} value - Specifies resize mark size.\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"isShapeResize\", {\n /**\n * @returns {boolean} - Returns the shape size.\n */\n get: function () {\n if (this.currentImageElementBox instanceof ShapeElementBox) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n *\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = width - x - this.documentHelper.scrollbarWidth + 'px';\n }\n else {\n this.imageResizerDivElement.style.width = width + 'px';\n }\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.documentHelper.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n *\n * @private\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @returns {void}\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.documentHelper.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top;\n var left;\n if (elementBox instanceof ImageElementBox && elementBox.textWrappingStyle !== 'Inline') {\n top = elementBox.y;\n left = elementBox.x;\n }\n else {\n top = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n }\n var page = this.documentHelper.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n //let y: number = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = page.boundingRectangle.width - page.boundingRectangle.x - left - this.documentHelper.scrollbarWidth + 'px';\n }\n this.imageResizerDivElement.style.display = 'block';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n resizeDiv.style.width = (page.boundingRectangle.width - this.documentHelper.scrollbarWidth - page.boundingRectangle.x - left) + 'px';\n }\n else {\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n }\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.documentHelper.getPageWidth(page);\n //const pagelayout: PageLayoutViewer = this.viewer as PageLayoutViewer;\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.documentHelper.zoomFactor / 2;\n }\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.documentHelper.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.documentHelper.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.documentHelper.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.documentHelper.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n height = this.documentHelper.render.getScaledValue(elementBox.height);\n width = this.documentHelper.render.getScaledValue(elementBox.width);\n if (elementBox instanceof ImageElementBox) {\n left = this.documentHelper.render.getScaledValue(left);\n top = this.documentHelper.render.getScaledValue(top);\n }\n else {\n left = elementBox.x * this.documentHelper.zoomFactor;\n top = elementBox.y * this.documentHelper.zoomFactor;\n }\n this.setImageResizerPosition(left, top, width, height, this);\n if (this.owner.selection.isInShape) {\n this.resizeContainerDiv.style.borderStyle = 'dashed';\n }\n else {\n this.resizeContainerDiv.style.borderStyle = 'solid';\n }\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n *\n * @private\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @returns {void}\n */\n /* eslint-disable */\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.documentHelper.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.documentHelper.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.documentHelper.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.documentHelper.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.documentHelper.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.documentHelper.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.documentHelper.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.documentHelper.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.documentHelper.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.documentHelper.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.documentHelper.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.documentHelper.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.documentHelper.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.documentHelper.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.documentHelper.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.documentHelper.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n *\n * @private\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.documentHelper.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n imageResizer.rightMiddleRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.documentHelper.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @returns {void}\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.documentHelper.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n *\n * @private\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @returns {void}\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n *\n * @private\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.documentHelper.zoomFactor;\n prevY = prevY / this.documentHelper.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n var id = this.selectedResizeElement.id.split('_');\n var currentElementId = id[id.length - 1];\n switch (currentElementId) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (currentElementId === 'BottomRightRectParent'\n || currentElementId === 'TopRightRectParent'\n || currentElementId === 'BottomLeftRectParent'\n || currentElementId === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n *\n * @private\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n *\n * @private\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n *\n * @private\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.documentHelper.render.getScaledValue(touchPoint.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n *\n * @private\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point info.\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.documentHelper.render.getScaledValue(touchPoints.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.documentHelper.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.documentHelper.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selection);\n this.documentHelper.layout.reLayoutParagraph(this.currentImageElementBox.line.paragraph, 0, 0);\n this.updateHistoryForImageResizer();\n this.owner.editorModule.reLayout(this.owner.selection, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @returns {void}\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageInfo(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.owner.editorHistory.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox instanceof ImageElementBox ? this.currentImageElementBox : this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1;\n var left = void 0;\n var topValue = void 0;\n var leftValue = void 0;\n if (this.currentImageElementBox instanceof ImageElementBox) {\n top_1 = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n topValue = top_1 * this.documentHelper.zoomFactor;\n leftValue = left * this.documentHelper.zoomFactor;\n }\n else {\n leftValue = elementBox.x * this.documentHelper.zoomFactor;\n topValue = elementBox.y * this.documentHelper.zoomFactor;\n }\n var height = this.documentHelper.render.getScaledValue(elementBox.height, 2);\n var width = this.documentHelper.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n get: function () {\n return this.widthIn;\n },\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","import { BodyWidget, TableWidget, TableRowWidget, ElementBox, Page } from '../viewer/page';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from '../format/section-format';\nimport { XmlHttpRequestHandler, actionCompleteEvent } from '../../base/index';\nimport { HistoryInfo } from '../editor-history/index';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { WCharacterFormat, WRowFormat } from '../format/index';\n/**\n * Collaborative editing module\n */\nvar CollaborativeEditing = /** @class */ (function () {\n function CollaborativeEditing(editor) {\n this.version = 0;\n this.owner = editor;\n }\n Object.defineProperty(CollaborativeEditing.prototype, \"documentHelper\", {\n //private lockEnd: string = '';\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollaborativeEditing.prototype, \"selection\", {\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollaborativeEditing.prototype, \"collaborativeEditingSettings\", {\n get: function () {\n return this.owner.documentEditorSettings.collaborativeEditingSettings;\n },\n enumerable: true,\n configurable: true\n });\n CollaborativeEditing.prototype.getModuleName = function () {\n return 'CollaborativeEditing';\n };\n /**\n * To update the action which need to perform.\n *\n * @param {CollaborativeEditingEventArgs} data - Specifies the data.\n * @returns {void}\n */\n CollaborativeEditing.prototype.updateAction = function (data) {\n if (!Array.isArray(data)) {\n data = [data];\n }\n for (var i = 0; i < data.length; i++) {\n var documentData = data[i];\n switch (documentData.action) {\n case 'LockContent':\n // Transform position\n this.transFormLockRegion(documentData);\n this.lockRegion(documentData.selectionInfo.start, documentData.selectionInfo.end, documentData.author);\n break;\n case 'SaveContent':\n this.version = documentData.version;\n this.updateRegion(documentData.author, documentData.data);\n break;\n case 'UnlockContent':\n this.version = documentData.version;\n this.updateRegion(documentData.author, documentData.data);\n this.removeEditRange(documentData.author);\n break;\n }\n }\n };\n CollaborativeEditing.prototype.transFormLockRegion = function (data) {\n var previousLockInfo = data.selectionInfo.previousLockInfo;\n if (!isNullOrUndefined(previousLockInfo)) {\n var author = previousLockInfo.author;\n var sectionDiff = 0;\n var blockDiff = 0;\n if (this.documentHelper.editRanges.containsKey(author)) {\n var editRange = this.documentHelper.editRanges.get(author);\n if (editRange.length > 0) {\n var position = this.selection.getPosition(editRange[0]);\n var endOffset = this.selection.getHierarchicalIndexByPosition(position.endPosition).split(';');\n var previousOffset = previousLockInfo.end.split(';');\n sectionDiff = parseInt(endOffset[0], 10) - parseInt(previousOffset[0], 10);\n blockDiff = parseInt(endOffset[1], 10) - parseInt(previousOffset[1], 10);\n // Same section\n if (data.selectionInfo.start.split(';')[0] === previousLockInfo.end.split(';')[0]) {\n data.selectionInfo.start = this.tranformPosition(data.selectionInfo.start, sectionDiff, blockDiff);\n data.selectionInfo.end = this.tranformPosition(data.selectionInfo.end, sectionDiff, blockDiff);\n }\n else {\n data.selectionInfo.start = this.tranformPosition(data.selectionInfo.start, sectionDiff, 0);\n data.selectionInfo.end = this.tranformPosition(data.selectionInfo.end, sectionDiff, 0);\n }\n }\n }\n }\n };\n /**\n * Lock selected region from editing by other users.\n *\n * @param {string} user - Specifies the user.\n * @returns {void}\n */\n CollaborativeEditing.prototype.lockContent = function (user) {\n var _this = this;\n if (this.canLock()) {\n var start = this.owner.selection.start;\n var end = this.owner.selection.end;\n if (!this.owner.selection.isForward) {\n start = this.owner.selection.end;\n end = this.owner.selection.start;\n }\n if (start.paragraph.isInsideTable) {\n var table = this.owner.documentHelper.layout.getParentTable(start.paragraph);\n var firstPara = this.owner.selection.getFirstParagraphBlock(table);\n start.setPosition(firstPara.childWidgets[0], true);\n }\n else {\n start.paragraphStartInternal(this.owner.selection, false);\n }\n if (end.paragraph.isInsideTable) {\n var table = this.owner.documentHelper.layout.getParentTable(end.paragraph);\n var lastPara = this.owner.selection.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n end.setPositionParagraph(lastPara.lastChild, offset);\n }\n else {\n end.moveToParagraphEndInternal(this.owner.selection, false);\n }\n var startOffset = this.owner.selection.getHierarchicalIndexByPosition(start);\n var endOffset = this.owner.selection.getHierarchicalIndexByPosition(end);\n var selectionInfo_1 = {\n start: startOffset,\n end: endOffset,\n roomName: this.owner.documentEditorSettings.collaborativeEditingSettings.roomName,\n author: isNullOrUndefined(user) ? this.owner.currentUser : user,\n version: this.version\n };\n var startInfo_1 = this.selection.getParagraphInfo(start);\n var endInfo_1 = this.selection.getParagraphInfo(end);\n this.owner.selection.select(startOffset, endOffset);\n var ajax = new XmlHttpRequestHandler();\n ajax.url = this.owner.serviceUrl + this.owner.serverActionSettings.canLock;\n ajax.contentType = 'application/json;charset=UTF-8';\n ajax.onSuccess = function (result) {\n _this.successHandler(result, selectionInfo_1, startInfo_1, endInfo_1);\n };\n ajax.onFailure = this.failureHandler.bind(this);\n ajax.onError = this.failureHandler.bind(this);\n ajax.customHeaders = this.owner.headers;\n ajax.send(selectionInfo_1);\n }\n };\n /**\n * @private\n * @returns {boolean} - Returns can lock.\n */\n CollaborativeEditing.prototype.canLock = function () {\n var editRanges = this.documentHelper.editRanges;\n if (editRanges.containsKey(this.owner.currentUser)) {\n return false;\n }\n var userNames = editRanges.keys;\n for (var i = 0; i < userNames.length; i++) {\n var range = editRanges.get(userNames[i]);\n if (!isNullOrUndefined(range) && range.length > 0) {\n if (this.isSelectionInEditableRange(range[0])) {\n return false;\n }\n }\n }\n return true;\n };\n CollaborativeEditing.prototype.getPreviousLockedRegion = function () {\n var editRanges = this.documentHelper.editRanges;\n if (editRanges.containsKey(this.owner.currentUser)) {\n return undefined;\n }\n var previous;\n var userNames = editRanges.keys;\n for (var i = 0; i < userNames.length; i++) {\n var range = editRanges.get(userNames[i])[0];\n var startPosition = this.selection.getPosition(range).startPosition;\n if (startPosition.isExistBefore(this.selection.start)) {\n if (isNullOrUndefined(previous)) {\n previous = range;\n }\n else if (startPosition.isExistAfter(this.selection.getPosition(previous).startPosition)) {\n previous = range;\n }\n }\n }\n return previous;\n };\n /**\n * @private\n * @param {string} user - Specifies the user.\n * @returns {void}\n */\n CollaborativeEditing.prototype.unlockContent = function (user) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n if (this.saveTimer) {\n clearTimeout(this.saveTimer);\n }\n var sfdtContent = JSON.stringify(this.serializeEditableRegion(user));\n var saveObject = {\n action: 'UnlockContent',\n author: user,\n version: this.version,\n data: sfdtContent,\n selectionInfo: {\n start: '',\n end: '',\n roomName: this.collaborativeEditingSettings.roomName,\n author: this.owner.currentUser,\n version: this.version\n },\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.removeEditRange(user);\n this.owner.editorHistory.clearHistory();\n this.owner.fireContentChange();\n // Todo: selection tranformation\n this.owner.trigger(actionCompleteEvent, saveObject);\n }\n };\n CollaborativeEditing.prototype.removeEditRange = function (user) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n this.updateLockRegion(user, false);\n this.owner.editor.removeUserRestrictionsInternal(this.documentHelper.editRanges.get(user)[0]);\n this.documentHelper.clearContent();\n this.selection.updateEditRangeCollection();\n this.documentHelper.owner.viewer.updateScrollBars();\n }\n };\n /**\n * Save locked content to other clients.\n *\n * @private\n * @returns {void}\n */\n CollaborativeEditing.prototype.saveContent = function () {\n var _this = this;\n if (this.saveTimer) {\n clearTimeout(this.saveTimer);\n }\n var timeOut = this.collaborativeEditingSettings.saveTimeout;\n if (isNullOrUndefined(timeOut)) {\n timeOut = 3000;\n }\n this.saveTimer = setTimeout(function () {\n _this.saveContentInternal();\n }, timeOut);\n };\n CollaborativeEditing.prototype.saveContentInternal = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRangeStart = this.documentHelper.editRanges.get(this.owner.currentUser)[0];\n var position = this.selection.getPosition(editRangeStart);\n var saveObject = {\n action: 'SaveContent',\n author: this.owner.currentUser,\n version: this.version,\n data: JSON.stringify(this.serializeEditableRegion(this.owner.currentUser)),\n selectionInfo: {\n 'start': this.selection.getHierarchicalIndexByPosition(position.startPosition),\n 'end': this.selection.getHierarchicalIndexByPosition(position.endPosition),\n roomName: this.collaborativeEditingSettings.roomName,\n author: this.owner.currentUser,\n version: this.version\n },\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.owner.trigger(actionCompleteEvent, saveObject);\n }\n };\n CollaborativeEditing.prototype.serializeEditableRegion = function (user) {\n var startElement = this.documentHelper.editRanges.get(user)[0];\n var endElement = startElement.editRangeEnd;\n var start = new TextPosition(this.owner);\n start.setPosition(startElement.line, true);\n var end = new TextPosition(this.owner);\n end.setPosition(endElement.line, false);\n this.owner.sfdtExportModule.isPartialExport = true;\n /* eslint-disable-next-line max-len */\n var sfdtContent = this.owner.sfdtExportModule.write(start.currentWidget, start.offset, end.currentWidget, end.offset, false);\n this.owner.sfdtExportModule.isPartialExport = false;\n return sfdtContent;\n };\n /* eslint-disable-next-line max-len */\n CollaborativeEditing.prototype.successHandler = function (result, selectionInfo, startInfo, endInfo) {\n var canLock = JSON.parse(result.data).canLock;\n if (canLock) {\n selectionInfo.start = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n selectionInfo.end = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n var previousEditRange = this.getPreviousLockedRegion();\n if (previousEditRange) {\n var position = this.selection.getPosition(previousEditRange);\n selectionInfo.previousLockInfo = {\n start: this.selection.getHierarchicalIndexByPosition(position.startPosition),\n end: this.selection.getHierarchicalIndexByPosition(position.endPosition),\n author: previousEditRange.user,\n roomName: '',\n version: 0\n };\n }\n var lockObject = {\n action: 'LockContent',\n selectionInfo: selectionInfo,\n author: this.owner.currentUser,\n version: this.version,\n data: '',\n roomName: this.collaborativeEditingSettings.roomName\n };\n this.owner.trigger(actionCompleteEvent, lockObject);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n content: localizeValue.getConstant('Already locked'),\n closeOnEscape: true, showCloseIcon: true, position: { X: 'Center', Y: 'Center' }\n });\n }\n };\n CollaborativeEditing.prototype.failureHandler = function () {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n content: localizeValue.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true, position: { X: 'Center', Y: 'Center' }\n });\n };\n /**\n * Locker specified region for specified user.\n *\n * @private\n * @param {string} start - Specified the selection start.\n * @param {string} end - Specifies the selection end.\n * @param {string} user - Specifies the user\n * @returns {void}\n */\n CollaborativeEditing.prototype.lockRegion = function (start, end, user) {\n var startPosition = this.selection.getTextPosBasedOnLogicalIndex(start);\n var endPosition = this.selection.getTextPosBasedOnLogicalIndex(end);\n this.lockRegionInternal(startPosition, endPosition, user);\n };\n CollaborativeEditing.prototype.lockRegionInternal = function (start, end, user) {\n var editStart = this.owner.editor.addEditElement(user);\n var editEnd = editStart.editRangeEnd;\n this.insertElements(start, end, [editEnd], [editStart]);\n this.updateLockInfo(editStart.paragraph, editEnd.paragraph, user, true);\n this.owner.viewer.updateScrollBars();\n };\n CollaborativeEditing.prototype.insertElements = function (start, end, endElements, startElements) {\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(start, startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(end, endElements);\n }\n };\n CollaborativeEditing.prototype.insertElementsInternal = function (position, elements) {\n var indexInInline = 0;\n if (position.paragraph.isEmpty()) {\n var paragraph = position.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n else {\n var inlineObj = position.currentWidget.getInline(position.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n }\n };\n CollaborativeEditing.prototype.insertElementInternal = function (element, newElement, index) {\n var line = element.line;\n var paragraph = line.paragraph;\n var insertIndex = element.indexInOwner;\n var isBidi = paragraph.paragraphFormat.bidi && element.isRightToLeft;\n if (index === element.length) {\n // Add new Element in current\n if (!isBidi) {\n insertIndex++;\n }\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (isNullOrUndefined(element.previousNode)) {\n line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n line.children.splice(insertIndex, 0, newElement);\n }\n }\n newElement.line = element.line;\n };\n //#region Save content\n CollaborativeEditing.prototype.setEditableRegion = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRanges = this.documentHelper.editRanges.get(this.owner.currentUser);\n var editRangeStart = editRanges[0];\n var firstBlock = this.getParentBlock(editRangeStart.paragraph);\n this.lockStart = this.owner.selection.getHierarchicalIndex(firstBlock, '0').split(';');\n }\n };\n CollaborativeEditing.prototype.isSelectionInEditableRange = function (editRange) {\n var _a;\n if (!isNullOrUndefined(this.owner.selection)) {\n var start = this.owner.selection.start;\n var end = this.owner.selection.end;\n if (!this.owner.selection.isForward) {\n _a = [end, start], start = _a[0], end = _a[1];\n }\n var position = this.owner.selection.getPosition(editRange);\n if ((start.isExistAfter(position.startPosition) || start.isAtSamePosition(position.startPosition))\n && (end.isExistBefore(position.endPosition) || end.isAtSamePosition(position.endPosition)) ||\n ((position.startPosition.isExistAfter(start) || position.startPosition.isAtSamePosition(start))\n && (position.endPosition.isExistBefore(end) || position.endPosition.isAtSamePosition(end))) ||\n (position.startPosition.isExistAfter(start) && position.startPosition.isExistBefore(end)\n && (end.isExistAfter(position.endPosition) || end.isExistBefore(position.endPosition))) ||\n (position.endPosition.isExistBefore(end) && position.endPosition.isExistAfter(start)\n && (start.isExistBefore(position.startPosition) || start.isExistAfter(position.startPosition)))) {\n return true;\n }\n }\n return false;\n };\n /**\n * Updated modified content from remote user\n *\n * @returns {void}\n */\n /* eslint-disable */\n CollaborativeEditing.prototype.updateRegion = function (user, content) {\n if (this.documentHelper.editRanges.containsKey(user)) {\n var editRanges = this.documentHelper.editRanges.get(user);\n if (editRanges.length === 1) {\n // Remove exisiting range from collection.\n // New range will get inserted while updating the content.\n this.documentHelper.editRanges.remove(user);\n editRanges[0].removeEditRangeMark();\n }\n // Preserve hierachical position for history position tranformation\n this.setEditableRegion();\n var startElement = editRanges[0];\n var endElement = startElement.editRangeEnd;\n var firstBlock = this.getParentBlock(startElement.paragraph);\n var lastBlock = this.getParentBlock(endElement.paragraph);\n var isInEditRange = this.isSelectionInEditableRange(startElement);\n var startParagrahInfo = void 0;\n var endParagrahInfo = void 0;\n this.owner.editor.isRemoveRevision = true;\n if (!isInEditRange) {\n startParagrahInfo = this.owner.selection.getParagraphInfo(this.owner.selection.start);\n endParagrahInfo = this.owner.selection.getParagraphInfo(this.owner.selection.end);\n }\n var sections = [];\n while (lastBlock !== firstBlock) {\n var currentBlock = lastBlock.combineWidget(this.owner.viewer);\n lastBlock = currentBlock.previousRenderedWidget;\n if (lastBlock.bodyWidget.index !== currentBlock.bodyWidget.index) {\n sections.push(currentBlock.bodyWidget);\n }\n var removedBlock = currentBlock.containerWidget.childWidgets[currentBlock.indexInOwner];\n this.removeDuplicateCollection(removedBlock);\n currentBlock.containerWidget.removeChild(currentBlock.indexInOwner);\n }\n if (!isNullOrUndefined(firstBlock)) {\n var lastBockIndex = firstBlock.index;\n var containerWidget = firstBlock.containerWidget;\n sections.push(containerWidget);\n var lastInsertIndex = firstBlock.containerWidget.childWidgets.indexOf(firstBlock);\n var removedBlock = containerWidget.childWidgets[lastInsertIndex];\n containerWidget.removeChild(lastInsertIndex);\n this.removeDuplicateCollection(removedBlock);\n var comments = [];\n var blocks = [];\n var revision = [];\n this.owner.editor.isPasteListUpdated = false;\n this.owner.editor.getBlocks(JSON.parse(content), false, blocks, comments, revision);\n if (sections.length !== blocks.length) {\n if (sections.length === 1) {\n var bodyWidget = sections[0];\n sections.unshift(this.owner.editor.splitBodyWidget(bodyWidget, blocks[blocks.length - 2].sectionFormat, bodyWidget.childWidgets[lastInsertIndex - 1]));\n }\n if (sections.length < blocks.length) {\n for (var m = 1; m < blocks.length - 1; m++) {\n var page = new Page(this.owner.documentHelper);\n var bodyWidget = new BodyWidget();\n page.bodyWidgets.push(bodyWidget);\n bodyWidget.page = page;\n sections.splice(m, 0, bodyWidget);\n bodyWidget.index = sections[m - 1].index;\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.sectionFormat.copyFormat(blocks[m].sectionFormat);\n var pageIndex = sections[m - 1].page.index;\n this.documentHelper.insertPage(pageIndex, page);\n //Todo: update section index\n this.owner.editor.updateSectionIndex(sections[m - 1].sectionFormat, sections[m - 1], true);\n if (sections.length === blocks.length) {\n break;\n }\n }\n }\n }\n for (var z = 0; z < sections.length; z++) {\n var containerWidget_1 = sections[z];\n var blockIndex = 0;\n var insertIndex = 0;\n if (z === sections.length - 1) {\n blockIndex = lastBockIndex;\n insertIndex = lastInsertIndex;\n }\n var block = blocks[z].childWidgets;\n for (var i = 0; i < block.length; i++) {\n block[i].containerWidget = containerWidget_1;\n block[i].index = blockIndex;\n containerWidget_1.childWidgets.splice(insertIndex, 0, block[i]);\n insertIndex++;\n blockIndex++;\n }\n lastBlock = block[block.length - 1];\n if (lastBlock.nextRenderedWidget && lastBlock.nextRenderedWidget.index !== lastBlock.index) {\n //Todo: update block index properly\n this.updateNextBlocksIndex(lastBlock, true);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block[0].index, containerWidget_1, undefined, false);\n }\n for (var k = 0; k < comments.length; k++) {\n var comment = comments[k];\n this.owner.editor.addCommentWidget(comment, false, this.owner.showComments, false);\n if (comment.replyComments.length > 0) {\n for (var z = 0; z < comment.replyComments.length; z++) {\n this.owner.commentReviewPane.addReply(comment.replyComments[z], false, false);\n }\n }\n }\n if (revision.length > 0) {\n this.updateRevisionCollection(revision);\n }\n this.owner.trackChangesPane.updateTrackChanges();\n var editRanges_1 = this.documentHelper.editRanges.get(user);\n // update content\n if (!isInEditRange) {\n this.tranformSelection(startParagrahInfo, endParagrahInfo);\n }\n else {\n if (editRanges_1.length > 0) {\n var positionInfo = this.selection.getPosition(editRanges_1[0]);\n // We can't able to predic the modified content inside editable region\n // So, it not possible to transform the position relativly.\n // So, move the selection to editable region end.\n this.selection.selectPosition(positionInfo.endPosition, positionInfo.endPosition);\n }\n }\n this.tranformHistoryPosition();\n this.selection.updateEditRangeCollection();\n this.updateLockRegion(user);\n this.documentHelper.removeEmptyPages();\n this.owner.viewer.updateScrollBars();\n this.owner.editor.isRemoveRevision = false;\n }\n }\n };\n CollaborativeEditing.prototype.updateRevisionCollection = function (revision) {\n var insertIndex = 0;\n var revisionStart = this.getRevisionTextPosition(revision[0]);\n var isInsert = false;\n if (this.owner.revisionsInternal.changes.length > 0 &&\n !isNullOrUndefined(revisionStart)) {\n for (var i = 0; i < this.owner.revisionsInternal.changes.length; i++) {\n var textPosition = this.getRevisionTextPosition(this.owner.revisionsInternal.changes[i]);\n if (textPosition.isExistAfter(revisionStart)) {\n insertIndex = i;\n isInsert = true;\n break;\n }\n }\n }\n for (var j = 0; j < revision.length; j++) {\n if (isInsert) {\n this.owner.revisionsInternal.changes.splice(insertIndex, 0, revision[j]);\n insertIndex++;\n }\n else {\n this.owner.revisionsInternal.changes.push(revision[j]);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n CollaborativeEditing.prototype.getRevisionTextPosition = function (revision) {\n if (revision.range.length > 0) {\n var range = revision.range[0];\n if (range instanceof ElementBox) {\n return this.selection.getElementPosition(range).startPosition;\n }\n else if (range instanceof WRowFormat) {\n var block = range.ownerBase.firstChild.firstChild;\n if (block.bodyWidget) {\n return this.selection.getTextPosBasedOnLogicalIndex(this.selection.getHierarchicalIndex(block, '0'));\n }\n }\n else if (range instanceof WCharacterFormat) {\n var paraWidget = range.ownerBase;\n if (paraWidget.lastChild.paragraph.bodyWidget) {\n var offset = paraWidget.getLength();\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(paraWidget.lastChild, offset);\n return startPosition;\n }\n }\n }\n return undefined;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n CollaborativeEditing.prototype.tranformSelection = function (startParagrahInfo, endParagraphInfo) {\n this.documentHelper.skipScrollToPosition = true;\n var startIndex = this.selection.getHierarchicalIndex(startParagrahInfo.paragraph, startParagrahInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n this.selection.select(startIndex, endIndex);\n };\n CollaborativeEditing.prototype.tranformHistoryPosition = function () {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n var editRanges = this.documentHelper.editRanges.get(this.owner.currentUser);\n var startElement = editRanges[0];\n var startBlock = this.getParentBlock(startElement.paragraph);\n var startOffset = this.selection.getHierarchicalIndex(startBlock, '0').split(';');\n if (!isNullOrUndefined(this.lockStart) && this.lockStart.length > 1) {\n var sectionDiff = parseInt(startOffset[0], 10) - parseInt(this.lockStart[0], 10);\n var blockDiff = parseInt(startOffset[1], 10) - parseInt(this.lockStart[1], 10);\n this.transformHistory(sectionDiff, blockDiff);\n }\n }\n };\n CollaborativeEditing.prototype.transformHistory = function (sectionDiff, blockDiff) {\n if (this.owner.enableEditorHistory) {\n var undoStack = this.owner.editorHistory.undoStack;\n if (!isNullOrUndefined(undoStack)) {\n for (var i = 0; i < undoStack.length; i++) {\n this.transformBaseHistoryInfo(undoStack[i], sectionDiff, blockDiff);\n }\n }\n var redoStack = this.owner.editorHistory.redoStack;\n if (!isNullOrUndefined(redoStack)) {\n for (var i = 0; i < redoStack.length; i++) {\n this.transformBaseHistoryInfo(redoStack[i], sectionDiff, blockDiff);\n }\n }\n }\n };\n CollaborativeEditing.prototype.transformBaseHistoryInfo = function (baseHistoryInfo, sectionDiff, blockDiff) {\n if (baseHistoryInfo.endPosition) {\n baseHistoryInfo.endPosition = this.tranformPosition(baseHistoryInfo.endPosition, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.insertPosition) {\n baseHistoryInfo.insertPosition = this.tranformPosition(baseHistoryInfo.insertPosition, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.selectionStart) {\n baseHistoryInfo.selectionStart = this.tranformPosition(baseHistoryInfo.selectionStart, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo.selectionEnd) {\n baseHistoryInfo.selectionEnd = this.tranformPosition(baseHistoryInfo.selectionEnd, sectionDiff, blockDiff);\n }\n if (baseHistoryInfo instanceof HistoryInfo) {\n var modifiedActions = baseHistoryInfo.modifiedActions;\n for (var j = 0; j < modifiedActions.length; j++) {\n this.transformBaseHistoryInfo(modifiedActions[j], sectionDiff, blockDiff);\n }\n }\n };\n CollaborativeEditing.prototype.tranformPosition = function (position, sectionDiff, blockDiff) {\n var index = position.split(';');\n index[0] = (parseInt(index[0], 10) + sectionDiff).toString();\n index[1] = (parseInt(index[1], 10) + blockDiff).toString();\n return index.join(';');\n };\n CollaborativeEditing.prototype.getParentBlock = function (block) {\n if (block.isInsideTable) {\n block = this.owner.documentHelper.layout.getParentTable(block);\n }\n return block.combineWidget(this.owner.viewer);\n };\n //#endregion\n //#region Remove existing items in locked region\n CollaborativeEditing.prototype.removeDuplicateCollection = function (removedBlock) {\n this.removeFieldInBlock(removedBlock, false, false);\n this.removeFieldInBlock(removedBlock, true, false);\n this.removeFieldInBlock(removedBlock, false, true);\n if (removedBlock instanceof TableWidget) {\n for (var i = 0; i < removedBlock.childWidgets.length; i++) {\n if (removedBlock.childWidgets[i] instanceof TableRowWidget) {\n var tableDelete = removedBlock.childWidgets[i];\n this.owner.editor.removeDeletedCellRevision(tableDelete);\n }\n }\n }\n else {\n this.owner.editor.removeRevisionForBlock(removedBlock, undefined, false, false);\n }\n };\n CollaborativeEditing.prototype.removeFieldInBlock = function (block, isBookmark, contentControl) {\n if (block instanceof TableWidget) {\n this.removeFieldTable(block, isBookmark, contentControl);\n }\n else {\n this.owner.editor.removeField(block, isBookmark, contentControl);\n this.removeComment(block);\n }\n };\n CollaborativeEditing.prototype.removeFieldTable = function (table, isBookmark, contentControl) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var widget = rowWidget.childWidgets[j];\n for (var i_1 = 0; i_1 < widget.childWidgets.length; i_1++) {\n this.removeFieldInBlock(widget.childWidgets[i_1], isBookmark, contentControl);\n }\n }\n }\n };\n CollaborativeEditing.prototype.removeComment = function (block) {\n if (this.documentHelper.comments.length > 0) {\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n var comment = this.documentHelper.comments[i];\n if (comment.commentStart.line.paragraph === block) {\n this.documentHelper.comments.splice(i, 1);\n this.owner.commentReviewPane.deleteComment(comment);\n i--;\n }\n }\n }\n };\n //#endregion\n CollaborativeEditing.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextBlock = block.getSplitWidgets().pop().nextRenderedWidget;\n var incrementCount = 1;\n if (nextBlock.bodyWidget.index === block.bodyWidget.index) {\n incrementCount = block.index - nextBlock.index + 1;\n }\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget) {\n var sectionIndex = block.containerWidget.index;\n var pageIndex = this.documentHelper.pages.indexOf(block.containerWidget.page);\n for (var j = pageIndex; j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n childWidget.index += incrementCount;\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n };\n /**\n * Update locked region highlight.\n *\n * @private\n * @param {string} user - Specified the user.\n * @param {boolean} isLocked - Specifies the isLocked.\n * @returns {void}\n */\n CollaborativeEditing.prototype.updateLockRegion = function (user, isLocked) {\n if (isNullOrUndefined(user)) {\n user = this.owner.currentUser;\n }\n isLocked = isNullOrUndefined(isLocked) ? true : isLocked;\n if (this.documentHelper.editRanges.containsKey(user)) {\n var editRanges = this.documentHelper.editRanges.get(user);\n if (editRanges.length === 1 && !isNullOrUndefined(editRanges[0].editRangeEnd)) {\n var editStart = editRanges[0];\n this.updateLockInfo(editStart.paragraph, editStart.editRangeEnd.paragraph, user, isLocked);\n }\n }\n };\n CollaborativeEditing.prototype.updateLockInfo = function (startBlock, endBlock, user, locked) {\n if (startBlock.isInsideTable) {\n startBlock = this.documentHelper.layout.getParentTable(startBlock);\n }\n if (endBlock.isInsideTable) {\n endBlock = this.documentHelper.layout.getParentTable(endBlock);\n }\n do {\n if (locked) {\n startBlock.lockedBy = user;\n startBlock.locked = locked;\n }\n else {\n startBlock.lockedBy = undefined;\n startBlock.locked = locked;\n }\n if (startBlock === endBlock) {\n break;\n }\n startBlock = startBlock.nextRenderedWidget;\n if (isNullOrUndefined(startBlock)) {\n break;\n }\n } while (startBlock);\n };\n /**\n * Pull pending actions from server.\n *\n * @returns {void}\n */\n CollaborativeEditing.prototype.pullAction = function () {\n var _this = this;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (this.owner) {\n var ajax = new XmlHttpRequestHandler();\n ajax.url = this.owner.serviceUrl + this.owner.serverActionSettings.getPendingActions;\n ajax.contentType = 'application/json;charset=UTF-8';\n ajax.onSuccess = function (result) {\n if (typeof result === 'string') {\n result = JSON.parse(result);\n }\n _this.updateAction(JSON.parse(result.data));\n hideSpinner(_this.owner.element);\n };\n ajax.onFailure = this.failureHandler.bind(this);\n ajax.onError = this.failureHandler.bind(this);\n ajax.customHeaders = this.owner.headers;\n showSpinner(this.owner.element);\n ajax.send(({ 'roomName': this.collaborativeEditingSettings.roomName, version: this.version }));\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Destroy collaborative editing module.\n *\n * @returns {void}\n */\n CollaborativeEditing.prototype.destroy = function () {\n this.owner = undefined;\n };\n return CollaborativeEditing;\n}());\nexport { CollaborativeEditing };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox } from '../viewer/page';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.isHeader = false;\n this.isFooter = false;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('(') > -1 || textToFind.indexOf(')') > -1 || textToFind.indexOf('.') > -1 || textToFind.indexOf('[') > -1\n || textToFind.indexOf(']') > -1 || textToFind.indexOf('$') > -1 || textToFind.indexOf('{') > -1\n || textToFind.indexOf('}') > -1 || textToFind.indexOf('*') > -1 || textToFind.indexOf('|') > -1\n || textToFind.indexOf('^') > -1 || textToFind.indexOf('?') > -1) {\n var text = '';\n for (var i = 0; i < textToFind.length; i++) {\n if (textToFind[i] === '(' || textToFind[i] === ')' || textToFind[i] === '.' || textToFind[i] === '['\n || textToFind[i] === ']' || textToFind[i] === '$' || textToFind[i] === '{' || textToFind[i] === '}'\n || textToFind[i] === '*' || textToFind[i] === '|' || textToFind[i] === '^' || textToFind[i] === '?') {\n text += '\\\\' + textToFind[i];\n }\n else {\n text += textToFind[i];\n }\n }\n textToFind = text;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return new RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n var eventArgs = { source: this.documentHelper.owner };\n this.documentHelper.owner.trigger(searchResultsChangeEvent, eventArgs);\n return results;\n }\n return undefined;\n };\n TextSearch.prototype.getElementInfo = function (inlineElement, indexInInline, includeNextLine) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n // eslint-disable no-constant-condition\n do {\n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, stringBuilder.length);\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n /* eslint-disable-next-line max-len */\n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n if (!isNullOrUndefined(inlineElement)) {\n if ((!isNullOrUndefined(includeNextLine) && !includeNextLine)) {\n var elementBoxes = inlineElement.line.children;\n var length_1 = inlineElement.line.children.length;\n if (elementBoxes.indexOf(inlineElement) < length_1 - 1) {\n inlineElement = inlineElement.nextNode;\n }\n else {\n inlineElement = undefined;\n break;\n }\n }\n else {\n inlineElement = inlineElement.nextNode;\n }\n }\n // eslint-disable-next-line no-constant-condition\n } while (true);\n var text = stringBuilder.toString();\n return { elementsWithOffset: spans, fullText: text };\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.updateMatchedTextLocation = function (matches, results, textInfo, indexInInline, inlines, isFirstMatch, selectionEnd, startPosition) {\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var isMatched = void 0;\n if (!(isNullOrUndefined(startPosition)) && match.index < startPosition) {\n continue;\n }\n var result = results.addResult();\n var spanKeys = textInfo.keys;\n for (var j = 0; j < spanKeys.length; j++) {\n var span = spanKeys[j];\n var startIndex = textInfo.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n isMatched = true;\n break;\n }\n }\n result.isHeader = this.isHeader;\n result.isFooter = this.isFooter;\n if (isFirstMatch) {\n results.currentIndex = 0;\n break;\n }\n else if (results.currentIndex < 0 && !isNullOrUndefined(selectionEnd) && (selectionEnd.isExistBefore(result.start) ||\n selectionEnd.isAtSamePosition(result.start))) {\n results.currentIndex = results.indexOf(result);\n }\n if (!isNullOrUndefined(startPosition) && isMatched) {\n break;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selection.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n /* eslint-disable-next-line max-len */\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selection.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n /* eslint-disable-next-line max-len */\n nextParagraphWidget = this.owner.selection.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.documentHelper.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n this.isHeader = false;\n this.isFooter = false;\n this.findInlineText(section, pattern, findOption, isFirstMatch, results, selectionEnd);\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var headerWidget = this.documentHelper.pages[i].headerWidgetIn;\n if (!isNullOrUndefined(headerWidget) && isNullOrUndefined(headerWidget.parentHeaderFooter)) {\n this.isHeader = true;\n this.isFooter = false;\n this.findInlineText(headerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var footerWidget = this.documentHelper.pages[i].footerWidgetIn;\n if (!isNullOrUndefined(footerWidget) && isNullOrUndefined(footerWidget.parentHeaderFooter)) {\n this.isHeader = false;\n this.isFooter = true;\n this.findInlineText(footerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInlineText = function (section, pattern, findOption, isFirstMatch, results, selectionEnd) {\n var paragraphWidget = this.owner.selection.getFirstParagraphBlock(section.childWidgets[0]);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && (paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var textInfo = this.getElementInfo(inlineElement, indexInInline);\n var text = textInfo.fullText;\n var matches = [];\n var spans = textInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable-next-line no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n this.updateMatchedTextLocation(matches, results, spans, indexInInline, inlines, isFirstMatch, selectionEnd);\n if (isFirstMatch) {\n return undefined;\n }\n /* eslint-disable-next-line max-len */\n var paragraphWidget = this.owner.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.documentHelper.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[i].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","/**\n * Search Result info\n */\nvar SearchResults = /** @class */ (function () {\n function SearchResults(search) {\n this.searchModule = search;\n }\n Object.defineProperty(SearchResults.prototype, \"length\", {\n /**\n * Gets the length of search results.\n *\n * @aspType int\n * @returns {number} - Returns search results length.\n */\n get: function () {\n return this.searchModule.textSearchResults.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchResults.prototype, \"index\", {\n /**\n * Gets the index of current search result.\n *\n * @aspType int\n * @returns {number} - Returns current search result index.\n */\n get: function () {\n return this.searchModule.textSearchResults.currentIndex;\n },\n /**\n * Set the index of current search result.\n *\n * @param {number} value - Specifies the search result index.\n * @aspType int\n */\n set: function (value) {\n if (this.length === 0 || value < 0 || value > this.searchModule.textSearchResults.length - 1) {\n return;\n }\n this.searchModule.textSearchResults.currentIndex = value;\n this.navigate();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get start and end offset of searched text results.\n *\n * @returns {TextSearchResults[]} - Returns the text search results.\n */\n SearchResults.prototype.getTextSearchResultsOffset = function () {\n var index = [];\n var searchIndex;\n for (var i = 0; i < this.searchModule.textSearchResults.innerList.length; i++) {\n searchIndex = this.getOffset(this.searchModule.textSearchResults.innerList[i]);\n index.push(searchIndex);\n }\n return index;\n };\n SearchResults.prototype.getOffset = function (innerList) {\n var start = innerList.start;\n var end = innerList.end;\n var blockInfo = this.searchModule.documentHelper.owner.selection.getParagraphInfo(start);\n /* eslint-disable-next-line max-len */\n var startIndex = this.searchModule.documentHelper.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.searchModule.documentHelper.owner.selection.getParagraphInfo(end);\n /* eslint-disable-next-line max-len */\n var endIndex = this.searchModule.documentHelper.owner.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n return { 'startOffset': startIndex, 'endOffset': endIndex };\n };\n SearchResults.prototype.getModuleName = function () {\n return 'SearchResults';\n };\n /**\n * Replace text in current search result.\n *\n * @private\n * @param {string} textToReplace - text to replace\n * @returns {void}\n */\n SearchResults.prototype.replace = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceInternal(textToReplace);\n };\n /**\n * Replace all the instance of search result.\n *\n * @param {string} textToReplace text to replace\n * @returns {void}\n */\n SearchResults.prototype.replaceAll = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceAllInternal(textToReplace);\n };\n /**\n * @private\n * @returns {void}\n */\n SearchResults.prototype.navigate = function () {\n this.searchModule.navigate(this.searchModule.textSearchResults.currentSearchResult);\n this.searchModule.highlight(this.searchModule.textSearchResults);\n };\n /**\n * Clears all the instance of search result.\n *\n * @returns {void}\n */\n SearchResults.prototype.clear = function () {\n this.searchModule.textSearchResults.clearResults();\n this.searchModule.clearSearchHighlight();\n this.searchModule.viewer.renderVisiblePages();\n };\n return SearchResults;\n}());\nexport { SearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox } from '../viewer/page';\nimport { SearchWidgetInfo } from './text-search';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\nimport { SearchResults } from './search-results';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n function Search(owner) {\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n this.isHandledOddPageHeader = undefined;\n this.isHandledEvenPageHeader = undefined;\n this.isHandledOddPageFooter = undefined;\n this.isHandledEvenPageFooter = undefined;\n this.owner = owner;\n this.searchHighlighters = new Dictionary();\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n this.searchResultsInternal = new SearchResults(this);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"searchResults\", {\n /**\n * Gets the search results object.\n *\n * @aspType SearchResults\n * @returns {SearchResults} - Returns the search results object.\n */\n get: function () {\n return this.searchResultsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n //#region Find & Find All\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var result = this.textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(text || text === '')) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var results = this.textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n //#endregion\n //#region Replace and Replace All\n /**\n * Replace the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies text to replace.\n * @param {TextSearchResult} result - Specifies the result.\n * @param {TextSearchResults} results - Specifies the results.\n * @returns {number} - Returns replaced text count.\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.clearSearchHighlight();\n }\n this.navigate(result);\n var endPosition = this.documentHelper.selection.start;\n if (this.owner.enableTrackChanges && this.documentHelper.selection.start.currentWidget) {\n var inline = undefined;\n /* eslint-disable-next-line max-len */\n var inlineElement = this.documentHelper.selection.end.currentWidget.getInline(this.owner.selection.start.offset, 0);\n inline = inlineElement.element;\n if (inline.revisions.length > 0) {\n this.isRepalceTracking = true;\n }\n }\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertTextInternal(replaceText, true);\n var endTextPosition = result.end;\n var startPosition = new TextPosition(this.viewer.owner);\n if (endTextPosition.currentWidget.children.length === 0) {\n var linewidget = endTextPosition.currentWidget.paragraph.childWidgets[0];\n startPosition.setPositionParagraph(linewidget, endPosition.offset - replaceText.length);\n }\n else {\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n }\n this.documentHelper.selection.selectRange(endPosition, startPosition);\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n return 1;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textToFind = this.textSearchResults.currentSearchResult.text;\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(textToFind, findOptions);\n var index = this.owner.selection.end.getHierarchicalIndexInternal();\n var result = this.viewer.owner.searchModule.textSearch.findNext(pattern, findOptions, index);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, this.textSearchResults);\n index = this.owner.selection.end.getHierarchicalIndexInternal();\n result = this.textSearch.findNext(textToFind, findOptions, index);\n if (result) {\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.navigate(result);\n }\n }\n };\n /**\n * Replace all the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies the replace text.\n * @param {TextSearchResults} results - Specfies the results.\n * @returns {number} - Returns the replace count.\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(this.owner.selection, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n var text = results.innerList[0].text;\n for (var i = count - 1; i >= 0; i--) {\n var result = results.innerList[i];\n if (result.start.currentWidget.children.length === 0) {\n results = this.textSearch.findAll(text);\n i = results.length;\n }\n else {\n this.navigate(results.innerList[i]);\n this.owner.editorModule.insertTextInternal(replaceText, true);\n results.innerList[i].destroy();\n }\n //if (result.isHeader || result.isFooter) {\n // eslint-disable-next-line max-len\n //this.documentHelper.layout.updateHeaderFooterToParent(this.documentHelper.selection.start.paragraph.bodyWidget as HeaderFooterWidget);\n //}\n }\n if (this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) {\n this.owner.editorHistory.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n this.searchResults.clear();\n return count;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceAllInternal = function (textToReplace, findOptions) {\n if (isNullOrUndefined(textToReplace)) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n if (this.textSearchResults.length > 0) {\n this.navigate(this.textSearchResults.innerList[this.textSearchResults.currentIndex]);\n this.highlight(this.textSearchResults);\n this.replaceAll(textToReplace, this.textSearchResults);\n }\n };\n //#endregion\n //#region Highlight Search Result\n /**\n * @private\n * @param {TextSearchResult} textSearchResult - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.navigate = function (textSearchResult) {\n if (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(start) &&\n !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selection.selectRange(start, end);\n }\n }\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.highlight = function (textSearchResults) {\n this.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n };\n Search.prototype.highlightResult = function (result) {\n this.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /* eslint-disable */\n Search.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n var lineWidget = this.documentHelper.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.documentHelper.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.documentHelper.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.documentHelper.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var width = 0;\n width = Math.abs(right - left);\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBox = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBox && elementBox.length > 1) {\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top);\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property. \n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.documentHelper.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n elementIsRTL = false;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n // Highlight the Paragrph mark for last line.\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n }\n }\n }\n }\n };\n Search.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selection.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.documentHelper.containerContext;\n };\n Search.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n var collection = this.searchHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n Search.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.documentHelper.selection.getTop(lineWidget);\n }\n var left = this.documentHelper.selection.getLeft(lineWidget);\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (lineWidget === endLine) {\n //Selection ends in current line.\n var right = 0;\n // Handled the highlighting using the element box highlighting approach as genric for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBox = this.documentHelper.selection.getElementsBackward(lineWidget, endElement, endElement, widget.bidi);\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, element, 0);\n if (element === endElement) {\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, endIndex);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, elementIsRTL ? right : left, top);\n }\n return;\n }\n else {\n right = this.documentHelper.selection.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, isRtlText ? right : left, top);\n return;\n }\n }\n else {\n width = this.documentHelper.selection.getWidth(lineWidget, true) - (left - widget.x);\n this.createHighlightBorder(lineWidget, width, left, top);\n top += lineWidget.height;\n }\n }\n };\n //#endregion\n //#region Get find result view\n /**\n * @private\n * @param {string} result - Specified the result.\n * @returns {void}\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specified text search result.\n * @returns {void}\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selection.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selection.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selection.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n var headerFooterString = '';\n if (result.isHeader) {\n headerFooterString = '' + 'Header' + ': ' + '';\n }\n else if (result.isFooter) {\n headerFooterString = '' + 'Footer' + ': ' + '';\n }\n else {\n headerFooterString = '';\n headerFooterString = '';\n this.isHandledOddPageHeader = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageFooter = true;\n }\n var listElement = '';\n var page = result.documentHelper.selection.getPage(result.start.paragraph);\n if (isNullOrUndefined(this.isHandledEvenPageHeader) && isNullOrUndefined(this.isHandledEvenPageFooter)) {\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n }\n else if (isNullOrUndefined(this.isHandledOddPageHeader) && isNullOrUndefined(this.isHandledOddPageFooter)) {\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n }\n if (result.isHeader) {\n if (page.headerWidget.headerFooterType === 'FirstPageHeader' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.headerWidget.headerFooterType === 'EvenHeader' && this.isHandledEvenPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageHeader = false;\n }\n else if (page.headerWidget.headerFooterType === 'OddHeader' && this.isHandledOddPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageHeader = false;\n }\n }\n else if (result.isFooter) {\n if (page.footerWidget.headerFooterType === 'FirstPageFooter' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.footerWidget.headerFooterType === 'EvenFooter' && this.isHandledEvenPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageFooter = false;\n }\n else if (page.footerWidget.headerFooterType === 'OddFooter' && this.isHandledOddPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageFooter = false;\n }\n }\n else if (!result.isHeader && !result.isFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n this.addSearchResultItems(listElement);\n }\n };\n //#endregion\n /**\n * Clears search highlight.\n *\n * @private\n * @returns {void}\n */\n Search.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n this.textSearchResults = undefined;\n this.owner = undefined;\n };\n return Search;\n}());\nexport { Search };\n","import { createElement, isNullOrUndefined, L10n, classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n function OptionsPane(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n // private regular: CheckBox = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.matchDivReplaceText = 'No matches';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * @returns {void}\n */\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult(false);\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * @returns {void}\n */\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n };\n /**\n * Fires on key down on options pane.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @returns {void}\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n _this.hideMatchDiv();\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 6) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.documentHelper.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.documentHelper.owner.selection != null) {\n var selectionText = _this.documentHelper.owner.selection.text;\n if (!_this.documentHelper.owner.selection.isEmpty) {\n if (_this.documentHelper.owner.selection.isForward) {\n _this.documentHelper.owner.selection.selectContent(_this.documentHelper.owner.selection.start, true);\n }\n else {\n _this.documentHelper.owner.selection.selectContent(_this.documentHelper.owner.selection.end, true);\n }\n }\n if (!isNullOrUndefined(results) && !isNullOrUndefined(results.currentSearchResult)) {\n var result = results.currentSearchResult;\n _this.documentHelper.owner.searchModule.navigate(result);\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.documentHelper.owner.searchModule.replace(replace, result, results);\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, index);\n if (!isNullOrUndefined(_this.results) && !isNullOrUndefined(_this.results.currentSearchResult)) {\n _this.documentHelper.owner.searchModule.navigate(_this.results.currentSearchResult);\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n _this.documentHelper.owner.findResultsList = [];\n if (!isNullOrUndefined(_this.results) && _this.results.innerList.length > 0) {\n _this.navigateSearchResult(true);\n }\n else {\n _this.resultsListBlock.innerHTML = '';\n }\n }\n else {\n _this.documentHelper.owner.search.findAll(findText, _this.findOption);\n }\n }\n else {\n _this.documentHelper.owner.search.findAll(findText, _this.findOption);\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n };\n /**\n * Fires on replace all.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = '';\n };\n /**\n * Fires on search icon.\n *\n * @private\n * @returns {void}\n */\n this.searchIconClickInternal = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inputElement = document.getElementById(_this.documentHelper.owner.containerId + '_option_search_text_box');\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n _this.hideMatchDiv();\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.matchDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n _this.onEnableDisableReplaceButton();\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var patterns = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n var start = _this.results.innerList[_this.results.currentIndex].start;\n var end = _this.results.innerList[_this.results.currentIndex].end;\n _this.documentHelper.scrollToPosition(start, end, true);\n _this.navigateSearchResult(false);\n _this.getMessageDivHeight();\n var height = _this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = _this.optionsPane.offsetHeight - _this.findTab.offsetHeight;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n *\n * @private\n * @returns {void}\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var selectionEnd = _this.documentHelper.owner.selection.end;\n var nextResult = void 0;\n var currentIndex = 0;\n if (selectionEnd.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.currentIndex;\n }\n for (var i = currentIndex; i < _this.results.length; i++) {\n var result = _this.results.innerList[i];\n if (selectionEnd.isExistBefore(result.start) || selectionEnd.isAtSamePosition(result.start)) {\n nextResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(nextResult)) {\n _this.results.currentIndex = 0;\n nextResult = _this.results.innerList[0];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(nextResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n *\n * @private\n * @returns {void}\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var previousResult = void 0;\n var selectionStart = _this.documentHelper.owner.selection.start;\n var currentIndex = _this.results.currentIndex;\n if (selectionStart.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.length - 1;\n }\n for (var i = currentIndex; i >= 0; i--) {\n var result = _this.results.innerList[i];\n if (selectionStart.isExistAfter(result.start) || _this.documentHelper.owner.selection.end.isAtSamePosition(result.start)) {\n previousResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(previousResult)) {\n _this.results.currentIndex = _this.results.length - 1;\n previousResult = _this.results.innerList[_this.results.currentIndex];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(previousResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n *\n * @private\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @returns {void}\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n }\n };\n /**\n * Close the optios pane.\n *\n * @private\n * @returns {void}\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n };\n /**\n * Fires on results list block.\n *\n * @private\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @returns {void}\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (index + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.documentHelper.owner.searchModule.navigate(currentelement);\n _this.documentHelper.owner.searchModule.highlight(_this.results);\n if (list) {\n list.focus();\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(OptionsPane.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n *\n * @private\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @param {boolean} isRtl - Specifies the Rtl.\n * @returns {void}\n */\n /* eslint-disable */\n OptionsPane.prototype.initOptionsPane = function (localeValue, isRtl) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n //parent\n this.findTab = createElement('div', { id: this.documentHelper.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n //head\n this.searchDiv = createElement('div', {\n className: 'e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.findTab.appendChild(this.searchDiv);\n this.closeButton = createElement('button', {\n className: 'e-de-op-close-button e-de-close-icon e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button' }\n });\n this.findTab.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n // tab\n var tabDiv = createElement('div');\n this.findTab.appendChild(tabDiv);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n var items = [\n { header: { text: this.findTabButton } },\n { header: { text: this.replaceTabButton } }\n ];\n this.tabInstance = new Tab({ items: items, enableRtl: isRtl, selected: this.selectedTabItem.bind(this) });\n this.tabInstance.isStringTemplate = true;\n this.tabInstance.appendTo(tabDiv);\n //search\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content' });\n this.findTab.appendChild(this.findTabContentDiv);\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.documentHelper.owner.containerId + '_option_search_text_box', attrs: { placeholder: localeValue.getConstant('Search for') } });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.documentHelper.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n //match\n var div = createElement('div', { className: 'e-de-op-more-less' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_matchCase'\n });\n div.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: localeValue.getConstant('Match case'), enableRtl: isRtl, checked: false, change: this.matchChange.bind(this) });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n var wholeWordLabel;\n if (isRtl) {\n wholeWordLabel = '_e-de-rtl';\n }\n else {\n wholeWordLabel = '_e-de-ltr';\n }\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_wholeWord' + wholeWordLabel\n });\n div.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: localeValue.getConstant('Whole words'), enableRtl: isRtl, checked: false, change: this.wholeWordsChange.bind(this) });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTab.appendChild(div);\n //Replace tab\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n this.findTab.appendChild(this.replaceTabContentDiv);\n this.createReplacePane(isRtl);\n //container\n this.resultContainer = createElement('div', { styles: 'width:85%;display:block;', className: 'e-de-op-result-container' });\n this.findTab.appendChild(this.resultContainer);\n this.messageDiv = createElement('div', { className: this.documentHelper.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.documentHelper.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n //resultblock-finding\n var resultDiv = createElement('div', { id: this.documentHelper.owner.containerId + '_resultDiv' });\n this.optionsPane.appendChild(resultDiv);\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'display:block;' });\n resultDiv.appendChild(this.findDiv);\n this.resultsListBlock = createElement('div', { id: this.documentHelper.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n this.onWireEvents();\n if (isRtl) {\n this.optionsPane.classList.add('e-de-rtl');\n this.closeButton.classList.add('e-de-rtl');\n this.searchDiv.classList.add('e-de-rtl');\n }\n };\n OptionsPane.prototype.createReplacePane = function (isRtl) {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input',\n attrs: { placeholder: this.localeValue.getConstant('Replace with') }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDivTextAlign;\n var replaceButtonMargin;\n if (isRtl) {\n replaceButtonDivTextAlign = 'text-align:left';\n replaceButtonMargin = 'margin-left:10px';\n }\n else {\n replaceButtonDivTextAlign = 'text-align:right';\n replaceButtonMargin = 'margin-right:10px';\n }\n var replaceButtonDiv = createElement('div', { styles: replaceButtonDivTextAlign, className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: replaceButtonMargin,\n innerHTML: this.localeValue.getConstant(this.replaceButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.selectedTabItem = function (args) {\n var contentParent = this.findTab.getElementsByClassName('e-content').item(0);\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = contentParent.children[0];\n var nextTab = contentParent.children[1];\n var element = previousTab.firstElementChild;\n if (element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n nextTab.appendChild(element);\n }\n }\n var selectedElement = contentParent.children[0];\n if (!isNullOrUndefined(selectedElement)) {\n if (args.selectedIndex === 0) {\n this.isOptionsPane = true;\n this.onFindPane();\n }\n else {\n this.isOptionsPane = false;\n this.onReplacePane();\n }\n }\n };\n OptionsPane.prototype.navigateSearchResult = function (navigate) {\n if (navigate) {\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n }\n this.documentHelper.owner.searchModule.highlight(this.results);\n this.documentHelper.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.documentHelper.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndexValue + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Apply find option based on whole words value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.wholeWordsChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else {\n this.findOption = 'None';\n }\n this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.matchChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else {\n this.findOption = 'None';\n }\n this.searchOptionChange();\n };\n // /**\n // * Apply find options based on regular value.\n // * @param {ChangeEventArgs} args - Specifies the search options value.\n // * @private\n // */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Binding events from the element when optins pane creation.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onWireEvents = function () {\n this.searchIcon.addEventListener('click', this.searchIconClickInternal);\n this.navigateToNextResult.addEventListener('click', this.navigateNextResultButtonClick);\n this.navigateToPreviousResult.addEventListener('click', this.navigatePreviousResultButtonClick);\n this.searchInput.addEventListener('keydown', this.onKeyDown);\n this.searchInput.addEventListener('keyup', this.onEnableDisableReplaceButton);\n this.resultsListBlock.addEventListener('click', this.resultListBlockClick);\n this.closeButton.addEventListener('click', this.close);\n this.replaceButton.addEventListener('click', this.onReplaceButtonClick);\n this.replaceAllButton.addEventListener('click', this.onReplaceAllButtonClick);\n };\n /**\n * Fires on key down actions done.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n var inputElement = document.getElementById(this.documentHelper.owner.containerId + '_option_search_text_box');\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var height = this.isOptionsPane ? 215 : 292;\n this.clearSearchResultItems();\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.documentHelper.owner.searchModule.highlight(results);\n this.documentHelper.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'block';\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n var list = this.documentHelper.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndex + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = this.focusedElement.indexOf(this.navigateToNextResult);\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Enable find pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onFindPane = function () {\n this.replaceDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n if (!isNullOrUndefined(this.results) && this.results.length === 0) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock.style.display = 'none';\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n }\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - (this.findTab.offsetHeight - this.replaceTabContentDiv.offsetHeight);\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.replaceTabContentDiv.style.display = 'none';\n this.findDiv.style.display = 'block';\n this.messageDiv.style.display = 'block';\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n this.focusedIndex = 1;\n this.searchInput.select();\n this.getMessageDivHeight();\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Enable replace pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onReplacePane = function () {\n this.findDiv.style.display = 'block';\n this.replaceDiv.style.display = 'block';\n this.replaceTabContentDiv.style.display = 'block';\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.isOptionsPane = false;\n if (this.searchInput.value.length !== 0) {\n this.replaceButton.disabled = false;\n this.replaceAllButton.disabled = false;\n }\n else {\n this.replaceButton.disabled = true;\n this.replaceAllButton.disabled = true;\n }\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n this.focusedIndex = 1;\n if (this.searchInput.value === '') {\n this.searchInput.select();\n }\n else {\n this.replaceWith.select();\n }\n this.getMessageDivHeight();\n };\n /**\n * Replace all.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n var count = isNullOrUndefined(results) ? 0 : results.length;\n this.documentHelper.owner.searchModule.replaceAll(replace, results);\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant('All Done') + '!';\n this.occurrenceDiv.style.display = 'block';\n this.occurrenceDiv.innerHTML = this.localeValue.getConstant('We replaced all') + ' ' + count + ' ' + this.localeValue.getConstant('instances') + ' ' + this.localeValue.getConstant('of') + ' \"' + findText + '\" ' + this.localeValue.getConstant('with') + ' \"' + replaceText + '\" ';\n }\n };\n OptionsPane.prototype.hideMatchDiv = function () {\n this.matchDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n };\n OptionsPane.prototype.updateListItems = function (textSearchResult) {\n var searchElements = this.resultsListBlock.getElementsByClassName('e-de-search-result-hglt');\n for (var j = 0; j < searchElements.length; j++) {\n var list = searchElements[j];\n classList(list, ['e-de-search-result-item'], ['e-de-search-result-hglt']);\n classList(list.children[0], [], ['e-de-op-search-word-text']);\n }\n var listElement = this.resultsListBlock.children[this.results.currentIndex];\n classList(listElement, ['e-de-search-result-hglt'], ['e-de-search-result-item']);\n classList(listElement.children[0], ['e-de-op-search-word-text'], []);\n this.scrollToPosition(listElement);\n this.documentHelper.owner.searchModule.navigate(textSearchResult);\n this.documentHelper.owner.searchModule.highlight(this.results);\n };\n /**\n * Scrolls to position.\n *\n * @private\n * @param {HTMLElement} list - Specifies the list element.\n * @returns {void}\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 1;\n };\n /**\n * Show or hide option pane based on boolean value.\n *\n * @private\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @returns {void}\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.documentHelper.owner.selectionModule)) {\n if (show) {\n this.localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localeValue.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue, this.documentHelper.owner.enableRtl);\n //Add Option Pane\n var isRtl = this.documentHelper.owner.enableRtl;\n var optionsPaneContainerStyle = void 0;\n if (isRtl) {\n optionsPaneContainerStyle = 'display:inline-flex;direction:rtl;';\n }\n else {\n optionsPaneContainerStyle = 'display:inline-flex;';\n }\n this.documentHelper.optionsPaneContainer.setAttribute('style', optionsPaneContainerStyle);\n this.documentHelper.optionsPaneContainer.insertBefore(this.documentHelper.owner.optionsPaneModule.optionsPane, this.documentHelper.viewerContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(1);\n }\n else {\n this.tabInstance.hideTab(1, false);\n }\n if (this.isReplace && !this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.select(1);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(0);\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n var textBox = document.getElementById(this.documentHelper.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.documentHelper.owner.selection.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.documentHelper.selection.caret.style.display = 'none';\n this.focusedIndex = 1;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.documentHelper.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.documentHelper.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.documentHelper.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n }\n this.documentHelper.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.documentHelper.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n this.documentHelper.updateFocus();\n this.documentHelper.selection.caret.style.display = 'block';\n }\n }\n };\n /**\n * Clears search results.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.documentHelper.owner.findResultsList)) {\n this.documentHelper.owner.findResultsList = [];\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n // if (this.regularInput) {\n // this.regularInput.innerHTML = '';\n // this.regular = undefined;\n // }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n this.documentHelper = undefined;\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @returns {void}\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { WShading } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/* eslint-disable */\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.fontColorIn = undefined;\n this.allCapsIn = undefined;\n /**\n * @private\n */\n this.boldBidi = undefined;\n /**\n * @private\n */\n this.italicBidi = undefined;\n /**\n * @private\n */\n this.fontSizeBidi = 0;\n /**\n * @private\n */\n this.bidi = undefined;\n /**\n * @private\n */\n this.bdo = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets the font size of selected contents.\n *\n * @aspType int\n */\n get: function () {\n return this.fontSizeIn;\n },\n /**\n * Sets the font size of selected contents.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontFamilyIn;\n },\n /**\n * Sets the font family of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontColorIn;\n },\n /**\n * Sets the font color of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.boldIn;\n },\n /**\n * Sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.italicIn;\n },\n /**\n * Sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n /**\n * Sets the strikethrough property of selected contents.\n */\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n /**\n * Sets the baseline alignment property of selected contents.\n */\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n /**\n * Sets the underline style of selected contents.\n */\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n /**\n * Sets the highlight color of selected contents.\n */\n set: function (value) {\n if (value === this.highlightColorIn && value !== \"NoColor\") {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"allCaps\", {\n /**\n * Gets or sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.allCapsIn;\n },\n /**\n * Sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allCapsIn) {\n return;\n }\n this.allCapsIn = value;\n this.notifyPropertyChanged('allCaps');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n case 'allCaps':\n return this.allCaps;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || (this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) ||\n !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n *\n * @param {WCharacterFormat} format\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n this.bidi = format.bidi;\n this.bdo = format.bdo;\n this.boldBidi = format.boldBidi;\n this.italicBidi = format.italicBidi;\n this.fontFamilyBidi = format.fontFamilyBidi;\n this.fontSizeBidi = format.fontSizeBidi;\n this.allCaps = format.allCaps;\n };\n /**\n * Combines the format.\n *\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n if (!isNullOrUndefined(this.boldBidi) && this.boldBidi !== format.boldBidi) {\n this.boldBidi = undefined;\n }\n if (!isNullOrUndefined(this.italicBidi) && this.italicBidi !== format.italicBidi) {\n this.italicBidi = undefined;\n }\n if (this.fontSizeBidi !== 0 && this.fontSizeBidi !== format.fontSizeBidi) {\n this.fontSizeBidi = 0;\n }\n if (!isNullOrUndefined(this.fontFamilyBidi) && this.fontFamilyBidi !== format.fontFamilyBidi) {\n this.fontFamilyBidi = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.bdo) && this.bdo !== format.bdo) {\n this.bdo = undefined;\n }\n if (!isNullOrUndefined(this.allCaps) && this.allCaps !== format.allCaps) {\n this.allCaps = undefined;\n }\n };\n /**\n * Clones the format.\n *\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n this.bidi = selectionCharacterFormat.bidi;\n this.bdo = selectionCharacterFormat.bdo;\n this.boldBidi = selectionCharacterFormat.boldBidi;\n this.italicBidi = selectionCharacterFormat.italicBidi;\n this.fontSizeBidi = selectionCharacterFormat.fontSizeBidi;\n this.fontFamilyBidi = selectionCharacterFormat.fontFamilyBidi;\n this.allCaps = selectionCharacterFormat.allCaps;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n *\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor\n && this.allCaps === format.allCaps);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n /**\n * Destroys the maintained resources.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection Border implementation\n */\nvar SelectionBorder = /** @class */ (function () {\n /**\n * @param SelectionBorders\n * @private\n */\n function SelectionBorder(selection, borderType, node) {\n this.colorIn = undefined;\n this.lineStyleIn = undefined;\n this.lineWidthIn = undefined;\n this.shadowIn = undefined;\n this.spaceIn = undefined;\n this.borderType = borderType;\n this.ownerBase = node;\n this.selection = selection;\n }\n Object.defineProperty(SelectionBorder.prototype, \"color\", {\n /**\n * Gets or sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.colorIn;\n },\n /**\n * Sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.colorIn) {\n return;\n }\n this.colorIn = value;\n this.notifyPropertyChanged(\"color\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineStyle\", {\n /**\n * Gets or sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n get: function () {\n return this.lineStyleIn;\n },\n /**\n * Sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n set: function (value) {\n if (value === this.lineStyleIn) {\n return;\n }\n this.lineStyleIn = value;\n this.notifyPropertyChanged(\"lineStyle\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineWidth\", {\n /**\n * Gets or sets the lineWidth for selected paragraph borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.lineWidthIn;\n },\n /**\n * Sets the lineWidth for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.lineWidthIn) {\n return;\n }\n this.lineWidthIn = value;\n this.notifyPropertyChanged(\"lineWidth\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"shadow\", {\n /**\n * Gets or sets the shadow for selected paragraph borders.\n *\n * @default undefined\n * @aspType boolean\n */\n get: function () {\n return this.shadowIn;\n },\n /**\n * Sets the shadow for selected paragraphs borders.\n *\n * @default undefined\n * @aspType boolean\n */\n set: function (value) {\n if (value === this.shadowIn) {\n return;\n }\n this.shadowIn = value;\n this.notifyPropertyChanged(\"shadow\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"space\", {\n /**\n * Gets or sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.spaceIn;\n },\n /**\n * Sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.spaceIn) {\n return;\n }\n this.spaceIn = value;\n this.notifyPropertyChanged('space');\n },\n enumerable: true,\n configurable: true\n });\n /**\n *Copies the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.copyFormat = function (border) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n };\n /**\n * Combines the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.combineFormat = function (border) {\n if (!isNullOrUndefined(this.color) && this.color !== border.color) {\n this.color = undefined;\n }\n if (!isNullOrUndefined(this.lineStyle) && this.lineStyle !== border.lineStyle) {\n this.lineStyle = undefined;\n }\n if (!isNullOrUndefined(this.lineWidth) && this.lineWidth !== border.lineWidth) {\n this.lineWidth = undefined;\n }\n if (!isNullOrUndefined(this.shadow) && this.shadow !== border.shadow) {\n this.shadow = undefined;\n }\n if (!isNullOrUndefined(this.space) && this.space !== border.space) {\n this.space = undefined;\n }\n };\n SelectionBorder.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'color':\n return this.color;\n case 'lineStyle':\n return this.lineStyle;\n case 'lineWidth':\n return this.lineWidth;\n case 'space':\n return this.space;\n case 'shadow':\n return this.shadow;\n }\n return undefined;\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n * @returns {void}\n */\n SelectionBorder.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editor = this.selection.owner.editorModule;\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n editor.applyParagraphBorders(propertyName, this.borderType, propertyValue);\n }\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.colorIn)) {\n this.colorIn = undefined;\n }\n if (!isNullOrUndefined(this.lineStyleIn)) {\n this.lineStyleIn = undefined;\n }\n if (!isNullOrUndefined(this.lineWidthIn)) {\n this.lineWidthIn = undefined;\n }\n if (!isNullOrUndefined(this.spaceIn)) {\n this.spaceIn = undefined;\n }\n if (!isNullOrUndefined(this.shadowIn)) {\n this.shadowIn = undefined;\n }\n };\n return SelectionBorder;\n}());\nexport { SelectionBorder };\n/**\n * Selection Borders implementation\n */\nvar SelectionBorders = /** @class */ (function () {\n /**\n * @param Object\n * @private\n */\n function SelectionBorders(selection, node) {\n this.ownerBase = undefined;\n this.ownerBase = node;\n this.selection = selection;\n this.topIn = new SelectionBorder(this.selection, 'topBorder', this);\n this.bottomIn = new SelectionBorder(this.selection, 'bottomBorder', this);\n this.rightIn = new SelectionBorder(this.selection, 'rightBorder', this);\n this.leftIn = new SelectionBorder(this.selection, 'leftBorder', this);\n this.horizontalIn = new SelectionBorder(this.selection, 'horizontalBorder', this);\n this.verticalIn = new SelectionBorder(this.selection, 'verticalBorder', this);\n }\n Object.defineProperty(SelectionBorders.prototype, \"top\", {\n /**\n * Gets the top Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.topIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"bottom\", {\n /**\n * Gets the bottom Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.bottomIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"left\", {\n /**\n * Gets the left Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.leftIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"right\", {\n /**\n * Gets the right Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.rightIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"horizontal\", {\n /**\n * Gets the horizontal Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.horizontalIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"vertical\", {\n /**\n * Gets the vertical Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.verticalIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WBorders} borders\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.copyFormat = function (borders) {\n this.top.copyFormat(borders.top);\n this.bottom.copyFormat(borders.bottom);\n this.left.copyFormat(borders.left);\n this.right.copyFormat(borders.right);\n this.horizontal.copyFormat(borders.horizontal);\n this.vertical.copyFormat(borders.vertical);\n };\n /**\n * Combines the format.\n *\n * @param {WBorders} borders\n * @private\n */\n SelectionBorders.prototype.combineFormat = function (borders) {\n this.top.combineFormat(borders.top);\n this.bottom.combineFormat(borders.bottom);\n this.left.combineFormat(borders.left);\n this.right.combineFormat(borders.right);\n this.vertical.combineFormat(borders.vertical);\n this.horizontal.combineFormat(borders.horizontal);\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n this.topIn = undefined;\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.bottomIn.destroy();\n this.bottomIn = undefined;\n }\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n this.leftIn = undefined;\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n this.rightIn = undefined;\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n this.horizontalIn = undefined;\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n this.verticalIn = undefined;\n }\n };\n return SelectionBorders;\n}());\nexport { SelectionBorders };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @param selection\n * @param documentHelper\n * @private\n */\n function SelectionParagraphFormat(selection, documentHelper) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.spaceAfterAutoIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.textAlignmentIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.bidiIn = undefined;\n this.keepWithNextIn = undefined;\n this.keepLinesTogetherIn = undefined;\n this.widowControlIn = undefined;\n this.contextualSpacingIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.documentHelper = documentHelper;\n this.bordersIn = new SelectionBorders(this.selection, this);\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"borders\", {\n /**\n * Gets the borders for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorders\n */\n get: function () {\n return this.bordersIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightIndentIn;\n },\n /**\n * Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n /**\n * Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n /**\n * Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.afterSpacingIn;\n },\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n /**\n * Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceAfterAuto\", {\n /**\n * Gets or Sets the space after auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceAfterAutoIn;\n },\n /**\n * Sets the space after auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceAfterAutoIn) {\n return;\n }\n this.spaceAfterAutoIn = value;\n this.notifyPropertyChanged('spaceAfterAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceBeforeAuto\", {\n /**\n * Gets or Sets the space before auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceBeforeAutoIn;\n },\n /**\n * Sets the space before auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceBeforeAutoIn) {\n return;\n }\n this.spaceBeforeAutoIn = value;\n this.notifyPropertyChanged('spaceBeforeAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.lineSpacingIn;\n },\n /**\n * Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n /**\n * Gets or Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"bidi\", {\n /**\n * Gets or Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepWithNext\", {\n /**\n * Gets or sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if the specified paragraph remains on the same page as the paragraph that follows it; otherwise, `false`.\n */\n get: function () {\n return this.keepWithNextIn;\n },\n /**\n * Sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepWithNextIn = value;\n this.notifyPropertyChanged('keepWithNext');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepLinesTogether\", {\n /**\n * Gets or sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if all lines in the specified paragraphs remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.keepLinesTogetherIn;\n },\n /**\n * Sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepLinesTogetherIn = value;\n this.notifyPropertyChanged('keepLinesTogether');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"widowControl\", {\n /**\n * Gets or sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n * @returns {boolean} - `true` if the first and last lines of the paragraph are to remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.widowControlIn;\n },\n /**\n * Sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n */\n set: function (value) {\n this.widowControlIn = value;\n this.notifyPropertyChanged('widowControl');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"contextualSpacing\", {\n /**\n * Gets or sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n get: function () {\n return this.contextualSpacingIn;\n },\n /**\n * Sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n set: function (value) {\n this.contextualSpacingIn = value;\n this.notifyPropertyChanged('contextualSpacing');\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.validateLineSpacing = function () {\n if (this.lineSpacingType !== 'Multiple' && this.lineSpacingIn < 12) {\n return true;\n }\n return false;\n };\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n *\n * @aspType string\n */\n get: function () {\n var listFormat = undefined;\n var list = this.documentHelper.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listTextElement = this.selection.getListTextElementBox(this.selection.start.paragraph);\n var listText = listTextElement ? listTextElement.text : '';\n listFormat = listText;\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'spaceAfterAuto':\n return this.spaceAfterAuto;\n case 'spaceBeforeAuto':\n return this.spaceBeforeAuto;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n case 'bidi':\n return this.bidi;\n case 'contextualSpacing':\n return this.contextualSpacing;\n case 'keepWithNext':\n return this.keepWithNext;\n case 'keepLinesTogether':\n return this.keepLinesTogether;\n case 'widowControl':\n return this.widowControl;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n if (propertyName === 'lineSpacing' || propertyName === 'lineSpacingType') {\n var editorHistory = this.selection.owner.editorHistory;\n if (!(editorHistory && (editorHistory.isUndoing || editorHistory.isRedoing)) && this.validateLineSpacing()) {\n this.selection.owner.editorHistory.initComplexHistory(this.selection, 'LineSpacing');\n if (propertyName === 'lineSpacing') {\n this.lineSpacingTypeIn = 'Multiple';\n var value_1 = this.getPropertyValue('lineSpacingType');\n editorModule.onApplyParagraphFormat('lineSpacingType', value_1, false, false);\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n this.lineSpacingIn = 12;\n editorModule.onApplyParagraphFormat('lineSpacing', this.getPropertyValue('lineSpacing'), false, false);\n }\n this.selection.owner.editorHistory.updateComplexHistory();\n return;\n }\n }\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.documentHelper.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WParagraphFormat} format\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.spaceAfterAuto = format.spaceAfterAuto;\n this.spaceBeforeAuto = format.spaceBeforeAuto;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n this.bidi = format.bidi;\n this.keepLinesTogether = format.keepLinesTogether;\n this.keepWithNext = format.keepWithNext;\n this.widowControl = format.widowControl;\n this.contextualSpacing = format.contextualSpacing;\n this.borders.copyFormat(format.borders);\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto)) {\n format.spaceAfterAuto = this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto)) {\n format.spaceBeforeAuto = this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n if (!isNullOrUndefined(this.bidi)) {\n format.bidi = this.bidi;\n }\n if (!isNullOrUndefined(this.keepWithNext)) {\n format.keepWithNext = this.keepWithNext;\n }\n if (!isNullOrUndefined(this.keepLinesTogether)) {\n format.keepLinesTogether = this.keepLinesTogether;\n }\n if (!isNullOrUndefined(this.widowControl)) {\n format.widowControl = this.widowControl;\n }\n if (!isNullOrUndefined(this.contextualSpacing)) {\n format.contextualSpacing = this.contextualSpacing;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto) && this.spaceAfterAuto !== format.spaceAfterAuto) {\n this.spaceAfterAuto = undefined;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto) && this.spaceBeforeAuto !== format.spaceBeforeAuto) {\n this.spaceBeforeAuto = undefined;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.keepLinesTogether) && this.keepLinesTogether !== format.keepLinesTogether) {\n this.keepLinesTogether = undefined;\n }\n if (!isNullOrUndefined(this.keepWithNext) && this.keepWithNext !== format.keepWithNext) {\n this.keepWithNext = undefined;\n }\n if (!isNullOrUndefined(this.widowControl) && this.widowControl !== format.widowControl) {\n this.widowControl = undefined;\n }\n if (!isNullOrUndefined(this.contextualSpacing) && this.contextualSpacing !== format.contextualSpacing) {\n this.contextualSpacing = undefined;\n }\n if (!isNullOrUndefined(this.styleName) && format.baseStyle && this.styleName !== format.baseStyle.name) {\n this.styleName = undefined;\n }\n this.borders.combineFormat(format.borders);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.spaceAfterAuto = undefined;\n this.spaceBeforeAuto = undefined;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n *\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.documentHelper.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n *\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv, isListDialog) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n var list = this.documentHelper.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.documentHelper.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.documentHelper.owner.editorHistory;\n var listLevel = this.documentHelper.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.documentHelper.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.documentHelper.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n if (isListDialog) {\n this.documentHelper.layout.clearInvalidList(listAdv);\n }\n this.documentHelper.owner.editorModule.layoutWholeDocument();\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.documentHelper.abstractLists.indexOf(currentAbstractList) === -1) {\n this.documentHelper.abstractLists.push(currentAbstractList);\n }\n if (this.documentHelper.lists.indexOf(listAdv) === -1) {\n this.documentHelper.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.spaceAfterAutoIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.documentHelper = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n if (!isNullOrUndefined(this.bordersIn)) {\n this.bordersIn.destroy();\n this.bordersIn = undefined;\n }\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n /**\n * private\n */\n this.bidi = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n get: function () {\n return this.pageHeightIn;\n },\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n get: function () {\n return this.pageWidthIn;\n },\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n get: function () {\n return this.headerDistanceIn;\n },\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageStartingNumber\", {\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n get: function () {\n return this.pageStartingNumberIn;\n },\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageStartingNumberIn = value;\n this.notifyPropertyChanged('pageStartingNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartPageNumbering\", {\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n get: function () {\n return this.restartPageNumberingIn;\n },\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n set: function (value) {\n this.restartPageNumberingIn = value;\n this.notifyPropertyChanged('restartPageNumbering');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n get: function () {\n return this.footerDistanceIn;\n },\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"endnoteNumberFormat\", {\n /**\n * Gets or sets the number format of endnote.\n */\n get: function () {\n return this.endnoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of endnote.\n */\n set: function (value) {\n this.endnoteNumberFormatIn = value;\n this.notifyPropertyChanged('endnoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footNoteNumberFormat\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.footNoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.footNoteNumberFormatIn = value;\n this.notifyPropertyChanged('footNoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialFootNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialFootNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialFootNoteNumberIn = value;\n this.notifyPropertyChanged('initialFootNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialEndNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialEndNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialEndNoteNumberIn = value;\n this.notifyPropertyChanged('initialEndNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForFootnotes\", {\n /**\n * Gets or sets the restart index of footnote\n */\n get: function () {\n return this.restartIndexForFootnotesIn;\n },\n /**\n * Gets or sets the restart index of footnote\n */\n set: function (value) {\n this.restartIndexForFootnotesIn = value;\n this.notifyPropertyChanged('restartIndexForFootnotes');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForEndnotes\", {\n /**\n * Gets or sets the restart index of endnote\n */\n get: function () {\n return this.restartIndexForEndnotesIn;\n },\n /**\n * Gets or sets the restart index of endnote\n */\n set: function (value) {\n this.restartIndexForEndnotesIn = value;\n this.notifyPropertyChanged('restartIndexForEndnotes');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WSectionFormat} format\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n this.bidi = format.bidi;\n this.pageStartingNumber = format.pageStartingNumber;\n this.restartPageNumbering = format.restartPageNumbering;\n this.endnoteNumberFormat = format.endnoteNumberFormat;\n this.footNoteNumberFormat = format.footNoteNumberFormat;\n this.restartIndexForEndnotes = format.restartIndexForEndnotes;\n this.restartIndexForFootnotes = format.restartIndexForFootnotes;\n this.initialEndNoteNumber = format.initialEndNoteNumber;\n this.initialFootNoteNumber = format.initialFootNoteNumber;\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n case 'pageStartingNumber':\n if (!isNullOrUndefined(this.pageStartingNumber)) {\n return this.pageStartingNumber;\n }\n return undefined;\n case 'restartPageNumbering':\n if (!isNullOrUndefined(this.restartPageNumbering)) {\n return this.restartPageNumbering;\n }\n return undefined;\n case 'endnoteNumberFormat':\n return this.endnoteNumberFormatIn;\n case 'restartIndexForEndnotes':\n return this.restartIndexForEndnotesIn;\n case 'restartIndexForFootnotes':\n return this.restartIndexForFootnotesIn;\n case 'footNoteNumberFormat':\n return this.footNoteNumberFormatIn;\n case 'initialFootNoteNumber':\n return this.initialFootNoteNumber;\n case 'initialEndNoteNumber':\n return this.initialEndNoteNumber;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.pageStartingNumber) && this.pageStartingNumber !== format.pageStartingNumber) {\n this.pageStartingNumber = undefined;\n }\n if (!isNullOrUndefined(this.restartPageNumbering) && this.restartPageNumbering !== format.restartPageNumbering) {\n this.restartPageNumbering = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.endnoteNumberFormat) && this.endnoteNumberFormat !== format.endnoteNumberFormat) {\n this.endnoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForEndnotes) && this.restartIndexForEndnotes !== format.restartIndexForEndnotes) {\n this.restartIndexForEndnotes = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForFootnotes) && this.restartIndexForFootnotes !== format.restartIndexForFootnotes) {\n this.restartIndexForFootnotes = undefined;\n }\n if (!isNullOrUndefined(this.footNoteNumberFormat) && this.footNoteNumberFormat !== format.footNoteNumberFormat) {\n this.footNoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.initialFootNoteNumber) && this.initialFootNoteNumber !== format.initialFootNoteNumber) {\n this.initialFootNoteNumber = undefined;\n }\n if (!isNullOrUndefined(this.initialEndNoteNumber) && this.initialEndNoteNumber !== format.initialEndNoteNumber) {\n this.initialEndNoteNumber = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n this.bidi = undefined;\n this.pageStartingNumber = undefined;\n this.restartPageNumbering = undefined;\n this.endnoteNumberFormat = undefined;\n this.footNoteNumberFormat = undefined;\n this.restartIndexForFootnotes = undefined;\n this.restartIndexForEndnotes = undefined;\n this.initialFootNoteNumber = 1;\n this.initialEndNoteNumber = 1;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n this.pageStartingNumberIn = undefined;\n this.restartPageNumberingIn = undefined;\n this.endnoteNumberFormatIn = undefined;\n this.footNoteNumberFormatIn = undefined;\n this.restartIndexForFootnotesIn = undefined;\n this.restartIndexForEndnotesIn = undefined;\n this.initialEndNoteNumber = undefined;\n this.initialFootNoteNumber = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.bidiIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n *\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.cellSpacingIn;\n },\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bidi\", {\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'bidi':\n return this.bidi;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WTableFormat} format Format to copy.\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n this.bidi = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n *\n * @default undefined\n * @aspType int\n */\n /* eslint-disable */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @private\n * @param {WCellFormat} format - Source Format to copy.\n * @returns {void}\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n *\n * @param {WCellFormat} format - Returns cell format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies the selection\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @returns {number} - Returns the height\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @param {number} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @returns {HeightType} - Returns height type\n */\n get: function () {\n return this.heightTypeIn;\n },\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @param {HeightType} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the is header\n */\n get: function () {\n return this.isHeaderIn;\n },\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @param {boolean} value - Specified the value\n */\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the allow break across page\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @param {boolean} value - Specified the value\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @param {WRowFormat} format - Specified row format\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n *\n * @param {WRowFormat} format - Secifies row format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies selecion module\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n *\n * @aspType int\n * @returns {number} - Returns image width\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n *\n * @aspType int\n * @returns {number} - Returns image height\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height);\n };\n /**\n * Update image width and height\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height);\n }\n }\n };\n /**\n * @param {ImageElementBox} image - Specifies image element box\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/* eslint-enable */\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n this.document = undefined;\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* eslint:enable:no-any */\n }\n HtmlExport.prototype.writeHtml = function (document) {\n this.document = document;\n var html = '';\n for (var i = 0; i < document.sections.length; i++) {\n html += this.serializeSection(document.sections[i]);\n }\n return html;\n };\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n for (var i = 0; i < section.blocks.length; i++) {\n var block = section.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n string += this.serializeParagraph(block);\n }\n else if (block.hasOwnProperty('blocks')) {\n string += this.serializeSection(block);\n }\n else {\n string += this.closeList();\n string += this.serializeTable(block);\n }\n }\n string += this.closeList();\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n return string;\n };\n // Serialize Paragraph\n HtmlExport.prototype.serializeParagraph = function (paragraph) {\n var blockStyle = '';\n var isList = false;\n var isPreviousList = false;\n if (!isNullOrUndefined(this.prevListLevel)) {\n isPreviousList = true;\n }\n var tagAttributes = [];\n var listLevel = undefined;\n if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n listLevel = this.getListLevel(paragraph);\n if (!isPreviousList) {\n this.prevListLevel = listLevel;\n }\n if (this.prevListLevel !== listLevel) {\n isPreviousList = false;\n }\n this.prevListLevel = listLevel;\n }\n if (!isPreviousList) {\n blockStyle += this.closeList();\n }\n if (!isNullOrUndefined(listLevel)) {\n isList = true;\n }\n if (isList && !isPreviousList) {\n blockStyle += this.getHtmlList(listLevel, paragraph.paragraphFormat.listFormat.listLevelNumber);\n }\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + ';' + 'white-space:pre' + '\"');\n if (isList) {\n blockStyle += this.createAttributesTag('li', tagAttributes);\n }\n else {\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n blockStyle += this.createAttributesTag(this.getStyleName(paragraph.paragraphFormat.styleName), tagAttributes);\n }\n if (paragraph.inlines.length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n if (isList) {\n blockStyle += this.endTag('li');\n if (blockStyle.indexOf(' -1) {\n this.isOrdered = false;\n }\n else if (blockStyle.indexOf(' -1) {\n this.isOrdered = true;\n }\n }\n else {\n blockStyle += this.endTag(this.getStyleName(paragraph.paragraphFormat.styleName));\n }\n return blockStyle;\n };\n HtmlExport.prototype.closeList = function () {\n var blockStyle = '';\n if (!isNullOrUndefined(this.isOrdered)) {\n if (this.isOrdered) {\n blockStyle = this.endTag('ol');\n }\n else {\n blockStyle = this.endTag('ul');\n }\n this.isOrdered = undefined;\n }\n return blockStyle;\n };\n HtmlExport.prototype.getListLevel = function (paragraph) {\n var listLevel = undefined;\n var list = undefined;\n for (var i = 0; i < this.document.lists.length; i++) {\n if (this.document.lists[i].listId === paragraph.paragraphFormat.listFormat.listId) {\n list = this.document.lists[i];\n break;\n }\n }\n if (list) {\n for (var j = 0; j < this.document.abstractLists.length; j++) {\n if (this.document.abstractLists[j].abstractListId === list.abstractListId) {\n listLevel = this.document.abstractLists[j].levels[paragraph.paragraphFormat.listFormat.listLevelNumber];\n break;\n }\n }\n }\n return listLevel;\n };\n HtmlExport.prototype.getHtmlList = function (listLevel, levelNumer) {\n //if (start == null || (start != null && start.Paragraph != this)) {\n // let block: BlockAdv = this.GetPreviousBlock();\n // if (block instanceof ParagraphAdv) {\n // let previousListLevel: ListLevelAdv = (block as ParagraphAdv).ParagraphFormat.ListFormat.ListLevel;\n // if (previousListLevel == listLevel)\n // return \"\";\n // }\n //}\n var html = '';\n if (listLevel.listLevelPattern === 'Bullet') {\n html += '
      ';\n }\n return html;\n };\n //SerializeInlines\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n var isMergeField = false;\n var tagAttributes = [];\n while (paragraph.inlines.length > i) {\n inline = paragraph.inlines[i];\n if (inline.hasOwnProperty('inlines')) {\n blockStyle += this.serializeContentInlines(inline, blockStyle);\n i++;\n continue;\n }\n if (inline.hasOwnProperty('imageString')) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n if (inline.fieldType === 0) {\n var fieldCode = paragraph.inlines[i + 1];\n if (isNullOrUndefined(fieldCode.text)) {\n fieldCode = paragraph.inlines[i + 2];\n }\n if (!isNullOrUndefined(fieldCode) && !isNullOrUndefined(fieldCode.text) &&\n (fieldCode.text.indexOf('TOC') >= 0 || fieldCode.text.indexOf('HYPERLINK') >= 0)) {\n this.fieldCheck = 1;\n var tagAttributes_1 = [];\n tagAttributes_1.push('style=\"' + this.serializeInlineStyle(inline.characterFormat) + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes_1);\n }\n else {\n this.fieldCheck = undefined;\n }\n }\n else if (inline.fieldType === 2) {\n if (!isNullOrUndefined(this.fieldCheck)) {\n this.fieldCheck = 2;\n }\n else {\n this.fieldCheck = 0;\n }\n }\n else {\n if (!isNullOrUndefined(this.fieldCheck) && this.fieldCheck !== 0) {\n blockStyle += this.endTag('a');\n }\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline.text) ? '' : inline.text;\n if (inline.hasOwnProperty('bookmarkType')) {\n switch (inline.bookmarkType) {\n case 0:\n blockStyle += '';\n break;\n case 1:\n blockStyle += '';\n break;\n }\n }\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline.characterFormat);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace(/\"/g, '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += text;\n }\n }\n i++;\n }\n return blockStyle;\n };\n HtmlExport.prototype.serializeContentInlines = function (inline, inlineStyle) {\n inlineStyle += this.serializeInlines(inline, inlineStyle);\n return inlineStyle;\n };\n // Serialize Span\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
      ';\n return spanClass.toString();\n }\n else if (spanText.indexOf('\\f') !== -1) {\n spanClass += '
      ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat);\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat) + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n // if (text.length === 0) {\n // text = ' ';\n // }\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n /**\n * @private\n * @param {string} style - style name.\n * @returns {string} - return heading tag.\n */\n HtmlExport.prototype.getStyleName = function (style) {\n switch (style) {\n case 'Heading 1':\n return 'h1';\n case 'Heading 2':\n return 'h2';\n case 'Heading 3':\n return 'h3';\n case 'Heading 4':\n return 'h4';\n case 'Heading 5':\n return 'h5';\n default:\n return 'div';\n }\n };\n //Serialize Image\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image.characterFormat);\n var imageSource = '';\n if (!isNullOrUndefined(image.imageString)) {\n imageSource = image.imageString;\n }\n var width = HelperMethods.convertPointToPixel(image.width);\n var height = HelperMethods.convertPointToPixel(image.height);\n tagAttributes.push('width=\"' + width.toString() + '\"');\n tagAttributes.push('height=\"' + height.toString() + '\"');\n tagAttributes.push('src=\"' + imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n HtmlExport.prototype.serializeCell = function (cell) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell.cellFormat)) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(cell.cellFormat.shading.backgroundColor) && cell.cellFormat.shading.backgroundColor !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(cell.cellFormat.shading.backgroundColor) + '\"');\n }\n // }\n if (!isNullOrUndefined(cell.cellFormat.columnSpan) && cell.cellFormat.columnSpan > 1) {\n tagAttributes.push('colspan=\"' + cell.cellFormat.columnSpan.toString() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.rowSpan) && cell.cellFormat.rowSpan > 1) {\n tagAttributes.push('rowspan=\"' + cell.cellFormat.rowSpan.toString() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.cellWidth) && cell.cellFormat.cellWidth !== 0) {\n var cellWidth = HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n tagAttributes.push('width=\"' + cellWidth.toString() + '\"');\n }\n var cellAlignment = isNullOrUndefined(cell.cellFormat.verticalAlignment) ? 'top' :\n cell.cellFormat.verticalAlignment.toString().toLowerCase();\n tagAttributes.push('valign=\"' + cellAlignment + '\"');\n if (!isNullOrUndefined(cell.cellFormat.leftMargin) && cell.cellFormat.leftMargin !== 0) {\n cellHtml += ('padding-left:' + cell.cellFormat.leftMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.rightMargin) && cell.cellFormat.rightMargin !== 0) {\n cellHtml += ('padding-right:' + cell.cellFormat.rightMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.topMargin) && cell.cellFormat.topMargin !== 0) {\n cellHtml += ('padding-top:' + cell.cellFormat.topMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.bottomMargin) && cell.cellFormat.bottomMargin !== 0) {\n cellHtml += ('padding-bottom:' + cell.cellFormat.bottomMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.borders)) {\n cellHtml += this.serializeCellBordersStyle(cell);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell.blocks.length; k++) {\n var block = cell.blocks[k];\n if (block.hasOwnProperty('rows')) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n // Serialize Table\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table.rows.length; j++) {\n html += this.serializeRow(table.rows[j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row.cells.length; k++) {\n html += this.serializeCell(row.cells[k]);\n }\n return html;\n };\n // Serialize Styles\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList) {\n var paragraphClass = '';\n paragraphClass += this.serializeCharacterFormat(paragraph.characterFormat);\n paragraphClass += this.serializeParagraphFormat(paragraph.paragraphFormat, isList);\n return paragraphClass;\n };\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat) {\n return this.serializeCharacterFormat(characterFormat);\n };\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n if (!isNullOrUndefined(borders.left.lineStyle)) {\n borderStyle += ('border-left-style:' + this.convertBorderLineStyle(borders.left.lineStyle));\n borderStyle += ';';\n }\n if (borders.left.lineWidth) {\n borderStyle += ('border-left-width:' + borders.left.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.left.color)) {\n borderStyle += ('border-left-color:' + HelperMethods.getColor(borders.left.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.lineStyle)) {\n borderStyle += ('border-right-style:' + this.convertBorderLineStyle(borders.right.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.lineWidth)) {\n borderStyle += ('border-right-width:' + borders.right.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.right.color)) {\n borderStyle += ('border-right-color:' + HelperMethods.getColor(borders.right.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.lineStyle)) {\n borderStyle += ('border-top-style:' + this.convertBorderLineStyle(borders.top.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.lineWidth)) {\n borderStyle += ('border-top-width:' + borders.top.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.top.color)) {\n borderStyle += ('border-top-color:' + HelperMethods.getColor(borders.bottom.color));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.lineStyle)) {\n borderStyle += ('border-bottom-style:' + this.convertBorderLineStyle(borders.bottom.lineStyle));\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.lineWidth)) {\n borderStyle += ('border-bottom-width:' + borders.bottom.lineWidth.toString() + 'pt');\n borderStyle += ';';\n }\n if (!isNullOrUndefined(borders.bottom.color)) {\n borderStyle += ('border-bottom-color:' + HelperMethods.getColor(borders.bottom.color));\n borderStyle += ';';\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeCellBordersStyle = function (WCell) {\n var borderStyle = '';\n //borderStyle = 'border:solid 1px;';\n // if (borders.left.color) {\n // borderStyle += ('border-left-color:' + HelperMethods.getColor(borders.left.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.left, 'left');\n // if (!isNullOrUndefined(borders.right.color)) {\n // borderStyle += ('border-right-color:' + HelperMethods.getColor(borders.right.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.right, 'right');\n // if (!isNullOrUndefined(borders.top.color)) {\n // borderStyle += ('border-top-color:' + HelperMethods.getColor(borders.top.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.top, 'top');\n // if (!isNullOrUndefined(borders.bottom.color)) {\n // borderStyle += ('border-bottom-color:' + HelperMethods.getColor(borders.bottom.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.bottom, 'bottom');\n var border = undefined;\n var borders = WCell.cellFormat.borders;\n //LeftBorder\n border = borders.left;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'left');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-left-style:none;');\n }\n //TopBorder\n border = borders.top;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'top');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-top-style:none');\n }\n //RightBorder\n border = borders.right;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'right');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-right-style:none');\n }\n //BottomBorder\n border = borders.bottom;\n if (!isNullOrUndefined(border) && border.lineStyle !== 'None' && border.lineStyle !== 'Cleared') {\n border.color = isNullOrUndefined(border.color) ? \"#000000\" : border.color;\n border.lineWidth = isNullOrUndefined(border.lineWidth) ? 0.5 : border.lineWidth;\n borderStyle += this.serializeBorderStyle(border, 'bottom');\n }\n else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n borderStyle += ('border-bottom-style:none');\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border.lineStyle));\n borderStyle += ';';\n if (border.lineWidth > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border.lineWidth.toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n if (!isNullOrUndefined(border.color)) {\n borderStyle += ('border-' + borderPosition + '-color:' + HelperMethods.getColor(border.color) + ';');\n }\n return borderStyle;\n };\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'None':\n return 'none';\n case 'Single':\n return 'solid';\n case 'Dot':\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n return 'double';\n case 'SingleWavy':\n return 'solid';\n case 'DoubleWavy':\n return 'double';\n case 'DashDotStroked':\n return 'solid';\n case 'Emboss3D':\n return 'ridge';\n case 'Engrave3D':\n return 'groove';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat.inlineFormat)) {\n return this.serializeCharacterFormat(characterFormat.inlineFormat);\n }\n var propertyValue;\n var charStyle = '';\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += characterFormat.bold ? 'bold' : 'normal';\n charStyle += ';';\n charStyle += 'font-style';\n charStyle += ':';\n if (characterFormat.italic) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n charStyle += this.serializeTextDecoration(characterFormat);\n //Text Baseline Alignment\n if (characterFormat.baselineAlignment === 'Superscript' || characterFormat.baselineAlignment === 'Subscript') {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat.baselineAlignment === 'Superscript' ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += HelperMethods.getHighlightColorCode(characterFormat.highlightColor.toString());\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat.fontColor;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += HelperMethods.getColor(propertyValue);\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat.allCaps) && (characterFormat.allCaps)) {\n charStyle += 'text-transform';\n charStyle += ':';\n charStyle += 'uppercase';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontSize;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontFamily;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n return charStyle.toString();\n };\n HtmlExport.prototype.serializeTextDecoration = function (characterFormat) {\n var charStyle = 'text-decoration:';\n var value = '';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat.strikethrough === 'SingleStrike' || characterFormat.strikethrough === 'DoubleStrike') {\n value += 'line-through ';\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n value += 'underline';\n }\n if (value.length > 1) {\n value = charStyle + value + ';';\n }\n return value;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList) {\n if (!isNullOrUndefined(paragraphFormat.inlineFormat)) {\n return this.serializeParagraphFormat(paragraphFormat.inlineFormat, isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = paragraphFormat.textAlignment;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat.beforeSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.rightIndent;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.afterSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.leftIndent;\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = -36;\n // } else {\n // propertyValue -= 36;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.firstLineIndent;\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = 18;\n // } else {\n // propertyValue += 18;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat.lineSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat.lineSpacingType === 'Multiple') {\n propertyValue = Math.round(propertyValue * 10) / 10;\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n //tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table.tableFormat)) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(table.tableFormat.shading) && !isNullOrUndefined(table.tableFormat.shading.backgroundColor) && table.tableFormat.shading.backgroundColor !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(table.tableFormat.shading.backgroundColor) + '\"');\n }\n //}\n if (!isNullOrUndefined(table.tableFormat.leftIndent) && table.tableFormat.leftIndent !== 0) {\n tagAttributes.push('left-indent=\"' + (table.tableFormat.leftIndent.toString() + 'pt;') + '\"');\n }\n if (!isNullOrUndefined(table.tableFormat.cellSpacing) && table.tableFormat.cellSpacing > 0) {\n tagAttributes.push('cellspacing=\"' + (((table.tableFormat.cellSpacing * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n // if (!isNullOrUndefined(table.tableFormat.borders)) {\n // tableStyle += this.serializeTableBorderStyle(table.tableFormat.borders);\n // }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (row.rowFormat.isHeader) {\n blockStyle += (this.createTag('thead'));\n }\n if (!isNullOrUndefined(row.rowFormat.height) && row.rowFormat.height > 0) {\n var height = HelperMethods.convertPointToPixel(row.rowFormat.height);\n tagAttributes.push('height=\"' + height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (row.rowFormat.isHeader) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n text = text.replace(//g, '>');\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, ElementBox, EditRangeStartElementBox, EditRangeEndElementBox, TabElementBox, CommentElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FieldTextElementBox, FootNoteWidget, FootnoteElementBox, ShapeBase } from '../viewer/page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { PageLayoutViewer, WebLayoutViewer, WRowFormat } from '../index';\nimport { isNullOrUndefined, createElement, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { contentControlEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent, requestNavigateEvent, CharacterRangeType } from '../../base/index';\nimport { WCharacterFormat, WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/* eslint-disable */\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @param documentEditor\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n this.isModifyingSelectionInternally = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.isViewPasteOptions = false;\n /**\n * @private\n */\n this.skipEditRangeRetrieval = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * @private\n */\n this.isHighlightEditRegionIn = false;\n /**\n * @private\n */\n this.isHighlightFormFields = false;\n /**\n * @private\n */\n this.isHightlightEditRegionInternal = false;\n /**\n * @private\n */\n this.isCurrentUser = false;\n /**\n * @private\n */\n this.isHighlightNext = false;\n /**\n * @private\n */\n this.isWebLayout = false;\n /**\n * @private\n */\n this.editRegionHighlighters = undefined;\n /**\n * @private\n */\n this.formFieldHighlighters = undefined;\n this.isSelectList = false;\n /**\n * @private\n */\n this.previousSelectedFormField = undefined;\n /**\n * @private\n */\n this.isFormatUpdated = false;\n /**\n * @private\n */\n this.pasteOptions = function (event) {\n var locale = new L10n('documenteditor', _this.owner.defaultLocale);\n locale.setLocale(_this.owner.locale);\n if (event.item.text === locale.getConstant('Keep source formatting')) {\n _this.owner.editor.applyPasteOptions('KeepSourceFormatting');\n }\n else if (event.item.text === locale.getConstant('Match destination formatting')) {\n _this.owner.editor.applyPasteOptions('MergeWithExistingFormatting');\n }\n else if (event.item.text === locale.getConstant('NestTable')) {\n _this.owner.editor.applyTablePasteOptions('NestTable');\n }\n else if (event.item.text === locale.getConstant('InsertAsRows')) {\n _this.owner.editor.applyTablePasteOptions('InsertAsRows');\n }\n else if (event.item.text === locale.getConstant('InsertAsColumns')) {\n _this.owner.editor.applyTablePasteOptions('InsertAsColumns');\n }\n else if (event.item.text === locale.getConstant('OverwriteCells')) {\n _this.owner.editor.applyTablePasteOptions('OverwriteCells');\n }\n else {\n _this.owner.editor.applyPasteOptions('KeepTextOnly');\n }\n };\n /**\n * Hides caret.\n *\n * @private\n * @returns {void}\n */\n this.hideCaret = function () {\n if (!isNullOrUndefined(_this.caret)) {\n _this.caret.style.display = 'none';\n }\n };\n this.owner = documentEditor;\n this.documentHelper = this.owner.documentHelper;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.documentHelper);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n this.editRangeCollection = [];\n this.editRegionHighlighters = new Dictionary();\n this.formFieldHighlighters = new Dictionary();\n }\n Object.defineProperty(Selection.prototype, \"isHighlightEditRegion\", {\n /**\n * @private\n * @returns {boolean} - Retuens true if highlighting editing region\n */\n get: function () {\n return this.isHighlightEditRegionIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHighlightEditRegionIn = value;\n this.onHighlight();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n *\n * @private\n * @returns {TextPosition} - Returns selection start position.\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n *\n * @default undefined\n * @aspType SelectionCharacterFormat\n * @returns {SelectionCharacterFormat} - Returns selection character format.\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n *\n * @default undefined\n * @aspType SelectionParagraphFormat\n * @returns {SelectionParagraphFormat} - Returns selection paragraph format.\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n *\n * @default undefined\n * @aspType SelectionSectionFormat\n * @returns {SelectionSectionFormat} - Returns selection section format.\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n *\n * @default undefined\n * @aspType SelectionTableFormat\n * @returns {SelectionTableFormat} - Returns selection table format.\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n *\n * @default undefined\n * @aspType SelectionCellFormat\n * @returns {SelectionCellFormat} - Returns selection cell format.\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n *\n * @default undefined\n * @aspType SelectionRowFormat\n * @returns {SelectionRowFormat} - Returns selection row format.\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n *\n * @default undefined\n * @aspType SelectionImageFormat\n * @returns {SelectionImageFormat} - Returns selection image format.\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n *\n * @private\n * @returns {TextPosition} - Returns selection end position.\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n *\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection starts.\n *\n * @returns {number} - Returns the selection start page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionStartPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n *\n * @returns {number} - Returns the selection end page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionEndPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n *\n * @default false\n * @private\n * @returns {boolean} - Returns isForward\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinFootnote\", {\n /**\n * Determines whether the selection is in footnote or not.\n *\n * @default false\n * @returns {boolean} - Returns true if selection is in footnote\n * @private\n */\n get: function () {\n var container = this.getContainerWidget(this.start.paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n return true;\n }\n else {\n return false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinEndnote\", {\n /**\n * Determines whether the selection is in endnote or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n var container = this.getContainerWidget(this.start.paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n return true;\n }\n else {\n return false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startOffset\", {\n /**\n * Returns start hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endOffset\", {\n /**\n * Returns end hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInShape\", {\n /**\n * @private\n */\n get: function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return true;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n *\n * @default ''\n * @aspType string\n * @returns {string}\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"bookmarks\", {\n /**\n * Gets bookmark name collection.\n */\n get: function () {\n return this.getSelBookmarks(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sfdt\", {\n /**\n * Gets the selected content of the document as SFDT(Syncfusion Document Text) file format.\n *\n * @default undefined\n * @returns {string}\n */\n get: function () {\n if (this.owner.editorModule && (this.start.offset !== this.end.offset)) {\n return JSON.stringify(this.writeSfdt());\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the bookmark name collection in current selection\n *\n * @param includeHidden - Decide whether to include hidden bookmark name in current selection or not.\n */\n Selection.prototype.getBookmarks = function (includeHidden) {\n return this.getSelBookmarks(includeHidden);\n };\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInField\", {\n /**\n * Returns true if selection is in field\n */\n get: function () {\n if (!isNullOrUndefined(this.getHyperlinkField(true))) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the field information for the selected field.\n *\n * @returns { FieldInfo } – Return {FieldInfo} if selection is in field, otherwise `undefined`\n * > Returns `undefined` for text, image, table, shape. For nested fields, it returns combined field code and result.\n */\n Selection.prototype.getFieldInfo = function () {\n var field = this.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n var code = this.getFieldCode(field);\n var result = this.owner.editorModule.getFieldResultText(field);\n return {\n code: code,\n result: result\n };\n }\n return undefined;\n };\n Selection.prototype.getSelBookmarks = function (includeHidden) {\n var bookmarkCln = [];\n var bookmarks = this.documentHelper.bookmarks;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmrkStart;\n var bookmrkEnd;\n var isCellSelected = false;\n var selectedCells = this.getSelectedCells();\n for (var i = 0; i < bookmarks.length; i++) {\n if (includeHidden || !includeHidden && bookmarks.keys[i].indexOf('_') !== 0) {\n bookmrkStart = bookmarks.get(bookmarks.keys[i]);\n bookmrkEnd = bookmrkStart.reference;\n if (isNullOrUndefined(bookmrkEnd)) {\n continue;\n }\n var bmStartPos = this.getElementPosition(bookmrkStart).startPosition;\n var bmEndPos = this.getElementPosition(bookmrkEnd, true).startPosition;\n if (bmStartPos.paragraph.isInsideTable || bmEndPos.paragraph.isInsideTable) {\n if (selectedCells.length > 0) {\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) >= 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) >= 0) {\n isCellSelected = true;\n }\n else {\n isCellSelected = false;\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) < 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) < 0) {\n var endCell = end.paragraph.isInsideTable && end.paragraph.associatedCell;\n var bmEndPosCell = bmEndPos.paragraph.associatedCell;\n if (endCell && bmEndPosCell && endCell.ownerTable.equals(bmEndPosCell.ownerTable) &&\n !(endCell.ownerTable\n && selectedCells.indexOf(this.getCellInTable(endCell.ownerTable, bmEndPosCell)) >= 0)) {\n continue;\n }\n }\n }\n }\n else {\n isCellSelected = false;\n }\n }\n else {\n isCellSelected = false;\n }\n if ((start.isExistAfter(bmStartPos) || start.isAtSamePosition(bmStartPos))\n && (end.isExistBefore(bmEndPos) || end.isAtSamePosition(bmEndPos)) ||\n ((bmStartPos.isExistAfter(start) || bmStartPos.isAtSamePosition(start))\n && (bmEndPos.isExistBefore(end) || bmEndPos.isAtSamePosition(end))) ||\n (bmStartPos.isExistAfter(start) && bmStartPos.isExistBefore(end)\n && (end.isExistAfter(bmEndPos) || end.isExistBefore(bmEndPos))) ||\n (bmEndPos.isExistBefore(end) && bmEndPos.isExistAfter(start)\n && (start.isExistBefore(bmStartPos) || start.isExistAfter(bmStartPos))) || isCellSelected) {\n bookmarkCln.push(bookmrkStart.name);\n }\n }\n }\n return bookmarkCln;\n };\n Object.defineProperty(Selection.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n Selection.prototype.checkLayout = function () {\n if (this.owner.layoutType === 'Continuous') {\n this.isWebLayout = true;\n this.documentHelper.isHeaderFooter = true;\n this.owner.layoutType = 'Pages';\n this.owner.viewer.destroy();\n this.owner.viewer = new PageLayoutViewer(this.owner);\n this.owner.editor.layoutWholeDocument();\n }\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToHeader = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Moves the selection to the footer of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToFooter = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Closes the header and footer region.\n *\n * @returns {void}\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n if (this.documentHelper.isHeaderFooter && this.owner.layoutType === 'Pages') {\n this.owner.layoutType = 'Continuous';\n this.documentHelper.isHeaderFooter = false;\n }\n };\n /**\n * Moves the selection to the start of specified page number.\n *\n * @param pageNumber\n * @returns {void}\n */\n Selection.prototype.goToPage = function (pageNumber) {\n this.owner.scrollToPage(pageNumber);\n if (pageNumber >= 1 && pageNumber <= this.owner.documentHelper.pages.length) {\n var page = this.owner.documentHelper.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n Selection.prototype.select = function (selectionSettings, startOrEnd) {\n if (typeof (selectionSettings) === 'string') {\n var startPosition = this.getTextPosBasedOnLogicalIndex(selectionSettings);\n var endPosition = this.getTextPosBasedOnLogicalIndex(startOrEnd);\n this.selectPosition(startPosition, endPosition);\n }\n else {\n var point = new Point(selectionSettings.x, selectionSettings.y);\n var pageCoordinates = this.viewer.findFocusedPage(point, true);\n if (selectionSettings.extend) {\n this.moveTextPosition(pageCoordinates, this.end);\n }\n else {\n this.documentHelper.updateTextPositionForSelection(pageCoordinates, 1);\n }\n }\n };\n /**\n * Selects based on start and end hierarchical index.\n *\n * @param start\n * @param end\n * @returns {void}\n */\n Selection.prototype.selectByHierarchicalIndex = function (start, end) {\n var startPosition = this.getTextPosBasedOnLogicalIndex(start);\n var endPosition = this.getTextPosBasedOnLogicalIndex(end);\n this.selectPosition(startPosition, endPosition);\n };\n /**\n * Select the current field if selection is in field\n *\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectField = function (fieldStart) {\n if (this.isInField || !isNullOrUndefined(fieldStart)) {\n if (isNullOrUndefined(fieldStart)) {\n fieldStart = this.getHyperlinkField(true);\n }\n this.selectFieldInternal(fieldStart);\n }\n };\n /**\n * @private\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectFieldInternal = function (fieldStart, isKeyBoardEvent, isReplacingFormResult) {\n if (fieldStart) {\n var formFillingMode = this.documentHelper.isFormFillProtectedMode || isReplacingFormResult;\n var fieldEnd = fieldStart.fieldEnd;\n if (formFillingMode) {\n fieldStart = fieldStart.fieldSeparator;\n }\n var offset = fieldStart.line.getOffset(fieldStart, formFillingMode ? 1 : 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(fieldStart.line, offset);\n var isBookmark = fieldStart.nextNode instanceof BookmarkElementBox;\n if (isBookmark && !formFillingMode) {\n fieldEnd = fieldStart.nextElement.reference;\n }\n var endoffset = fieldEnd.line.getOffset(fieldEnd, formFillingMode ? 0 : 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n this.triggerFormFillEvent(isKeyBoardEvent);\n }\n };\n /**\n * @param shape\n * @private\n * @returns {void}\n */\n Selection.prototype.selectShape = function (shape) {\n if (shape) {\n var offset = shape.line.getOffset(shape, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(shape.line, offset);\n var endoffset = shape.line.getOffset(shape, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(shape.line, endoffset);\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the allCaps property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleAllCaps = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleAllCaps();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param {Underline} underline Default value of ‘underline’ parameter is Single.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editor) {\n this.owner.editor.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editor) {\n this.owner.editor.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editor) {\n this.owner.editor.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n *\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editor) {\n this.owner.editor.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n *\n * @param fieldBegin\n * @private\n * @returns {void}\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var code = this.getFieldCode(fieldBegin);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n return;\n }\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference,\n source: this.owner\n };\n this.owner.trigger(requestNavigateEvent, eventArgs);\n if (!eventArgs.isHandled) {\n this.documentHelper.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField, true);\n this.copyToClipboard(linkText);\n };\n Selection.prototype.isHideSelection = function (paragraph) {\n var bodyWgt = paragraph.bodyWidget;\n var sectionFormat = bodyWgt.sectionFormat;\n var pageHt = sectionFormat.pageHeight - sectionFormat.footerDistance;\n var headerFooterHt = bodyWgt.page.boundingRectangle.height / 100 * 40;\n return this.contextType.indexOf('Footer') >= 0\n && (paragraph.y + paragraph.height > HelperMethods.convertPointToPixel(pageHt))\n || this.contextType.indexOf('Header') >= 0 && paragraph.y + paragraph.height > headerFooterHt;\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n if (!this.isInShape && this.isHideSelection(this.start.paragraph)) {\n this.hideCaret();\n return;\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n if (this.documentHelper.isComposingIME) {\n this.updateCaretPosition();\n }\n }\n this.documentHelper.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.start, this.end);\n }\n };\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top, isElementBoxHighlight) {\n if (width < 0) {\n width = 0;\n }\n var paragraph = lineWidget.paragraph;\n var floatingItems = [];\n if (paragraph.floatingElements.length > 0) {\n for (var k = 0; k < paragraph.floatingElements.length; k++) {\n var shapeElement = paragraph.floatingElements[k];\n if (shapeElement.line === lineWidget) {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n var offset = shapeElement.line.getOffset(shapeElement, 0);\n if ((startTextPos.currentWidget !== lineWidget && endTextPos.currentWidget !== lineWidget) ||\n (startTextPos.currentWidget === lineWidget && startTextPos.offset <= offset\n && (endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset + 1\n || endTextPos.currentWidget !== lineWidget)) || (startTextPos.currentWidget !== lineWidget\n && endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset)) {\n floatingItems.push(shapeElement);\n }\n }\n }\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var widgets = this.selectedWidgets;\n var selectionWidget = undefined;\n var selectionWidgetCollection = undefined;\n if (this.isHightlightEditRegionInternal) {\n this.addEditRegionHighlight(lineWidget, left, width);\n return;\n }\n else if (this.isHighlightFormFields) {\n this.addFormFieldHighlight(lineWidget, left, width);\n return;\n }\n else {\n if (widgets.containsKey(lineWidget)) {\n if (widgets.get(lineWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(lineWidget);\n // if the line element has already added with SelectionWidgetInfo\n // now its need to be added as ElementBox highlighting them remove it from dictionary and add it collection.\n if (isElementBoxHighlight) {\n widgets.remove(lineWidget);\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n }\n else {\n selectionWidgetCollection = widgets.get(lineWidget);\n }\n }\n else {\n if (isElementBoxHighlight) {\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n else {\n var wrapPosition = this.getWrapPosition(lineWidget, paragraph);\n if (wrapPosition.length > 0) {\n var selectionWidgetInfos = this.splitSelectionHighlightPosition(left, width, wrapPosition);\n if (selectionWidgetInfos.length > 0) {\n selectionWidgetInfos[0].floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidgetInfos);\n this.renderHighlight(page, lineWidget, selectionWidgetInfos, top, floatingItems);\n return;\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n }\n if (selectionWidget === undefined) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n this.renderHighlight(page, lineWidget, [selectionWidget], top, floatingItems);\n if (isElementBoxHighlight) {\n selectionWidgetCollection.push(selectionWidget);\n }\n };\n Selection.prototype.renderHighlight = function (page, lineWidget, selectionWidget, top, floatingItems) {\n var documentHelper = this.owner.documentHelper;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var height = lineWidget.height;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + documentHelper.selectionCanvas.height) {\n var zoomFactor = documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n for (var i = 0; i < selectionWidget.length; i++) {\n var selectedWidget = selectionWidget[i];\n var left = selectedWidget.left;\n var width = selectedWidget.width;\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(documentHelper.selectionContext, page, lineWidget, (pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, top, width * zoomFactor, height);\n }\n else {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n documentHelper.selectionContext.globalAlpha = 0.4;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n }\n }\n if (floatingItems.length > 0) {\n for (var z = 0; z < floatingItems.length; z++) {\n var left = floatingItems[z].x;\n var shapeTop = floatingItems[z].y;\n var shapeWidth = floatingItems[z].width;\n var shapeHeight = floatingItems[z].height;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (shapeTop * zoomFactor)) - this.viewer.containerTop, shapeWidth * zoomFactor, shapeHeight * zoomFactor);\n }\n }\n documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.getWrapPosition = function (lineWidget, paragraph) {\n var bodyWidget = paragraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.length > 0 && lineWidget.children.length > 0) {\n var startLeft = this.getLeftInternal(lineWidget, lineWidget.children[0], 0);\n var width = 0;\n var wrapPos = [];\n var isStarted = false;\n for (var z = 0; z < lineWidget.children.length; z++) {\n var element = lineWidget.children[z];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element.padding.left > 0) {\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n startLeft = paragraph.x;\n }\n var clipInfo = {};\n clipInfo.start = startLeft + width;\n clipInfo.end = 0;\n if (isStarted) {\n clipInfo.end = startLeft + width + element.padding.left;\n }\n wrapPos.push(clipInfo);\n }\n width += element.padding.left + element.width;\n if (element instanceof TextElementBox) {\n isStarted = true;\n }\n }\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n }\n return wrapPos;\n }\n return [];\n };\n Selection.prototype.splitSelectionHighlightPosition = function (left, width, clipInfo) {\n var selectedWidget = [];\n for (var m = 0; m < clipInfo.length; m++) {\n var info = clipInfo[m];\n if ((left < info.start && left + width < info.end) || left > (info.end)) {\n continue;\n }\n if (left < info.start && left + width > info.end) {\n selectedWidget.push(new SelectionWidgetInfo(left, info.start - left));\n width = (left + width) - info.end;\n left = info.end;\n }\n else if (left === info.start) {\n left += info.end;\n width = width - info.end;\n }\n if (m === clipInfo.length - 1) {\n selectedWidget.push(new SelectionWidgetInfo(left, width));\n }\n }\n return selectedWidget;\n };\n Selection.prototype.addEditRegionHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.editRegionHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var editRegionHighlight = new SelectionWidgetInfo(left, width);\n if (this.isCurrentUser) {\n editRegionHighlight.color = this.owner.userColor !== '' ? this.owner.userColor : '#FFFF00';\n }\n highlighters.push(editRegionHighlight);\n return editRegionHighlight;\n };\n Selection.prototype.addFormFieldHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.formFieldHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var formFieldHighlight = new SelectionWidgetInfo(left, width);\n highlighters.push(formFieldHighlight);\n };\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.documentHelper.selectionCanvas.height;\n var widgets = this.selectedWidgets;\n if (!this.isHightlightEditRegionInternal && !this.isHighlightFormFields) {\n if (widgets.containsKey(cellWidget) && widgets.get(cellWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(cellWidget);\n if (isVisiblePage) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.documentHelper.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.documentHelper.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.documentHelper.zoomFactor, height * this.documentHelper.zoomFactor);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n if (widgets.containsKey(cellWidget)) {\n widgets.remove(widgets.get(cellWidget));\n }\n widgets.add(cellWidget, selectionWidget);\n }\n }\n if (isVisiblePage) {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n this.documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.clipSelection = function (page, pageTop) {\n var documentHelper = this.owner.documentHelper;\n var width;\n var height;\n if (this.viewer instanceof WebLayoutViewer && this.documentHelper.zoomFactor < 1) {\n width = page.boundingRectangle.width / this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height / this.documentHelper.zoomFactor;\n }\n else {\n width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n }\n var left = page.boundingRectangle.x;\n documentHelper.selectionContext.beginPath();\n documentHelper.selectionContext.save();\n documentHelper.selectionContext.rect(left - this.viewer.containerLeft, pageTop - this.viewer.containerTop, width, height);\n documentHelper.selectionContext.clip();\n };\n /**\n * Add selection highlight\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top, page) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = this.documentHelper.render.getScaledValue(widget.height);\n var widgetInfo = this.selectedWidgets.get(widget);\n var widgetInfoCollection = undefined;\n if (widgetInfo instanceof SelectionWidgetInfo) {\n widgetInfoCollection = [];\n widgetInfoCollection.push(widgetInfo);\n }\n else {\n widgetInfoCollection = widgetInfo;\n }\n if (!isNullOrUndefined(widgetInfoCollection)) {\n for (var i = 0; i < widgetInfoCollection.length; i++) {\n var selectedWidgetInfo = widgetInfoCollection[i];\n var width = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].width);\n var left = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].left, 1);\n if (isNullOrUndefined(page)) {\n page = this.owner.selection.getPage(widget.paragraph);\n }\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(canvasContext, page, widget, left, top, width, height);\n }\n else {\n canvasContext.globalAlpha = 0.4;\n canvasContext.fillStyle = 'gray';\n canvasContext.fillRect(left, this.documentHelper.render.getScaledValue(top, 2), width, height);\n if (selectedWidgetInfo.floatingItems && selectedWidgetInfo.floatingItems.length > 0) {\n for (var j = 0; j < selectedWidgetInfo.floatingItems.length; j++) {\n var shape = selectedWidgetInfo.floatingItems[j];\n width = this.documentHelper.render.getScaledValue(shape.width);\n left = this.documentHelper.render.getScaledValue(shape.x, 1);\n var shapeTop = this.documentHelper.render.getScaledValue(shape.y, 2);\n canvasContext.fillRect(left, shapeTop, width, this.documentHelper.render.getScaledValue(shape.height));\n }\n }\n }\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.renderDashLine = function (ctx, page, widget, left, top, width, height) {\n var fontColor = this.characterFormat.fontColor;\n var fillColor = fontColor ? HelperMethods.getColor(fontColor) : '#000000';\n ctx.globalAlpha = 1;\n // Get character format copied from selection format\n var format = this.owner.editor.copyInsertFormat(new WCharacterFormat(), false);\n var heightInfo = this.documentHelper.textHelper.getHeight(format);\n var pageTop = this.getPageTop(page);\n var descent = heightInfo.Height - heightInfo.BaselineOffset;\n top = this.documentHelper.render.getUnderlineYPosition(widget) + top + 4 - descent;\n this.documentHelper.render.renderDashLine(ctx, left, (pageTop - this.viewer.containerTop) + (top * this.documentHelper.zoomFactor), width, fillColor, true);\n };\n /**\n * Add Selection highlight inside table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget, page) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectedWidgetInfo = this.selectedWidgets.get(tableCellWidget);\n var selectedWidgetInfoCollection = undefined;\n if (selectedWidgetInfo instanceof SelectionWidgetInfo) {\n selectedWidgetInfoCollection = [];\n selectedWidgetInfoCollection.push(selectedWidgetInfo);\n }\n else {\n selectedWidgetInfoCollection = selectedWidgetInfo;\n }\n if (!isNullOrUndefined(selectedWidgetInfoCollection)) {\n for (var i = 0; i < selectedWidgetInfoCollection.length; i++) {\n var left = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].left, 1);\n var top_1 = this.documentHelper.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].width);\n var height = this.documentHelper.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n if (isNullOrUndefined(page)) {\n page = this.owner.selection.getPage(tableCellWidget);\n }\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var selectedWidget = this.selectedWidgets.get(widget);\n var selectedWidgetCollection = undefined;\n if (selectedWidget instanceof SelectionWidgetInfo) {\n selectedWidgetCollection = [];\n selectedWidgetCollection.push(selectedWidget);\n }\n else {\n selectedWidgetCollection = selectedWidget;\n }\n if (!isNullOrUndefined(selectedWidgetCollection)) {\n for (var i = 0; i < selectedWidgetCollection.length; i++) {\n width = selectedWidgetCollection[i].width;\n left = selectedWidgetCollection[i].left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.documentHelper.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.documentHelper.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.documentHelper.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.documentHelper.selectionCanvas.height) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n }\n }\n };\n /**\n * Selects Current word\n *\n * @param excludeSpace\n * @returns {void}\n */\n Selection.prototype.selectCurrentWord = function (excludeSpace) {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, excludeSpace ? excludeSpace : false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Selects current paragraph\n *\n * @returns {void}\n */\n Selection.prototype.selectParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Selects current line.\n *\n * @returns {void}\n */\n Selection.prototype.selectLine = function () {\n if (!isNullOrUndefined(this.start)) {\n this.moveToLineStart();\n this.handleShiftEndKey();\n }\n };\n /**\n * Moves selection to start of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentStart = function () {\n this.handleControlHomeKey();\n };\n /**\n * Moves selection to end of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentEnd = function () {\n this.handleControlEndKey();\n };\n /**\n * Moves selection to current paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphStart = function () {\n if (this.isForward) {\n this.start.paragraphStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.paragraphStartInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to current paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphEnd = function () {\n if (this.isForward) {\n this.start.moveToParagraphEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.moveToParagraphEndInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to next line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextLine = function () {\n this.moveDown();\n };\n /**\n * Moves selection to previous line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousLine = function () {\n this.moveUp();\n };\n /**\n * Moves selection to next character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextCharacter = function () {\n this.handleRightKey();\n };\n /**\n * Moves selection to previous character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousCharacter = function () {\n this.handleLeftKey();\n };\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extends selection to paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(true, formField);\n }\n }\n };\n /**\n * Move to next paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * To navigate to next footnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.nextFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var nextFootnoteElement = this.documentHelper.footnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextFootnoteElement)) {\n nextFootnoteElement = footNoteElement;\n }\n var start = this.start.clone();\n var end = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var referenceElement = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < referenceElement.bodyWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === nextFootnoteElement) {\n start.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n end.setPositionInternal(start);\n this.selectRange(start, end);\n }\n }\n }\n }\n };\n /**\n * To navigate to previous footnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.previousFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var previousFootnote = this.documentHelper.footnoteCollection[indexCount - 1];\n if (isNullOrUndefined(previousFootnote)) {\n previousFootnote = footNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var footnote = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < footnote.bodyWidgets.length; j++) {\n var element = (footnote.bodyWidgets[j]).footNoteReference;\n if (element === previousFootnote) {\n startPosition.setPositionParagraph(footnote.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n }\n };\n /**\n * To navigate to next Endnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.nextEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var nextEndnote = this.documentHelper.endnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextEndnote)) {\n nextEndnote = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var endnoteElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < endnoteElement.childWidgets.length; j++) {\n var element = (endnoteElement.bodyWidgets[j]).footNoteReference;\n if (element === nextEndnote) {\n startPosition.setPositionParagraph(endnoteElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * To navigate to previous Endnote from current selection\n *\n * @returns {void}\n */\n Selection.prototype.previousEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var inline = this.documentHelper.endnoteCollection[indexCount - 1];\n if (isNullOrUndefined(inline)) {\n inline = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var referenceElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < referenceElement.childWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === inline) {\n startPosition.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Move to previous text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(false, formField);\n }\n }\n };\n /**\n * Move to previous paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to previous line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to line end\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to line start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n // To select Paragraph mark similar to MS WORD\n if (this.start.paragraph === this.end.paragraph && this.start.offset === this.start.currentWidget.getEndOffset()\n && this.isParagraphLastLine(this.start.currentWidget) && this.isParagraphFirstLine(this.end.currentWidget)) {\n this.start.setPositionParagraph(this.start.currentWidget, this.start.offset + 1);\n }\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveUp = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(false);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n this.start.moveUp(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveDown = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(true);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n *\n * @private\n * @returns {void}\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n while (lastCell.childWidgets.length === 0 && !isNullOrUndefined(lastCell.previousSplitWidget)) {\n lastCell = lastCell.previousSplitWidget;\n }\n return lastCell.childWidgets[lastCell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Moves selection to start of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Moves selection to end of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getPageTop = function (page) {\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition, isMouseLeave) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.documentHelper.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex && !isMouseLeave) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation\n //Document\n /**\n * Get document start position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.documentHelper.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[0].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[0];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selection.selectContent(documentEnd, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selection.selectContent(documentStart, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStartInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEndInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordEndInternal(false);\n }\n else {\n this.extendToWordStartInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordStartInternal(false);\n }\n else {\n this.extendToWordEndInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleLeftKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.moveNextPosition();\n }\n else {\n this.movePreviousPosition();\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleRightKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.movePreviousPosition();\n }\n else {\n this.moveNextPosition();\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleSpaceBarKey = function () {\n if (this.owner.documentHelper.isDocumentProtected && this.owner.documentHelper.protectionType === 'FormFieldsOnly'\n && this.getFormFieldType() === 'CheckBox') {\n this.owner.editor.toggleCheckBoxFormField(this.getCurrentFormField());\n }\n };\n /**\n * Handles tab key.\n *\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n * @returns {void}\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (!this.owner.documentHelper.isDocumentProtected && !(this.documentHelper.protectionType === 'FormFieldsOnly')) {\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n var selection = this.documentHelper.selection;\n var currentPara = start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n isFirstParaForList = this.owner.editorModule.isFirstParaForList(selection, currentPara);\n if (isFirstParaForList) {\n if (isShiftTab) {\n this.owner.editorModule.updateListLevelIndent(-this.documentHelper.defaultTabWidth, currentPara);\n }\n else {\n this.owner.editorModule.updateListLevelIndent(this.documentHelper.defaultTabWidth, currentPara);\n }\n }\n else {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n }\n else if (!this.owner.isReadOnlyMode && !this.documentHelper.isFormFillProtectedMode) {\n this.owner.editorModule.handleTextInput('\\t');\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.formFields.length > 0) {\n this.selectPrevNextFormField(!isShiftTab);\n }\n this.checkForCursorVisibility();\n };\n // returns current field in FormFill mode\n Selection.prototype.getFormFieldInFormFillMode = function () {\n var currentStart = this.owner.selection.start;\n var formField;\n for (var i = (this.documentHelper.formFields.length - 1); i >= 0; i--) {\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistBefore(currentStart)) {\n formField = this.documentHelper.formFields[i];\n break;\n }\n else if (i === 0) {\n formField = this.documentHelper.formFields[(this.documentHelper.formFields.length - 1)];\n }\n }\n return formField;\n };\n // Navigates & Selects next form field\n Selection.prototype.selectPrevNextFormField = function (forward, formField) {\n if (this.documentHelper.isFormFillProtectedMode) {\n if (!formField) {\n formField = this.getCurrentFormField();\n }\n var index = this.documentHelper.formFields.indexOf(formField);\n if (forward) {\n for (var i = index;; i++) {\n if (i === (this.documentHelper.formFields.length - 1)) {\n i = 0;\n }\n else {\n i = i + 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i - 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n else {\n for (var i = index;; i--) {\n if (i === 0) {\n i = (this.documentHelper.formFields.length - 1);\n }\n else {\n i = i - 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i + 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.navigateToNextFormField = function () {\n var currentStart = this.owner.selection.end;\n var currentFormField;\n for (var i = 0; i < this.documentHelper.formFields.length; i++) {\n currentFormField = this.documentHelper.formFields[i];\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistAfter(currentStart)) {\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[i]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[i]);\n }\n break;\n }\n else if (i === (this.documentHelper.formFields.length - 1)) {\n currentFormField = this.documentHelper.formFields[0];\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[0]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[0]);\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTextElementStartOfField = function (formField) {\n var fieldSeparator = formField.fieldSeparator;\n var element = fieldSeparator.nextElement;\n if (element) {\n while (!(element instanceof TextElementBox)) {\n element = element.nextElement;\n }\n var offset = formField.line.getOffset(element, 0);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, element, 0, point);\n }\n };\n Selection.prototype.triggerFormFillEvent = function (isKeyBoardNavigation) {\n var previousField = this.previousSelectedFormField;\n var currentField = this.getCurrentFormField();\n var previousFieldData;\n var currentFieldData;\n if (currentField !== previousField && previousField && previousField.formFieldData instanceof TextFormField\n && previousField.formFieldData.type === 'Text') {\n if (previousField.formFieldData.format !== '' && !this.isFormatUpdated) {\n // Need to handle update form field format\n this.owner.editor.applyFormTextFormat(previousField);\n }\n previousFieldData = { 'fieldName': previousField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(previousField) };\n this.owner.trigger(afterFormFieldFillEvent, previousFieldData);\n }\n if (currentField !== previousField && currentField && ((currentField.formFieldData instanceof TextFormField\n && currentField.formFieldData.type === 'Text' && isKeyBoardNavigation == undefined) || (((currentField.formFieldData instanceof TextFormField && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline') || (currentField.formFieldData instanceof CheckBoxFormField)) && isKeyBoardNavigation))) {\n currentFieldData = { 'fieldName': currentField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(currentField) };\n this.owner.trigger(beforeFormFieldFillEvent, currentFieldData);\n }\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below\n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraphInternal(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.getFirstParagraphBlock(table);\n var lastPara = this.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Selects the entire document.\n *\n * @returns {void}\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n this.documentHelper.skipScrollToPosition = true;\n var container = this.getContainerWidget(this.start.paragraph);\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else if (this.isInShape) {\n var textFrame = this.getCurrentTextFrame();\n documentStart = this.setPositionForBlock(textFrame.firstChild, true);\n documentEnd = this.setPositionForBlock(textFrame.lastChild, false);\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n var i = void 0;\n var j = void 0;\n var pageLength = this.documentHelper.pages.length;\n for (i = 0; i <= pageLength - 1; i++) {\n if (isNullOrUndefined(this.documentHelper.pages[i].footnoteWidget)) {\n continue;\n }\n else {\n documentStart = this.setPositionForBlock(this.documentHelper.pages[i].footnoteWidget.bodyWidgets[0].firstChild, true);\n break;\n }\n }\n for (j = pageLength - 1; j >= 0; j--) {\n if (isNullOrUndefined(this.documentHelper.pages[j].footnoteWidget)) {\n continue;\n }\n else {\n var child = this.documentHelper.pages[j].footnoteWidget.bodyWidgets.length;\n var lastChild = this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets.length;\n documentEnd = this.setPositionForBlock(this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets[lastChild - 1], false);\n break;\n }\n }\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n var endNotes = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(endNotes.bodyWidgets[0].firstChild, true);\n documentEnd = this.setPositionForBlock(endNotes.bodyWidgets[endNotes.bodyWidgets.length - 1].firstChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document.\n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extends selection backward.\n *\n * @returns {void}\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveForward();\n }\n else {\n this.end.moveBackward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection forward.\n *\n * @returns {void}\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveBackward();\n }\n else {\n this.end.moveForward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extends selection to word start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordStart = function () {\n this.extendToWordStartInternal(false);\n };\n /**\n * Extends selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEnd = function () {\n this.extendToWordEndInternal(false);\n };\n /**\n * Extends selection to word start\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEndInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to next line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n *\n * @private\n * @returns {string}\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, undefined, 0, includeObject);\n }\n else {\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n * @param block\n * @param offset\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n if (block instanceof BodyWidget && !isNullOrUndefined(block.containerWidget) && block.containerWidget instanceof FootNoteWidget) {\n var ind = block.containerWidget.bodyWidgets.indexOf(block);\n index = ind + ';' + offset;\n }\n else {\n index = block.index + ';' + offset;\n }\n }\n if (block instanceof TextFrame) {\n var indexInOwner = block.containerShape.line.getOffset(block.containerShape, 1);\n index = 'S' + ';' + indexInOwner + ';' + offset;\n return this.getHierarchicalIndex(block.containerShape.paragraph, index);\n }\n if (block instanceof FootNoteWidget) {\n // index = block.index + ';' + index;\n //block = block.containerWidget;\n var hfString = block.footNoteType === 'Footnote' ? 'FN' : 'EN';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndexByPosition = function (position) {\n var info = this.getParagraphInfo(position);\n return this.getHierarchicalIndex(info.paragraph, info.offset.toString());\n };\n /**\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getTextPosBasedOnLogicalIndex = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Get offset value to update in selection\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfoBasedOnParagraph = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Gets body widget based on position.\n *\n * @private\n * @returns {BlockContainer}\n */\n Selection.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n else if (value === 'FN' || value === 'EN') {\n return this.getFootNoteWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Selection.prototype.getFootNoteWidget = function (position) {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n var footNote = value1 === 'FN';\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n var page = this.documentHelper.pages[index1];\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n if (footNote) {\n return page.footnoteWidget.bodyWidgets[index1];\n }\n else {\n return page.endnoteWidget.bodyWidgets[index1];\n }\n };\n Selection.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.documentHelper.pages[index];\n var headerFooterWidget;\n if (isHeader) {\n headerFooterWidget = page.headerWidget;\n }\n else {\n headerFooterWidget = page.footerWidget;\n }\n if (!isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget.page = page;\n }\n return headerFooterWidget;\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Selection.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[0];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.childWidgets.length > 0 && bodyWidget.firstChild.index <= blockIndex &&\n bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n return undefined;\n };\n Selection.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n value = position.index.substring(0, 1);\n if (value === 'S') {\n position.index = position.index.substring(1).replace(';', '');\n var indexInOwner = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var paraIndex = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var shape = childWidget.getInline(parseInt(indexInOwner), 0).element;\n childWidget = shape.textFrame.childWidgets[paraIndex];\n }\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.documentHelper.selection.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.documentHelper.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {Widget}\n */\n Selection.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * Get logical offset of paragraph.\n *\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.documentHelper.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * @private\n * @returns {ListTextElementBox}\n */\n Selection.prototype.getListTextElementBox = function (paragarph) {\n if (isNullOrUndefined(paragarph)) {\n return undefined;\n }\n var listTextElement;\n if (!paragarph.isEmpty()) {\n var lineWidget = paragarph.childWidgets[0];\n if (lineWidget.children.length > 1) {\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n listTextElement = lineWidget.children[0];\n }\n }\n }\n return listTextElement;\n };\n /**\n * @private\n * @returns {WListLevel}\n */\n Selection.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels)) {\n return this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n text = text + '\\r' + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n *\n * @private\n * @param fieldBegin\n * @returns {string}\n */\n Selection.prototype.getFieldCode = function (fieldBegin) {\n var fieldCode = '';\n if (!(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n * @returns {FieldElementBox}\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n *\n * @private\n * @returns {TableWidget}\n */\n Selection.prototype.getFirstParagraphInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if ((!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox)\n || inline instanceof ShapeElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n *\n * @private\n * @returns {TableWidget}\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n * @param element\n * @returns\n */\n Selection.prototype.isElementInSelection = function (element, isStart) {\n var offset = element.line.getOffset(element, isStart ? 0 : 1);\n var elemPosition = new TextPosition(this.owner);\n elemPosition.setPositionParagraph(element.line, offset);\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n return ((elemPosition.isExistAfter(start) || elemPosition.isAtSamePosition(start))\n && (elemPosition.isExistBefore(end) || elemPosition.isAtSamePosition(end)));\n };\n /**\n * @private\n */\n Selection.prototype.isSelectionInsideElement = function (element) {\n //Handled for spellcheck\n if (this.isEmpty) {\n var startOffset = element.line.getOffset(element, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, startOffset);\n var endOffset = element.line.getOffset(element, element.length);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(element.line, endOffset);\n return ((this.start.isExistAfter(startPosition) || this.start.isAtSamePosition(startPosition))\n && (this.start.isExistBefore(endPosition) || this.start.isAtSamePosition(endPosition)));\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n if (startPage === endPage && start.containerWidget.containerWidget instanceof FootNoteWidget && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n var startindex = this.documentHelper.pages[startPage].footnoteWidget.bodyWidgets.indexOf(start.containerWidget);\n var endindex = this.documentHelper.pages[endPage].footnoteWidget.bodyWidgets.indexOf(block.containerWidget);\n return startindex < endindex;\n }\n else {\n return startPage < endPage;\n }\n }\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) || (start.containerWidget instanceof FootNoteWidget && block.containerWidget instanceof FootNoteWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start)\n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <=\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline, isRetrieve) {\n if (currentInline.line === inline.line) {\n var selection = this.documentHelper.selection;\n if (isRetrieve) {\n return currentInline.line.children.indexOf(currentInline) >=\n inline.line.children.indexOf(inline);\n }\n else if (currentInline === inline && selection.start.offset !== selection.end.offset) {\n return currentInline.line.children.indexOf(currentInline) ===\n inline.line.children.indexOf(inline);\n }\n else {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n var nextPage = headerFooter.page.nextPage;\n var headerWidget = nextPage.headerWidget;\n headerWidget.page = nextPage;\n if (nextPage.footerWidget) {\n nextPage.footerWidget.page = nextPage;\n }\n nextBlock = headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n var previousPage = headerFooter.page.previousPage;\n var footerWidget = previousPage.footerWidget;\n footerWidget.page = previousPage;\n if (previousPage.headerWidget) {\n previousPage.headerWidget.page = previousPage;\n }\n previousBlock = footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraphBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo) {\n var length = 0;\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo);\n }\n break;\n }\n length += this.getLineLength(line);\n }\n return length;\n };\n /**\n * Get Line length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getLineLength = function (line, elementInfo) {\n var length = 0;\n var bidi = line.paragraph.bidi;\n for (var i = !bidi ? 0 : line.children.length - 1; bidi ? i > -1 : i < line.children.length; bidi ? i-- : i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof ShapeElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof CommentCharacterElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ContentControl) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n *\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell.\n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n *\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n *\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n *\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n *\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get first paragraph in last row\n *\n * @private\n */\n Selection.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get previous valid offset\n *\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n var value = 0;\n var bidi = paragraph.paragraphFormat.bidi;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n *\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n // if (!line.paragraph.paragraphFormat.bidi) {\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n if (offset === count + inline.length && inline instanceof FieldElementBox &&\n inline.fieldType === 1 && inline.previousNode instanceof ImageElementBox) {\n return offset;\n }\n count += inline.length;\n }\n // } else {\n // if (offset !== this.getLineLength(line)) {\n // offset = line.getInlineForOffset(offset, false, undefined, false, false, true).index;\n // }\n // }\n return offset;\n };\n /**\n * Get paragraph mark size info\n *\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.documentHelper.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.documentHelper.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += this.documentHelper.layout.getAfterSpacing(paragraph);\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline, line.paragraph.bidi);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n *\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded && (inline instanceof ImageElementBox || inline instanceof ShapeElementBox)) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index\n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.documentHelper.isTouchInput) {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n }\n else {\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n }\n };\n Selection.prototype.showResizerForShape = function () {\n var shape = this.getCurrentTextFrame().containerShape;\n this.owner.imageResizerModule.positionImageResizer(shape);\n this.owner.imageResizerModule.showImageResizer();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlight = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var width = 0;\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBoxCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBoxCollection && elementBoxCollection.length > 1) {\n for (var i = 0; i < elementBoxCollection.length; i++) {\n var element = elementBoxCollection[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox\n && selectionEndIndex > element.length) {\n var charFormat = element.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi && !elementIsRTL) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true);\n }\n }\n else { // Need to handle the Paragraph mark highlighting.\n if (endElement instanceof TextElementBox && selectionEndIndex > endElement.length) {\n var charFormat = endElement.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n // Since isRTLText is truo, so the right is considered as left\n if (!paragraph.bidi && isRtlText) {\n right += paragraphMarkWidth;\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, right, top, true);\n // Highlight the paragraph mark. \n right += endElement.width;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, right, top, true);\n }\n else if (paragraph.bidi && !isRtlText) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false);\n }\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property. \n this.createHighlightBorder(startLineWidget, width, paragraph.bidi ? right : left, top, false);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n elementIsRTL = false;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n }\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(startLineWidget, element, index);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true);\n }\n // Highlight the Paragrph mark for last line.\n if (startLineWidget.isLastLine()) {\n var charFormat = elementCollection[elementCollection.length - 1].line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi) {\n // The paragraph mark will be at the left most end.\n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n }\n else { // The paragraph mark will at right most end.\n left = elementIsRTL ? startLineWidget.paragraph.x + this.getWidth(startLineWidget, false) : right;\n }\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n if (this.isHideSelection(paragraph)) {\n this.isHighlightNext = false;\n return;\n }\n this.isHighlightNext = true;\n this.hightLightNextParagraph = paragraph;\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.isHighlightNext = false;\n this.highlight(block, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /**\n * highlight selected table\n *\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) { //Selection end is not inside the current table.\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n *\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n *\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n *\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n *\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n *\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n *\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n *\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n *\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n *\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * @private\n * @return\n */\n Selection.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.paragraphFormat.listLevelNumber <= 0) ? 0 : this.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n /**\n * Get Next paragraph from cell\n *\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell.\n cell = cell.nextRenderedWidget;\n var block = cell.firstChild;\n if (block) {\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n *\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n *\n * @private\n */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable, start, end);\n };\n /**\n * Get previous valid element\n *\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n *\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n if (inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n *\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n var nextNode = inline.nextNode;\n if (inline.length === index && (nextNode instanceof FieldElementBox\n || (!(inline instanceof ImageElementBox) && (nextNode instanceof BookmarkElementBox || nextNode instanceof CommentCharacterElementBox)))) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if ((nextInline instanceof FieldElementBox && nextInline.fieldType === 1)\n || (nextInline instanceof BookmarkElementBox && nextInline.bookmarkType === 1)\n || (nextInline instanceof CommentCharacterElementBox && nextInline.commentType === 1)) {\n inline = nextInline;\n index = this.documentHelper.isFormFillProtectedMode ? 0 : 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n *\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1 || inline instanceof CommentCharacterElementBox) {\n element = inline;\n }\n else {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode)) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox && element.textWrappingStyle === 'Inline') {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.documentHelper.textHelper.getHeight(format);\n if (element.margin.top + element.height - measureObj.BaselineOffset > 0) {\n top += element.margin.top + element.height - measureObj.BaselineOffset;\n }\n }\n else if (!(element instanceof FieldElementBox || inline instanceof CommentCharacterElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n *\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n *\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n *\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox || currentInline instanceof CommentCharacterElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n *\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n *\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.documentHelper.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += this.documentHelper.layout.getAfterSpacing(paragarph);\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.documentHelper.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = format.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.documentHelper.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.documentHelper.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n *\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return { 'element': inline, 'index': inlineIndex };\n }\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n *\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n *\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n *\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof TextFrame) {\n var shape = widget.containerWidget.containerShape;\n if (shape.line) {\n page = this.getPage(shape.line.paragraph);\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n //Body Widget \n Selection.prototype.getLineWidgetBodyWidget = function (widget, point) {\n var bodyWgt = widget;\n if (bodyWgt instanceof BlockContainer) {\n for (var x = 0; x < bodyWgt.floatingElements.length; x++) {\n var floatWidget = bodyWgt.floatingElements[x];\n if (floatWidget instanceof TableWidget) {\n var floatWidgetWidth = floatWidget.getTableCellWidth();\n if (point.x <= floatWidget.x + floatWidgetWidth && point.x >= floatWidget.x\n && point.y <= floatWidget.y + floatWidget.height && point.y >= floatWidget.y) {\n return this.getLineWidgetTableWidget(floatWidget, point);\n }\n }\n }\n }\n if (widget instanceof FootNoteWidget) {\n for (var j = 0; j < widget.bodyWidgets.length; j++) {\n for (var k = 0; k < widget.bodyWidgets[j].childWidgets.length; k++) {\n var footChild = widget.bodyWidgets[j].childWidgets[k];\n if (footChild instanceof Widget && footChild.y <= point.y\n && (footChild.y + footChild.height) >= point.y) {\n if (footChild instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(footChild, point);\n }\n else {\n return this.getLineWidgetTableWidget(footChild, point);\n }\n }\n }\n }\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof FootNoteWidget) {\n return childWidget[i];\n }\n else {\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(childWidget, point);\n }\n else {\n var table = childWidget;\n if (table.wrapTextAround) {\n continue;\n }\n return this.getLineWidgetTableWidget(table, point);\n }\n }\n }\n }\n var line = undefined;\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n line = this.getLineWidgetTableWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n var line = childWidgets[i];\n top += line.marginTop;\n var lineTotalHeight = line.height;\n if (line.nextLine && line.nextLine.marginTop > 0) {\n lineTotalHeight += line.nextLine.marginTop;\n }\n if (top <= point.y\n && (top + lineTotalHeight) >= point.y) {\n return line;\n }\n top += line.height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n if (widget.paragraphFormat.bidi && endLine.children.indexOf(endElement) > 0) {\n endElement = endLine.children[0];\n }\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n else {\n top += line.marginTop;\n }\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = 0;\n // highlighting approach for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBoxCollection = this.getElementsBackward(line, endElement, endElement, widget.bidi);\n for (var i_2 = 0; i_2 < elementBoxCollection.length; i_2++) {\n var element = elementBoxCollection[i_2];\n var elementIsRTL = false;\n if (element === endElement) {\n right = this.getLeftInternal(line, element, endIndex);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(line, element, index);\n }\n left = this.getLeftInternal(line, element, 0);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox && endIndex > element.length) {\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(element.line.paragraph.characterFormat).Width;\n if (!widget.bidi && elementIsRTL) {\n right += paragraphMarkWidth;\n }\n else if (widget.bidi && !elementIsRTL) { // Paragrph and Selection ends in normal text\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(line, width, left, top, true);\n // Highlight the paragraph mark of Bidi paragrph.\n left = this.getLineStartLeft(line) - paragraphMarkWidth;\n this.createHighlightBorder(line, paragraphMarkWidth, left, top, true);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(line, width, elementIsRTL ? right : left, top, true);\n }\n return;\n }\n else {\n right = this.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(line, width, isRtlText ? right : left, top, false);\n return;\n }\n }\n else {\n width = this.getWidth(line, true) - (left - widget.x);\n // Highlight the paragrph mark for Bidi paragrph.\n if (widget.bidi && line.isLastLine()) {\n left -= this.documentHelper.textHelper.getParagraphMarkSize(widget.characterFormat).Width;\n }\n this.createHighlightBorder(line, width, left, top, false);\n top += line.height;\n }\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n if (childWidget.rowFormat.heightType === 'Exactly' &&\n (childWidget.y + HelperMethods.convertPointToPixel(childWidget.rowFormat.height) < point.y)) {\n continue;\n }\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n *\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n *\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n *\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n var isRtlText = false;\n var isParaBidi = false;\n left = elementValues.left;\n var children = widget.renderedElements;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (children.length > 0) {\n inline = children[children.length - 1];\n index = inline.length;\n }\n index++;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left || (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n var isInInline = false;\n if (widget.paragraph.floatingElements.length > 0) {\n isInInline = this.documentHelper.checkPointIsInLine(widget, caretPosition);\n }\n for (var i = children.indexOf(element); i < children.length; i++) {\n element = children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n if (this.documentHelper.isInShapeBorder(element, caretPosition) &&\n !this.documentHelper.isSelectionChangedOnMouseMoved && !isInInline) {\n left = element.x;\n top = element.y;\n break;\n }\n continue;\n }\n var isCurrentParaBidi = false;\n if (element instanceof ListTextElementBox || element instanceof TextElementBox) {\n isCurrentParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x < left + element.margin.left + element.width + element.padding.left || i === children.length - 1\n || ((children[i + 1] instanceof ListTextElementBox) && isCurrentParaBidi)) {\n break;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n if (element instanceof TextElementBox) {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x > left + element.margin.left + element.width + element.padding.left) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n if (isRtlText && isParaBidi) {\n index = 0;\n }\n if ((element instanceof TextElementBox && (element.text !== \"\\v\" || element.text !== '\\f')) || includeParagraphMark) {\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n else if (element instanceof TextElementBox) {\n if (element instanceof TextElementBox && isRtlText) {\n left += element.width + element.padding.left;\n }\n var x = 0;\n if (isRtlText) {\n x = (left + element.margin.left) - caretPosition.x;\n }\n else {\n x = caretPosition.x - left - element.margin.left - element.padding.left;\n }\n left += (element.margin.left + element.padding.left);\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width + element.padding.left;\n }\n else {\n width = this.documentHelper.textHelper.getWidth(element.text.substr(0, i), element.characterFormat);\n element.trimEndWidth = width;\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n charIndex = i;\n }\n else {\n if (isRtlText) {\n left -= prevWidth;\n }\n else {\n left += prevWidth;\n }\n charIndex = i - 1;\n if (i === 1 && element !== children[0] && !(children[0] instanceof ShapeBase &&\n children[0].textWrappingStyle !== 'Inline')) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox) && !isRtlText) {\n element = children[curIndex - 1];\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox || element instanceof ShapeElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += (element.margin.left + element.width + element.padding.left);\n }\n else if (element !== children[0] && !isImageSelected) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox)) {\n element = children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && (element.text === '\\v' || element.text === '\\f')) {\n index = 0;\n }\n }\n else {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n if (element instanceof TextElementBox && (isParaBidi || isRtlText) && caretPosition.x < left + element.margin.left + element.width + element.padding.left) {\n index = this.getTextLength(element.line, element) + element.length;\n }\n else {\n index = this.getTextLength(element.line, element);\n }\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.documentHelper.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = element.height;\n if (element instanceof BookmarkElementBox && !this.documentHelper.layout.hasValidElement(element.line.paragraph)) {\n height = textMetrics.Height; //after text helper class\n }\n top += element.margin.top + height - textMetrics.BaselineOffset;\n }\n inline = element;\n if (inline instanceof FieldElementBox && inline.fieldType === 2 && !isNullOrUndefined(inline.fieldBegin)) {\n inline = inline.fieldBegin;\n index = 0;\n }\n if (inline instanceof EditRangeEndElementBox) {\n index = 0;\n }\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = isNullOrUndefined(inline.nextNode)\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width + element.padding.left;\n left += width;\n index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /**\n * @private\n */\n Selection.prototype.checkAllFloatingElements = function (widget, caretPosition) {\n var bodyWidget;\n var isShapeSelected = false;\n var isInShapeBorder = false;\n var floatElement;\n if (!isNullOrUndefined(widget)) {\n bodyWidget = widget.paragraph.bodyWidget;\n isShapeSelected = false;\n isInShapeBorder = false;\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n if (bodyWidget.floatingElements[i] instanceof TableWidget) {\n continue;\n }\n floatElement = bodyWidget.floatingElements[i];\n if (caretPosition.x < floatElement.x + floatElement.margin.left + floatElement.width && caretPosition.x > floatElement.x\n && caretPosition.y < floatElement.y + floatElement.margin.top + floatElement.height && caretPosition.y > floatElement.y) {\n isShapeSelected = true;\n if (this.documentHelper.isInShapeBorder(floatElement, caretPosition)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': caretPosition,\n 'isShapeSelected': isShapeSelected,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n /**\n * Get text length if the line widget\n *\n * @private\n */\n Selection.prototype.getTextLength = function (widget, element) {\n var length = 0;\n var renderedElement = widget.renderedElements;\n var count = renderedElement.indexOf(element);\n if (renderedElement.length > 0 && renderedElement[0] instanceof ListTextElementBox) {\n if (renderedElement[1] instanceof ListTextElementBox) {\n count -= 2;\n }\n else {\n count -= 1;\n }\n }\n for (var i = 1; i < count; i++) {\n length += renderedElement[i].length;\n }\n return length;\n };\n /**\n * Get Line widget left\n *\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n var renderedElements = widget.renderedElements;\n for (var i = 0; i < renderedElements.length; i++) {\n var element = renderedElements[i];\n if (element instanceof ListTextElementBox && !paragraphFormat.bidi) { //after list implementation\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n *\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n var line = widget.paragraph.childWidgets[i];\n top = (top + line.height + line.marginTop);\n }\n top += widget.marginTop;\n return top;\n };\n /**\n * Get first element the widget\n *\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget) && !widget.paragraph.paragraphFormat.bidi) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n var renderedChild = widget.renderedElements;\n for (var i = 0; i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (element instanceof ListTextElementBox || element instanceof CommentCharacterElementBox) {\n if (widget.paragraph.paragraphFormat.bidi) {\n left += element.margin.left;\n element = undefined;\n break;\n }\n left += element.margin.left + element.width;\n element = undefined;\n // }\n // else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n // || (element.nextNode instanceof FieldElementBox && ((element.nextNode as FieldElementBox).fieldType === 2))) {\n // element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n *\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n *\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @param widget\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n *\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n width += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var elementBox = widget.children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += (elementBox.margin.left + elementBox.width + elementBox.padding.left);\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n *\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var renderedWidget = widget.renderedElements;\n var count = renderedWidget.indexOf(elementBox);\n if ((renderedWidget.length === 1 && renderedWidget[0] instanceof ListTextElementBox) || (renderedWidget.length === 2\n && renderedWidget[0] instanceof ListTextElementBox && renderedWidget[1] instanceof ListTextElementBox)) {\n count = renderedWidget.length;\n }\n for (var i = 0; i < count; i++) {\n var widgetInternal = renderedWidget[i];\n if (widgetInternal instanceof ShapeBase && widgetInternal.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (i === 1 && widgetInternal instanceof ListTextElementBox) {\n left += widgetInternal.width;\n }\n else if (widgetInternal instanceof TabElementBox && elementBox === widgetInternal) {\n left += widgetInternal.margin.left;\n }\n else {\n left += widgetInternal.margin.left + widgetInternal.width + widgetInternal.padding.left;\n }\n }\n var isRtlText = false;\n var isParaBidi = widget.paragraph.bidi;\n if (!isNullOrUndefined(elementBox)) {\n isRtlText = (elementBox.characterRange & CharacterRangeType.RightToLeft) === CharacterRangeType.RightToLeft;\n isParaBidi = elementBox.line.paragraph.paragraphFormat.bidi;\n left += (elementBox.margin.left + elementBox.padding.left);\n if (elementBox instanceof ShapeBase && !isNullOrUndefined(elementBox.nextElement)) {\n left += (elementBox.nextElement.margin.left + elementBox.nextElement.padding.left);\n }\n if (isRtlText || (this.documentHelper.moveCaretPosition === 1 && !isRtlText && isParaBidi)) {\n left += elementBox.width;\n }\n }\n var width = 0;\n if (elementBox instanceof TextElementBox) {\n if ((this.documentHelper.moveCaretPosition !== 0) && (isParaBidi || isRtlText)) {\n if ((isRtlText && isParaBidi && this.documentHelper.moveCaretPosition === 2)\n || (isRtlText && !isParaBidi && this.documentHelper.moveCaretPosition === 1)) {\n left -= elementBox.width;\n }\n this.documentHelper.moveCaretPosition = 0;\n return left;\n }\n if (index === elementBox.length && !isRtlText) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n if (isRtlText) {\n left -= elementBox.width + width;\n }\n else {\n left += elementBox.width + width;\n }\n }\n else {\n width = this.documentHelper.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat);\n elementBox.trimEndWidth = width;\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n }\n this.documentHelper.moveCaretPosition = 0;\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n left += elementBox.width;\n }\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.documentHelper.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n var childLen = widget.children.length;\n for (var i = 0; i < childLen; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true, true);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraphInternal = function (paragraph, positionAtStart) {\n var line;\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(paragraph.firstChild)) {\n line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.documentHelper.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged, isKeyBoardNavigation) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (this.isModifyingSelectionInternally) {\n return;\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.documentHelper.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true);\n }\n if (this.documentHelper.restrictEditingPane.isShowRestrictPane && !this.skipEditRangeRetrieval) {\n this.documentHelper.restrictEditingPane.updateUserInformation();\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n this.documentHelper.updateFocus();\n if (this.documentHelper.isInlineFormFillProtectedMode && isSelectionChanged) {\n this.triggerFormFillEvent(isKeyBoardNavigation);\n this.previousSelectedFormField = this.getCurrentFormField();\n }\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n if (!this.isImageSelected) {\n this.imageFormat.clearImageFormat();\n }\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n /**\n * Returns the context type of previous character or element.\n * @param isElement - Decides whether to get previous context type from element or character. By default, character.\n */\n Selection.prototype.getPreviousContextType = function (isElement) {\n var contextType;\n var start = this.start;\n if (start.offset > 0) {\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement) {\n element = element.previousElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset - 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n }\n return undefined;\n };\n /**\n * Returns the context type of next character or element.\n * @param isElement - Decides whether to get next context type from element or character. By default, character.\n */\n Selection.prototype.getNextContextType = function (isElement) {\n var contextType;\n var start = this.start;\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement && element.nextElement) {\n element = element.nextElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset + 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n };\n Selection.prototype.getContextElement = function (element) {\n if (element instanceof TextElementBox) {\n return 'Text';\n }\n else if (element instanceof FieldElementBox || element instanceof FieldTextElementBox) {\n return 'Field';\n }\n else if (element instanceof BookmarkElementBox) {\n return 'Bookmark';\n }\n else if (element instanceof ImageElementBox) {\n return 'Image';\n }\n else if (element instanceof ShapeElementBox) {\n return 'Shape';\n }\n else if (element instanceof CommentElementBox || element instanceof CommentCharacterElementBox) {\n return 'Comment';\n }\n else if (element instanceof ListTextElementBox) {\n return 'List';\n }\n else if (element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox) {\n return 'EditRange';\n }\n else {\n return undefined;\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n var currentRevision = this.getCurrentRevision();\n if (!isNullOrUndefined(currentRevision) && this.owner.showRevisions) {\n this.owner.trackChangesPane.currentSelectedRevision = currentRevision[0];\n this.owner.commentReviewPane.selectReviewTab('Changes');\n this.owner.notify('reviewPane', { comment: this.owner.showComments, changes: true, isUserClosed: false });\n }\n else if (!isNullOrUndefined(this.owner.trackChangesPane.currentSelectedRevision)) {\n this.owner.trackChangesPane.currentSelectedRevision = undefined;\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n Selection.prototype.addItemRevisions = function (currentItem, isFromAccept) {\n for (var i = 0; i < currentItem.revisions.length; i++) {\n var currentRevision = currentItem.revisions[i];\n this.selectRevision(currentRevision);\n if (isFromAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.hasRevisions = function () {\n if (this.getCurrentRevision()) {\n return true;\n }\n return false;\n };\n Selection.prototype.getCurrentRevision = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var elementInfo = start.currentWidget.getInline(start.offset, 0);\n var currentElement = elementInfo.element;\n var startPara = start.paragraph;\n var nextOffsetElement = start.currentWidget.getInline(start.offset + 1, 0).element;\n var eleEndPosition;\n if (currentElement && currentElement === nextOffsetElement) {\n var offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (end.offset === eleEndPosition.offset && !isNullOrUndefined(currentElement.nextElement)) {\n return undefined;\n }\n }\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n return currentElement.revisions;\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget.ownerRow) && cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n return cellWidget.ownerRow.rowFormat.revisions;\n }\n }\n if (end.offset > end.paragraph.getLength()) {\n if (end.paragraph.characterFormat.revisions.length > 0) {\n return end.paragraph.characterFormat.revisions;\n }\n }\n return undefined;\n };\n Selection.prototype.processLineRevisions = function (linewidget, isFromAccept) {\n for (var i = 0; i < linewidget.children.length; i++) {\n var element = linewidget.children[i];\n if (element.revisions.length > 0) {\n this.addItemRevisions(element, isFromAccept);\n }\n }\n };\n /**\n * @private\n * @param isFromAccept\n */\n Selection.prototype.handleAcceptReject = function (isFromAccept) {\n if (this.isEmpty) {\n var elementInfo = this.start.currentWidget.getInline((this.start.offset + 1), 0);\n var currentElement = elementInfo.element;\n var startPara = this.start.paragraph;\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.addItemRevisions(currentElement, isFromAccept);\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget)) {\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n this.addItemRevisions(cellWidget.ownerRow.rowFormat, isFromAccept);\n }\n }\n else if (!startPara.isEmpty()) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = void 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n this.processLineRevisions(linewidget, isFromAccept);\n }\n }\n }\n }\n }\n else {\n var revisions = this.getselectedRevisionElements();\n for (var i = 0; i < revisions.length; i++) {\n this.acceptReject(revisions[i], isFromAccept);\n }\n }\n };\n Selection.prototype.acceptReject = function (currentRevision, toAccept) {\n this.selectRevision(currentRevision);\n if (toAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n };\n Selection.prototype.getselectedRevisionElements = function () {\n var revisionCollec = [];\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n for (var i = 0; i < this.selectedWidgets.length; i++) {\n var currentWidget = this.selectedWidgets.keys[i];\n if (currentWidget instanceof LineWidget) {\n revisionCollec = this.getSelectedLineRevisions(currentWidget, start, end, revisionCollec);\n }\n else if (currentWidget instanceof TableCellWidget) {\n if (currentWidget.ownerRow.rowFormat.revisions.length > 0) {\n revisionCollec = this.addRevisionsCollec(currentWidget.ownerRow.rowFormat.revisions, revisionCollec);\n }\n for (var i_3 = 0; i_3 < currentWidget.childWidgets.length; i_3++) {\n var paraWidget = currentWidget.childWidgets[i_3];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n revisionCollec = this.getSelectedLineRevisions(linewidget, start, end, revisionCollec);\n }\n }\n }\n }\n return revisionCollec;\n };\n Selection.prototype.getSelectedLineRevisions = function (currentWidget, start, end, elements) {\n if (currentWidget.paragraph.characterFormat.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentWidget.paragraph.characterFormat.revisions, elements);\n }\n for (var j = 0; j < currentWidget.children.length; j++) {\n var currentElement = currentWidget.children[j];\n var offset = currentElement.line.getOffset(currentElement, 0);\n var eleStartPosition = new TextPosition(this.owner);\n eleStartPosition.setPositionParagraph(currentElement.line, offset);\n offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n var eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (((eleEndPosition.isExistAfter(start) && eleEndPosition.isExistBefore(end))\n || (eleStartPosition.isExistAfter(start) && eleStartPosition.isExistBefore(end))\n || eleStartPosition.isAtSamePosition(start)\n || (start.isExistAfter(eleStartPosition) && end.isExistBefore(eleEndPosition))) && currentElement.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentElement.revisions, elements);\n }\n }\n return elements;\n };\n Selection.prototype.addRevisionsCollec = function (element, revisCollec) {\n for (var i = 0; i < element.length; i++) {\n if (revisCollec.indexOf(element[i]) === -1) {\n revisCollec.push(element[i]);\n }\n }\n return revisCollec;\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.tableFormat.table = tableAdv;\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof TextFrame) {\n bodyWidget = block.containerWidget.containerShape.line.paragraph.bodyWidget;\n }\n else if (block.containerWidget instanceof BlockContainer) {\n if (!isNullOrUndefined(block.containerWidget.containerWidget) && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n bodyWidget = block.containerWidget.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n }\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n if (bodyWidget instanceof TextFrame) {\n bodyWidget = bodyWidget.containerShape.line.paragraph;\n }\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.documentHelper.pages.indexOf(startParaSection.page);\n var endPageIndex = this.documentHelper.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n if (end.paragraph === block) {\n return;\n }\n var para = this.getNextRenderedBlock(block);\n if (!isNullOrUndefined(para)) {\n this.getParagraphFormatInternalInBlock(para, start, end);\n }\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n if (this.start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n if (end.paragraph === start.paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(start.paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.paragraph === end.paragraph && this.isSelectList) {\n var listLevel = this.getListLevel(start.paragraph);\n // let breakCharacterFormat: WCharacterFormat = start.paragraph.characterFormat;\n if (listLevel && listLevel.characterFormat.uniqueCharacterFormat) {\n this.characterFormat.copyFormat(listLevel.characterFormat);\n }\n return;\n }\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph && !paragraph.isEmpty()) {\n this.getCharacterFormatInternal(paragraph, this);\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldEnd) ?\n inline.fieldBegin : inline.fieldEnd;\n j--;\n do {\n this.characterFormat.combineFormat(inline.characterFormat);\n count += inline.length;\n inline = inline.nextNode;\n i++;\n j++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n continue;\n //isFieldStartSelected = true;\n }\n // if (inline instanceof FieldElementBox && (inline as FieldElementBox).fieldType === 1\n // && HelperMethods.isLinkedFieldCharacter((inline as FieldElementBox)) && isFieldStartSelected) {\n // let fieldInline: ElementBox = (inline as FieldElementBox).fieldBegin;\n // do {\n // this.characterFormat.combineFormat(fieldInline.characterFormat);\n // fieldInline = fieldInline.nextNode as ElementBox;\n // } while (!(fieldInline instanceof FieldElementBox));\n // }\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat);\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat);\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n this.characterFormat.copyFormat(this.getPreviousTextElement(inline).characterFormat);\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n this.characterFormat.copyFormat(this.getNextTextElement(inline).characterFormat);\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n this.getCharacterFormatForBlock(blockAdv, start, end);\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox || element instanceof ListTextElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selection.getTop(widget);\n left = this.owner.selection.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n if (widgetInfo instanceof SelectionWidgetInfo) {\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n else {\n var widgetIn = widgetInfo;\n for (var j = 0; j < widgetIn.length; j++) {\n if (widgetIn[j] instanceof SelectionWidgetInfo) {\n isSelected = widgetIn[j].left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetIn[j].left + widgetIn[j].width >= point.x;\n if (isSelected) {\n break;\n }\n }\n }\n }\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.documentHelper.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.documentHelper.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.documentHelper.isTouchInput = isTouchInput;\n _this.documentHelper.updateFocus();\n _this.documentHelper.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin, copyAddress) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n var screenTip = hyperlink.screenTip;\n if (copyAddress) {\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n if (hyperlink.isCrossRef) {\n link += hyperlink.localReference;\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n }\n hyperlink.destroy();\n return link;\n }\n else {\n hyperlink.destroy();\n return screenTip;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos, isFormField) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n var linkText = this.getScreenTipText(fieldBegin);\n if (isFormField) {\n var helpText = fieldBegin.formFieldData.helpText;\n if (isNullOrUndefined(helpText) || helpText === '') {\n return;\n }\n this.toolTipElement.innerHTML = helpText;\n }\n else {\n this.toolTipElement.innerHTML = linkText + '
      ' + toolTipText + '';\n }\n var position = this.getTooltipPosition(fieldBegin.line, xPos, this.toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Get screenTip text\n * @private\n */\n Selection.prototype.getScreenTipText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n if (!hyperlink.screenTip && !hyperlink.localReference) {\n return hyperlink.navigationLink;\n }\n else if (hyperlink.screenTip) {\n return hyperlink.screenTip;\n }\n else {\n return hyperlink.localReference;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setFootnoteContentToToolTip = function (footnote, widget, xPos) {\n if (footnote) {\n if (this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block' &&\n this.owner.contextMenuModule) {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var ln = new L10n('documenteditor', this.owner.defaultLocale);\n ln.setLocale(this.owner.locale);\n var toolTipText = void 0;\n if (footnote.footnoteType === 'Endnote') {\n toolTipText = ln.getConstant('Click to View/Edit Endnote');\n }\n else if (footnote.footnoteType === 'Footnote') {\n toolTipText = ln.getConstant('Click to View/Edit Footnote');\n }\n this.toolTipElement.innerHTML = '' + toolTipText + '';\n var positions = this.getTooltipPosition(footnote.line, xPos, this.toolTipElement, false);\n this.showToolTip(positions.x, positions.y);\n if (!isNullOrUndefined(this.toolTipField)) {\n this.toolTipObject.position = { X: positions.x, Y: positions.y };\n }\n this.toolTipObject.show();\n // this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Set locked content info to tool tip element\n * @private\n */\n Selection.prototype.setLockInfoTooptip = function (widget, xPos, user) {\n if (widget) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n var toolTipElement = this.toolTipElement;\n if (!this.toolTipElement) {\n toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(toolTipElement);\n this.toolTipElement = toolTipElement;\n }\n toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipInfo = l10n.getConstant('This region is locked by');\n toolTipElement.innerHTML = toolTipInfo + ' ' + user + '';\n var position = this.getTooltipPosition(widget, xPos, toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && user !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = user;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * @private\n */\n Selection.prototype.getTooltipPosition = function (widget, xPos, toolTipElement, isFormField) {\n var widgetTop = this.getTop(widget) * this.documentHelper.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.documentHelper.viewerContainer.getBoundingClientRect().width + this.documentHelper.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.documentHelper.zoomFactor;\n if ((left + toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var offsetHeight = !isFormField ? toolTipElement.offsetHeight : 0;\n var top = this.getPageTop(page) + (widgetTop - offsetHeight);\n top = top > this.documentHelper.viewerContainer.scrollTop ? top : top + widget.height + offsetHeight;\n return new Point(left, top);\n };\n /**\n * @private\n */\n Selection.prototype.createPasteElement = function (top, left) {\n var items;\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n switch (this.currentPasteAction) {\n case 'DefaultPaste':\n items = [\n {\n text: locale.getConstant('Keep source formatting'),\n iconCss: 'e-icons e-de-paste-source'\n },\n {\n text: locale.getConstant('Match destination formatting'),\n iconCss: 'e-icons e-de-paste-merge'\n },\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'TextOnly':\n items = [\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'InsertAsColumns':\n case 'OverwriteCells':\n case 'InsertAsRows':\n items = [\n {\n text: locale.getConstant('NestTable'),\n iconCss: 'e-icons e-de-paste-nested-table'\n },\n {\n text: locale.getConstant('InsertAsRows'),\n iconCss: 'e-icons e-de-paste-row'\n }\n ];\n if (this.currentPasteAction === 'InsertAsColumns') {\n var obj = {\n text: locale.getConstant('InsertAsColumns'),\n iconCss: 'e-icons e-de-paste-column'\n };\n items.unshift(obj);\n }\n else if (this.currentPasteAction === 'OverwriteCells') {\n var obj = {\n text: locale.getConstant('OverwriteCells'),\n iconCss: 'e-icons e-de-paste-overwrite-cells'\n };\n items.splice(2, 0, obj);\n }\n break;\n }\n if (!this.pasteElement) {\n this.pasteElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.pasteElement);\n var splitButtonEle = createElement('button', { id: this.owner.containerId + '_iconsplitbtn' });\n this.pasteElement.appendChild(splitButtonEle);\n this.pasteDropDwn = new DropDownButton({\n items: items, iconCss: 'e-icons e-de-paste', select: this.pasteOptions\n });\n this.pasteDropDwn.appendTo(splitButtonEle);\n }\n else {\n this.pasteDropDwn.items = items;\n }\n this.pasteElement.style.display = 'block';\n this.pasteElement.style.position = 'absolute';\n this.pasteElement.style.left = left;\n this.pasteElement.style.top = top;\n this.pasteDropDwn.dataBind();\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.documentHelper.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipElement.style.display = 'none';\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition, isFormField) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n var renderedChild = widget.renderedElements;\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = renderedChild.indexOf(element); i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === renderedChild.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return FootnoteElementBox\n * @private\n */\n Selection.prototype.getFootNoteElementInCurrentSelection = function (lineWidget, position) {\n var inline = undefined;\n var top = this.getTop(lineWidget);\n var lineStartInLeft = this.getLineStartLeft(lineWidget);\n if (position.y < top || position.y > top + lineWidget.height\n || position.x < lineStartInLeft\n || position.x > lineStartInLeft + lineWidget.paragraph.width) {\n return undefined;\n }\n var leftLength = lineWidget.paragraph.x;\n var elementValues = this.getFirstElement(lineWidget, leftLength);\n leftLength = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(lineWidget.paragraph.characterFormat);\n if (position.x <= lineStartInLeft + width || position.x >= lineStartInLeft + width) {\n //Check if paragraph is within a field result.\n var inlineObj = this.documentHelper.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var footNote = inlineObj.element;\n if (footNote instanceof FootnoteElementBox) {\n return footNote;\n }\n else {\n return undefined;\n }\n }\n }\n else {\n if (position.x > leftLength + element.margin.left) {\n for (var i = lineWidget.children.indexOf(element); i < lineWidget.children.length; i++) {\n element = lineWidget.children[i];\n if (position.x < leftLength + element.margin.left + element.width || i === lineWidget.children.length - 1) {\n break;\n }\n leftLength += element.margin.left + element.width;\n }\n }\n if (element instanceof FootnoteElementBox) {\n inline = element;\n }\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(element.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(element.line.paragraph.characterFormat);\n }\n if (position.x <= leftLength + width) {\n return inline;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function (isRetrieve) {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n ;\n }\n var currentInline = this.end.currentWidget.getInline(end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields, isRetrieve);\n }\n else if (this.documentHelper.isFormFillProtectedMode && inline instanceof BookmarkElementBox\n && inline.previousNode instanceof FieldElementBox && inline.previousNode.fieldType === 1) {\n field = undefined;\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields, isRetrieve, false);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (checkedFields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.documentHelper.fields[i]);\n }\n var field = this.getFieldCode(this.documentHelper.fields[i]);\n field = field.trim().toLowerCase();\n var isParagraph = this.paragraphIsInFieldResult(this.documentHelper.fields[i], paragraph);\n if ((isRetrieve || (!isRetrieve && field.match('hyperlink '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n if (isParagraph && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && field.match('ref '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (fields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.documentHelper.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.documentHelper.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n var fieldBegin = this.documentHelper.fields[i];\n var fieldEnd = fieldBegin.fieldEnd;\n if (isRetrieve && fieldBegin.nextNode instanceof BookmarkElementBox) {\n fieldEnd = fieldBegin.nextNode.reference;\n }\n var isInline = (this.inlineIsInFieldResult(fieldBegin, fieldEnd, fieldBegin.fieldSeparator, inline, isRetrieve) || this.isImageField());\n if ((isRetrieve || (!isRetrieve && fieldCode.match('hyperlink '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n if (isInline && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && fieldCode.match('ref '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields, isRetrieve, checkFormField);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, fieldEnd, fieldSeparator, inline, isRetrieve) {\n if (!isNullOrUndefined(fieldEnd) && !isNullOrUndefined(fieldSeparator)) {\n if (this.isExistBeforeInline(fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldEnd, inline, isRetrieve);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in Form field\n * @private\n */\n Selection.prototype.isFormField = function () {\n var inline = this.getCurrentFormField();\n if (inline instanceof FieldElementBox && inline.formFieldData) {\n return true;\n }\n return false;\n };\n /**\n * Return true if selection is in reference field\n * @private\n */\n Selection.prototype.isReferenceField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (field) {\n var fieldCode = this.getFieldCode(field);\n fieldCode = fieldCode.toLowerCase();\n if (field instanceof FieldElementBox && fieldCode.match('ref ')) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in text form field\n * @private\n */\n Selection.prototype.isInlineFormFillMode = function (field) {\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n if (isNullOrUndefined(field)) {\n field = this.getCurrentFormField();\n }\n if (field) {\n if (field.formFieldData instanceof TextFormField && field.formFieldData.type === 'Text') {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getFormFieldType = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.getCurrentFormField();\n }\n if (formField instanceof FieldElementBox) {\n if (formField.formFieldData instanceof TextFormField) {\n return 'Text';\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n return 'CheckBox';\n }\n else if (formField.formFieldData instanceof DropDownFormField) {\n return 'DropDown';\n }\n }\n return undefined;\n };\n /**\n * Get selected form field type\n * @private\n */\n Selection.prototype.getCurrentFormField = function (checkFieldResult) {\n var field;\n field = this.getHyperlinkField(true);\n if (field instanceof FieldElementBox && field.fieldType === 0 && !isNullOrUndefined(field.formFieldData)) {\n return field;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getCurrentTextFrame = function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return container;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return null;\n };\n /**\n * @private\n */\n Selection.prototype.isTableSelected = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(start.paragraph.associatedCell) ||\n isNullOrUndefined(end.paragraph.associatedCell)) {\n return false;\n }\n var table = start.paragraph.associatedCell.ownerTable.getSplitWidgets();\n var firstParagraph = this.getFirstBlockInFirstCell(table[0]);\n var lastParagraph = this.getLastBlockInLastCell(table[table.length - 1]);\n return start.paragraph.associatedCell.equals(firstParagraph.associatedCell) &&\n end.paragraph.associatedCell.equals(lastParagraph.associatedCell)\n && (!firstParagraph.associatedCell.equals(lastParagraph.associatedCell) || (start.offset === 0\n && end.offset === this.getLineLength(lastParagraph.lastChild) + 1));\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.documentHelper.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.isSelectList = true;\n this.selectRange(startPosition, endPosition);\n this.isSelectList = false;\n this.highlightListText(this.documentHelper.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.documentHelper.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top, false);\n this.documentHelper.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var width = inline.width;\n var height = inline.height;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n imageFormat.width = width;\n imageFormat.height = height;\n if (paragraph !== null && paragraph.containerWidget !== null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n *\n * @returns {void}\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n *\n * @returns {void}\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n if (isNullOrUndefined(this.owner.sfdtExportModule)) {\n return;\n }\n this.copyToClipboard(this.getHtmlContent());\n if (isCut && this.owner.editorModule) {\n this.owner.editorModule.handleCut(this);\n }\n this.documentHelper.updateFocus();\n };\n /**\n * Write the selected content as SFDT.\n * @returns SFDT Object.\n */\n Selection.prototype.writeSfdt = function () {\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n return (this.owner.sfdtExportModule.write(startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true));\n };\n /**\n * @private\n */\n Selection.prototype.getHtmlContent = function () {\n var documentContent = this.writeSfdt();\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(documentContent);\n }\n return this.htmlWriter.writeHtml(documentContent);\n };\n Selection.prototype.copyToClipboard = function (htmlContent) {\n window.getSelection().removeAllRanges();\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.style.position = 'relative';\n div.innerHTML = htmlContent;\n document.body.appendChild(div);\n if (navigator.userAgent.indexOf('Firefox') !== -1) {\n div.tabIndex = 0;\n div.focus();\n }\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.\n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.showCaret = function () {\n var page = !isNullOrUndefined(this.documentHelper.currentPage) ? this.documentHelper.currentPage : this.documentHelper.currentRenderingPage;\n if (isNullOrUndefined(page) || this.documentHelper.isRowOrCellResizing || (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible && !this.owner.imageResizerModule.isShapeResize)) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right;\n if (this.viewer instanceof PageLayoutViewer) {\n right = page.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n else {\n right = page.boundingRectangle.width - this.owner.viewer.padding.right - this.documentHelper.scrollbarWidth;\n }\n if (!this.owner.enableImageResizerMode || (!this.owner.imageResizerModule.isImageResizerVisible || this.owner.imageResizerModule.isShapeResize)) {\n if (this.isHideSelection(this.start.paragraph)) {\n this.caret.style.display = 'none';\n }\n else if (this.isEmpty && (!this.owner.isReadOnly || this.owner.enableCursorOnReadOnly || this.isInlineFormFillMode())) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n if (!this.documentHelper.isComposingIME) {\n this.caret.style.display = 'none';\n }\n }\n }\n }\n if (!isNullOrUndefined(this) && this.documentHelper.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.documentHelper.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.documentHelper.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.documentHelper.touchEnd.style.display = 'none';\n }\n else {\n this.documentHelper.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.documentHelper.touchStart.style.display = 'none';\n }\n else {\n this.documentHelper.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.documentHelper.editableDiv.focus();\n var child = this.documentHelper.editableDiv.childNodes[this.documentHelper.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.owner.documentHelper.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page && !isNullOrUndefined(this.caret)) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selection.end);\n var topMargin = caretInfo.topMargin;\n //let caretHeight: number = caretInfo.height;\n var viewer = this.viewer;\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.documentHelper.zoomFactor) + 'px';\n if (this.owner.selection.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.documentHelper.isTouchInput || this.documentHelper.touchStart.style.display !== 'none') {\n this.documentHelper.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n this.documentHelper.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n }\n }\n this.showHidePasteOptions(this.caret.style.top, this.caret.style.left);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.showHidePasteOptions = function (top, left) {\n if (Browser.isIE) {\n return;\n }\n if (this.isViewPasteOptions) {\n if (this.pasteElement && this.pasteElement.style.display === 'block') {\n return;\n }\n this.createPasteElement(top, left);\n }\n else if (this.pasteElement) {\n this.pasteElement.style.display = 'none';\n if (!isNullOrUndefined(this.owner.editor)) {\n this.owner.editor.isHtmlPaste = false;\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getRect = function (position) {\n var caretPosition = position.location;\n var page = this.getSelectionPage(position);\n if (page) {\n var documentHelper = this.owner.documentHelper;\n var left = page.boundingRectangle.x + (Math.round(caretPosition.x) * documentHelper.zoomFactor);\n var pageGap = this.viewer.pageGap;\n var pageTop = (page.boundingRectangle.y - pageGap * (page.index + 1)) * documentHelper.zoomFactor + pageGap * (page.index + 1);\n var top_5 = pageTop + (Math.round(caretPosition.y) * documentHelper.zoomFactor);\n return new Point(left, top_5);\n }\n return new Point(0, 0);\n };\n /**\n * Gets current selected page\n * @private\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n caretHeight = topMargin < 0 ? topMargin + height : height;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.documentHelper.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.documentHelper.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.documentHelper.selectionEndPage = endPage;\n if (this.owner.selection.isEmpty) {\n this.documentHelper.selectionStartPage = endPage;\n }\n else {\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.documentHelper.selectionStartPage = startPage;\n }\n }\n }\n this.checkForCursorVisibility();\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(textPosition.paragraph));\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selection.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 32:\n this.owner.editor.insertText(String.fromCharCode(160));\n break;\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.documentHelper.viewerContainer.scrollTop -= this.documentHelper.visibleBounds.height;\n break;\n case 34:\n event.preventDefault();\n this.documentHelper.viewerContainer.scrollTop += this.documentHelper.visibleBounds.height;\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (this.isFormField() && !(this.documentHelper.isDocumentProtected)) {\n var formField = this.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof DropDownFormField) {\n formField = (event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 40) ? formField : formField.nextElement instanceof BookmarkElementBox ? formField.nextElement.reference : formField.fieldEnd;\n var index = event.keyCode === 39 ? 1 : 0;\n var offset = formField.line.getOffset(formField, index);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, formField, index, point);\n }\n }\n if (!this.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode || this.isInlineFormFillMode()) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n else if (this.documentHelper.isDocumentProtected && this.documentHelper.protectionType === 'FormFieldsOnly') {\n if (event.keyCode === 9 || event.keyCode === 32) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n }\n if (this.owner.searchModule) {\n if (!isNullOrUndefined(this.owner.searchModule.searchHighlighters) && this.owner.searchModule.searchHighlighters.length > 0) {\n this.owner.searchModule.searchResults.clear();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.documentHelper.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget, page);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget, page);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.documentHelper.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.documentHelper.zoomFactor)) && this.viewer instanceof PageLayoutViewer) {\n return true;\n }\n else if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + page.boundingRectangle.width)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n var header = page.headerWidget;\n if (header) {\n headerHeight = (header.y + header.height);\n }\n var isEmpty = header.isEmpty && !this.owner.enableHeaderAndFooter;\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var pageHeight = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageHeight);\n var height = isEmpty ? topMargin : Math.min(Math.max(headerHeight, topMargin), pageHeight / 100 * 40);\n height = height * this.documentHelper.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.documentHelper.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n var bottomMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin);\n var isEmpty = page.footerWidget.isEmpty && !this.owner.enableHeaderAndFooter;\n var height = pageRect.height;\n if (isEmpty) {\n height = (height - bottomMargin) * this.documentHelper.zoomFactor;\n }\n else {\n height = (height - Math.min(pageRect.height / 100 * 40, Math.max(footerHeight + footerDistance, bottomMargin))) * this.documentHelper.zoomFactor;\n }\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n this.owner.enableHeaderAndFooter = true;\n widget.page = page;\n this.updateTextPositionForBlockContainer(widget);\n this.shiftBlockOnHeaderFooterEnableDisable();\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.shiftBlockOnHeaderFooterEnableDisable = function () {\n for (var i = 0; i < this.documentHelper.headersFooters.length; i++) {\n var headerFooter = this.documentHelper.headersFooters[i];\n var sectionFormat = this.getBodyWidgetInternal(i, 0).sectionFormat;\n for (var _i = 0, _a = Object.keys(headerFooter); _i < _a.length; _i++) {\n var key = _a[_i];\n var widget = headerFooter[key];\n if (widget.isEmpty) {\n this.owner.editor.shiftPageContent(widget.headerFooterType, sectionFormat);\n }\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n }\n this.selectParagraphInternal(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n this.shiftBlockOnHeaderFooterEnableDisable();\n };\n //#endregion\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n if (this.pasteDropDwn) {\n this.pasteDropDwn.destroy();\n this.pasteDropDwn = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.owner = undefined;\n this.upDownSelectionLength = undefined;\n this.isSkipLayouting = undefined;\n this.isImageSelected = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.destroy();\n }\n this.contextTypeInternal = undefined;\n this.isRetrieveFormatting = undefined;\n this.characterFormatIn = undefined;\n this.paragraphFormatIn = undefined;\n this.sectionFormatIn = undefined;\n this.tableFormatIn = undefined;\n this.cellFormatIn = undefined;\n this.rowFormatIn = undefined;\n this.imageFormatInternal = undefined;\n this.skipFormatRetrieval = undefined;\n this.startInternal = undefined;\n this.endInternal = undefined;\n this.htmlWriterIn = undefined;\n this.toolTipElement = undefined;\n if (!isNullOrUndefined(this.toolTipObject)) {\n this.toolTipObject.destroy();\n }\n this.toolTipField = undefined;\n this.isMoveDownOrMoveUp = undefined;\n this.pasteElement = undefined;\n this.currentPasteAction = undefined;\n this.isViewPasteOptions = undefined;\n this.skipEditRangeRetrieval = undefined;\n this.editPosition = undefined;\n if (!isNullOrUndefined(this.selectedWidgets)) {\n this.selectedWidgets.destroy();\n }\n this.isHighlightEditRegionIn = undefined;\n this.isHighlightFormFields = undefined;\n this.editRangeCollection = [];\n this.editRangeCollection = undefined;\n this.isHightlightEditRegionInternal = undefined;\n this.isCurrentUser = undefined;\n this.isHighlightNext = undefined;\n this.hightLightNextParagraph = undefined;\n this.isWebLayout = undefined;\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.destroy();\n }\n if (!isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters.destroy();\n }\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart) {\n var bookmarks = this.documentHelper.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.documentHelper.selection.selectRange(startPosition, startPosition);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n if (bookmrkElmnt.reference.line.paragraph.bodyWidget == null) {\n bookmrkEnd = bookmrkElmnt;\n }\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name\n */\n Selection.prototype.selectBookmark = function (name) {\n this.navigateBookmark(name);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n /**\n * Return true if selection is in TOC\n * @private\n */\n Selection.prototype.isTOC = function () {\n var info = this.getParagraphInfo(this.start);\n var para = info.paragraph;\n for (var i = 0; i < para.childWidgets[0].children.length; i++) {\n var element = para.childWidgets[0].children[i];\n if (element instanceof FieldElementBox) {\n var fieldCode = this.owner.selection.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n return true;\n }\n }\n else {\n continue;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementsForward = function (lineWidget, startElement, endElement, bidi) {\n if (isNullOrUndefined(startElement)) {\n return undefined;\n }\n var elements = [];\n // while (bidi && startElement && startElement !== endElement && startElement.nextElement && !startElement.isRightToLeft) {\n // startElement = startElement.nextElement;\n // }\n // while (bidi && endElement && startElement !== endElement && endElement.previousElement && !endElement.isRightToLeft) {\n // endElement = endElement.previousElement;\n // }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n if (inlineElement === endElement) {\n elements.push(inlineElement);\n elementIndex = -1;\n break;\n }\n else {\n elements.push(inlineElement);\n }\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements.length === 0 ? undefined : elements;\n };\n // Gets the current line elements in inline reverse order from the end element.\n /**\n * @private\n */\n Selection.prototype.getElementsBackward = function (lineWidget, startElement, endElement, bidi) {\n var elements = [];\n while (bidi && startElement && startElement.previousElement && (!startElement.isRightToLeft\n || startElement instanceof TextElementBox && this.documentHelper.textHelper.isRTLText(startElement.text))) {\n startElement = startElement.previousElement;\n }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i > -1 && i < lineWidget.children.length; bidi ? i++ : i--) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n elements.push(inlineElement);\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements;\n };\n /**\n * Navigate to previous comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousComment = function () {\n this.commentNavigateInternal(false);\n };\n /**\n * Navigate to next comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextComment = function () {\n this.commentNavigateInternal(true);\n };\n Selection.prototype.commentNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedComment) {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedComment = this.documentHelper.comments[0];\n }\n if (this.documentHelper.currentSelectedComment) {\n var comments = this.documentHelper.comments;\n var comment = this.documentHelper.currentSelectedComment;\n var index = comments.indexOf(comment);\n if (next) {\n comment = (index === (comments.length - 1)) ? comments[0] : comments[index + 1];\n }\n else {\n comment = index === 0 ? comments[comments.length - 1] : comments[index - 1];\n }\n this.documentHelper.currentSelectedComment = comment;\n this.selectComment(comment);\n }\n };\n /**\n * Navigate to previous revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousRevision = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * Navigate to next revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextRevision = function () {\n this.revisionNavigateInternal(true);\n };\n /**\n * Method to navigate revisions\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.revisionNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedRevisionInternal) {\n if (this.documentHelper.owner.revisions.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedRevision = this.documentHelper.owner.revisions.get(0);\n }\n if (this.documentHelper.currentSelectedRevision) {\n var revisions = this.documentHelper.owner.revisions.changes;\n var revision = this.documentHelper.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.documentHelper.currentSelectedRevision = revision;\n this.selectRevision(revision);\n }\n this.owner.trackChangesPane.currentSelectedRevision = this.documentHelper.currentSelectedRevision;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectComment = function (comment) {\n if (!isNullOrUndefined(comment)) {\n var startPosition = this.getElementPosition(comment.commentStart, true).startPosition;\n var endPosition = this.getElementPosition(comment.commentEnd, false).startPosition;\n this.selectPosition(startPosition, endPosition);\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.selectComment(comment);\n }\n }\n };\n /**\n * @private\n * @param revision\n * @returns {void}\n */\n Selection.prototype.selectRevision = function (revision) {\n if (!isNullOrUndefined(revision) && revision.range.length > 0) {\n var firstElement = revision.range[0];\n var lastElement = revision.range[revision.range.length - 1];\n if (firstElement instanceof WRowFormat) {\n var rowWidget = firstElement.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n var lastCell = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n else if (firstElement && lastElement) {\n var startPosition = new TextPosition(this.owner);\n var offset = 0;\n if (firstElement instanceof WCharacterFormat) {\n var currentPara = firstElement.ownerBase;\n offset = currentPara.getLength();\n startPosition.setPositionParagraph(currentPara.lastChild, offset);\n }\n else {\n offset = firstElement.line.getOffset(firstElement, 0);\n startPosition.setPositionForLineWidget(firstElement.line, offset);\n }\n var endPosition = new TextPosition(this.owner);\n if (lastElement instanceof WCharacterFormat) {\n var currentPara = lastElement.ownerBase;\n if (currentPara.isEndsWithPageBreak) {\n this.owner.trackChangesPane.isTrackingPageBreak = true;\n endPosition.setPositionParagraph(currentPara.nextRenderedWidget.childWidgets[0], 0);\n }\n else {\n offset = currentPara.getLength();\n endPosition.setPositionParagraph(currentPara.lastChild, offset + 1);\n }\n }\n else {\n offset = lastElement.line.getOffset(lastElement, 0) + lastElement.length;\n if (this.isTOC()) {\n offset += 1;\n }\n endPosition.setPositionForLineWidget(lastElement.line, offset);\n }\n var curentPosition = startPosition.clone();\n if (!startPosition.isExistBefore(endPosition)) {\n startPosition = endPosition;\n endPosition = curentPosition;\n }\n this.selectPosition(startPosition, endPosition);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.selectTableRevision = function (revision) {\n if (!isNullOrUndefined(revision) && revision[0].range.length > 0) {\n var firstElementTable = revision[0].range[0];\n var lastElementTable = revision[revision.length - 1].range[0];\n if (firstElementTable instanceof WRowFormat) {\n var firstRowWidget = firstElementTable.ownerBase;\n var firstCell = firstRowWidget.childWidgets[0];\n var secondRowWidget = lastElementTable.ownerBase;\n var lastCell = secondRowWidget.childWidgets[secondRowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.updateEditRangeCollection = function () {\n if (this.editRangeCollection.length > 0) {\n this.editRangeCollection = [];\n }\n var editRangeStart;\n var everyOneArea;\n if (!this.documentHelper.isDocumentProtected) {\n for (var i = 0; i < this.documentHelper.editRanges.length; i++) {\n var user = this.documentHelper.editRanges.keys[i];\n editRangeStart = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n editRangeStart = this.documentHelper.editRanges.get(this.owner.currentUser);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n if (this.documentHelper.editRanges.containsKey('Everyone')) {\n var user = 'Everyone';\n everyOneArea = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < everyOneArea.length; j++) {\n this.editRangeCollection.push(everyOneArea[j]);\n }\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.onHighlight = function () {\n if (this.isHighlightEditRegion) {\n this.highlightEditRegion();\n }\n else {\n this.unHighlightEditRegion();\n }\n this.viewer.renderVisiblePages();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegion = function () {\n this.updateEditRangeCollection();\n if (this.owner.enableLockAndEdit) {\n this.viewer.updateScrollBars();\n return;\n }\n if (!this.isHighlightEditRegion) {\n this.unHighlightEditRegion();\n return;\n }\n this.isHightlightEditRegionInternal = true;\n if (isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters = new Dictionary();\n }\n this.editRegionHighlighters.clear();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n this.highlightEditRegionInternal(this.editRangeCollection[j]);\n }\n this.isHightlightEditRegionInternal = false;\n this.viewer.updateScrollBars();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightFormFields = function () {\n if (isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters = new Dictionary();\n }\n this.formFieldHighlighters.clear();\n var formFields = this.documentHelper.formFields;\n if (!isNullOrUndefined(formFields) && formFields.length > 0) {\n for (var i = 0; i < formFields.length; i++) {\n var formField = formFields[i];\n if (HelperMethods.isLinkedFieldCharacter(formField)) {\n var offset = formField.line.getOffset(formField, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(formField.line, offset);\n var endElement = formField.fieldEnd;\n offset = endElement.line.getOffset(endElement, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n this.isHighlightFormFields = true;\n this.highlight(startPosition.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n this.isHighlightFormFields = false;\n this.viewer.updateScrollBars();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.unHighlightEditRegion = function () {\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.clear();\n this.editRegionHighlighters = undefined;\n }\n this.isHightlightEditRegionInternal = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegionInternal = function (editRangeStart) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n // if (editRangeStart.user === this.owner.currentUser && editRangeStart.group === '') {\n this.isCurrentUser = true;\n // }\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n this.isCurrentUser = false;\n };\n /**\n * Shows all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.showAllEditingRegion = function () {\n if (this.editRangeCollection.length === 0) {\n this.updateEditRangeCollection();\n }\n this.documentHelper.clearSelectionHighlight();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n var editRangeStart = this.editRangeCollection[j];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n }\n };\n Selection.prototype.highlightEditRegions = function (editRangeStart, startPosition, endPosition) {\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable) || editRangeStart.columnFirst === -1) {\n this.highlight(editRangeStart.line.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n var row = editRangeStart.line.paragraph.associatedCell.ownerRow;\n var cell = row.childWidgets[editRangeStart.columnFirst];\n if (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n if (cell.childWidgets[i] instanceof ParagraphWidget) {\n this.highlight(cell.childWidgets[i], startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n }\n }\n };\n /**\n * Navigate to next editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.navigateToNextEditingRegion = function () {\n var editRange = this.getEditRangeStartElement();\n if (!isNullOrUndefined(editRange)) {\n //Sort based on position\n for (var i = this.editRangeCollection.length - 1; i >= 0; i--) {\n for (var j = 1; j <= i; j++) {\n var nextPosition = this.getPosition(this.editRangeCollection[j - 1]).startPosition;\n var firstPosition = this.getPosition(this.editRangeCollection[j]).startPosition;\n if (nextPosition.isExistAfter(firstPosition)) {\n var temp = this.editRangeCollection[j - 1];\n this.editRangeCollection[j - 1] = this.editRangeCollection[j];\n this.editRangeCollection[j] = temp;\n }\n }\n }\n var index = this.editRangeCollection.indexOf(editRange);\n var editRangeStart = index < this.editRangeCollection.length - 1 ?\n this.editRangeCollection[index + 1] : this.editRangeCollection[0];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Highlight all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.toggleEditingRegionHighlight = function () {\n this.isHighlightEditRegion = !this.isHighlightEditRegion;\n };\n /**\n * @private\n */\n Selection.prototype.getEditRangeStartElement = function () {\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editStart = this.editRangeCollection[i];\n var position = this.getPosition(editStart);\n var start = position.startPosition;\n var end = position.endPosition;\n if ((this.start.isExistAfter(start) || this.start.isAtSamePosition(start))\n && (this.end.isExistBefore(end) || this.end.isAtSamePosition(end))) {\n return editStart;\n }\n }\n return undefined;\n };\n /**\n * Returns true if selection is inside the edit region\n *\n * @returns {boolean}\n */\n Selection.prototype.isSelectionInEditRegion = function () {\n if (!this.documentHelper.isDocumentProtected) {\n return false;\n }\n return this.checkSelectionIsAtEditRegion();\n };\n Selection.prototype.checkSelectionIsAtEditRegion = function (start, end) {\n if (isNullOrUndefined(start) && isNullOrUndefined(end)) {\n start = this.start;\n end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n }\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editRangeStart = this.editRangeCollection[i];\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable)\n || editRangeStart.columnFirst === -1) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else {\n if (editRangeStart.paragraph.isInsideTable && editRangeStart.editRangeEnd &&\n editRangeStart.editRangeEnd.line.paragraph.isInsideTable) {\n var editRangeRow = editRangeStart.paragraph.associatedCell.ownerRow;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(startCell) && !isNullOrUndefined(endCell)) {\n if (editRangeRow.equals(startCell.ownerRow) && editRangeRow.equals(endCell.ownerRow)\n && startCell.index >= editRangeStart.columnFirst && startCell.index <= editRangeStart.columnLast) {\n if (this.isEmpty && startCell.index === editRangeStart.line.paragraph.associatedCell.index) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else if (!this.isCellSelected(startCell, start, end)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n Selection.prototype.isSelectionInsideEditRange = function (editRangeStart, start, end) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n if ((start.isExistAfter(startPosition) || start.isAtSamePosition(startPosition))\n && (end.isExistBefore(endPosition) || end.isAtSamePosition(endPosition))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getPosition = function (element) {\n var offset = element.line.getOffset(element, 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n var endElement;\n if (element instanceof EditRangeStartElementBox) {\n endElement = element.editRangeEnd;\n }\n else if (element instanceof ContentControl) {\n endElement = element.reference;\n }\n else if (element instanceof BookmarkElementBox) {\n endElement = element.reference;\n }\n else if (element instanceof CommentCharacterElementBox) {\n endElement = element.comment.commentEnd;\n }\n offset = endElement.line.getOffset(endElement, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n return { 'startPosition': startPosition, 'endPosition': endPosition };\n };\n /**\n * @private\n */\n Selection.prototype.checkContentControlLocked = function (checkFormat) {\n this.owner.editorModule.isXmlMapped = false;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n var position = this.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(checkFormat)) {\n var cCStartInsideSelction = ((cCstart.isExistAfter(start) || cCstart.isAtSamePosition(start)) && (cCstart.isExistBefore(end) || cCstart.isAtSamePosition(end)));\n var cCEndInsideSelction = ((cCend.isExistAfter(start) || cCend.isAtSamePosition(start)) && (cCend.isExistBefore(end) || cCend.isAtSamePosition(end)));\n if (cCStartInsideSelction && cCEndInsideSelction) {\n if (contentControlStart.contentControlProperties.lockContentControl) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n return false;\n }\n if ((cCStartInsideSelction) || (cCEndInsideSelction)) {\n if (!(cCstart.isAtSamePosition(start) || cCend.isAtSamePosition(start)) && (contentControlStart.contentControlProperties.lockContentControl || contentControlStart.contentControlProperties.lockContents)) {\n return true;\n }\n }\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n if (contentControlStart.contentControlProperties.xmlMapping\n && contentControlStart.contentControlProperties.xmlMapping.isMapped) {\n this.owner.editorModule.isXmlMapped = true;\n }\n if (contentControlStart.contentControlProperties.lockContents) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n else if (isNullOrUndefined(checkFormat)\n && (contentControlStart.contentControlProperties.type === 'CheckBox'\n || contentControlStart.contentControlProperties.type === 'ComboBox'\n || contentControlStart.contentControlProperties.type === 'DropDownList'\n || contentControlStart.contentControlProperties.type === 'Date')) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementPosition = function (element, isEnd) {\n var offset = element.line.getOffset(element, isEnd ? 0 : 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n return { 'startPosition': startPosition, 'endPosition': undefined };\n };\n //Restrict editing implementation ends\n /**\n * Update ref field.\n * @private\n */\n Selection.prototype.updateRefField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (!isNullOrUndefined(field)) {\n if (!this.isReferenceField(field)) {\n return;\n }\n var fieldCode = this.getFieldCode(field).replace(/\\s+/g, ' ');\n fieldCode = fieldCode.trim();\n if (fieldCode.toLowerCase().indexOf('ref') === 0) {\n var code = fieldCode.split(' ');\n if (code.length > 1) {\n var bookmarkId = code[1];\n if (this.documentHelper.bookmarks.containsKey(bookmarkId)) {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmarkStart = this.documentHelper.bookmarks.get(bookmarkId);\n var bookmarkEnd = bookmarkStart.reference;\n var previousNode = bookmarkStart.previousNode;\n if ((isNullOrUndefined(previousNode) || !(previousNode instanceof FieldElementBox))\n && bookmarkEnd.previousNode instanceof FieldElementBox\n && bookmarkEnd.previousNode.fieldType === 1\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin)\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin.formFieldData)) {\n bookmarkStart = bookmarkEnd.previousNode.fieldBegin.fieldSeparator;\n bookmarkEnd = bookmarkEnd.previousNode.fieldBegin.fieldEnd;\n }\n else if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n bookmarkStart = previousNode.fieldSeparator;\n bookmarkEnd = previousNode.fieldEnd;\n }\n var offset = bookmarkStart.line.getOffset(bookmarkStart, 1);\n start.setPositionParagraph(bookmarkStart.line, offset);\n end.setPositionParagraph(bookmarkEnd.line, bookmarkEnd.line.getOffset(bookmarkEnd, 0));\n var documentContent = this.owner.sfdtExportModule.write(start.currentWidget, start.offset, end.currentWidget, end.offset, false, true);\n var startElement = field.fieldSeparator;\n var endElement = field.fieldEnd;\n start.setPositionParagraph(startElement.line, startElement.line.getOffset(startElement, 1));\n end.setPositionParagraph(endElement.line, endElement.line.getOffset(endElement, 0));\n this.owner.editor.pasteContents(documentContent);\n }\n }\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.footnoteReferenceElement = function (start, end, inline) {\n var container = this.getContainerWidget(start.paragraph);\n var count = 0;\n if (container instanceof FootNoteWidget) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n count = 0;\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets.length; j++) {\n var bodyWidget = page.bodyWidgets[j];\n for (var k = 0; k < bodyWidget.childWidgets.length; k++) {\n var paragraph = bodyWidget.childWidgets[k];\n if (paragraph instanceof TableWidget) {\n for (var tr = 0; tr < paragraph.childWidgets.length; tr++) {\n var tablerow = paragraph.childWidgets[tr];\n for (var tc = 0; tc < tablerow.childWidgets.length; tc++) {\n var tablecell = tablerow.childWidgets[tc];\n for (var para = 0; para < tablecell.childWidgets.length; para++) {\n var paragr = tablecell.childWidgets[para];\n for (var line = 0; line < paragr.childWidgets.length; line++) {\n var lines = paragr.childWidgets[line];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n else {\n for (var l = 0; l < paragraph.childWidgets.length; l++) {\n var lines = paragraph.childWidgets[l];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n return Selection;\n}());\nexport { Selection };\n","/* eslint-disable */\nimport { TextSearchResults } from '../index';\nimport { beforeXmlHttpRequestSend } from './../../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextElementBox, ErrorTextElementBox, TableCellWidget, FieldElementBox } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The spell checker module\n */\nvar SpellChecker = /** @class */ (function () {\n function SpellChecker(documentHelper) {\n this.langIDInternal = 0;\n /**\n * Specifies whether spell check has to be performed or not.\n */\n this.enableSpellCheckInternal = true;\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.uniqueSpelledWords = {};\n this.spellSuggestionInternal = true;\n /**\n * @private\n */\n this.uniqueKey = '';\n this.removeUnderlineInternal = false;\n /**\n * @default 1000\n */\n this.uniqueWordsCountInternal = 15000;\n this.performOptimizedCheck = false;\n this.documentHelper = documentHelper;\n this.errorWordCollection = new Dictionary();\n this.uniqueWordsCollection = new Dictionary();\n this.errorSuggestions = new Dictionary();\n this.ignoreAllItems = [];\n this.uniqueSpelledWords = {};\n this.textSearchResults = new TextSearchResults(this.documentHelper.owner);\n this.uniqueKey = this.documentHelper.owner.element.id + '_' + this.createGuid();\n }\n /**\n * Gets module name.\n */\n SpellChecker.prototype.getModuleName = function () {\n return 'SpellChecker';\n };\n Object.defineProperty(SpellChecker.prototype, \"enableOptimizedSpellCheck\", {\n /**\n * Gets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n * @returns {boolean} Returns enableOptimizedSpellCheck\n */\n get: function () {\n return this.performOptimizedCheck;\n },\n /**\n * Sets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n */\n set: function (value) {\n this.performOptimizedCheck = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"uniqueWordsCount\", {\n /**\n * Gets the spell checked Unique words.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.uniqueWordsCountInternal) ? 0 : this.uniqueWordsCountInternal;\n },\n /**\n * Sets the spell checked Unique words.\n *\n * @aspType int\n */\n set: function (value) {\n this.uniqueWordsCountInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"languageID\", {\n /**\n * Gets the languageID.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.langIDInternal) ? 0 : this.langIDInternal;\n },\n /**\n * Sets the languageID.\n *\n * @aspType int\n */\n set: function (value) {\n this.langIDInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"allowSpellCheckAndSuggestion\", {\n /**\n * Getter indicates whether suggestion enabled.\n *\n * @aspType bool\n */\n get: function () {\n return this.spellSuggestionInternal;\n },\n /**\n * Setter to enable or disable suggestion\n *\n * @aspType bool\n */\n set: function (value) {\n this.spellSuggestionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"removeUnderline\", {\n /**\n * Getter indicates whether underline removed for mis-spelled word.\n *\n * @aspType bool\n */\n get: function () {\n return this.removeUnderlineInternal;\n },\n /**\n * Setter to enable or disable underline for mis-spelled word\n *\n * @aspType bool\n */\n set: function (value) {\n this.removeUnderlineInternal = value;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"enableSpellCheck\", {\n /**\n * Getter indicates whether spell check has to be performed or not.\n *\n * @aspType bool\n */\n get: function () {\n return this.enableSpellCheckInternal;\n },\n /**\n * Setter to enable or disable spell check has to be performed or not\n *\n * @aspType bool\n */\n set: function (value) {\n this.enableSpellCheckInternal = value;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to manage replace logic\n *\n * @private\n */\n SpellChecker.prototype.manageReplace = function (content, dialogElement) {\n this.documentHelper.triggerSpellCheck = true;\n var exactText = '';\n var elementInfo;\n if (!isNullOrUndefined(dialogElement) && dialogElement instanceof ErrorTextElementBox) {\n var exactText_1 = dialogElement.text;\n this.documentHelper.selection.start = dialogElement.start;\n this.documentHelper.selection.end = dialogElement.end;\n if (content !== 'Ignore Once') {\n content = this.manageSpecialCharacters(exactText_1, content);\n this.documentHelper.owner.editor.insertTextInternal(content, true);\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n return;\n }\n else {\n this.currentContextInfo = { 'text': exactText_1, 'element': dialogElement };\n }\n }\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element && content !== 'Ignore Once') {\n var elementBox = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = elementBox.start;\n this.documentHelper.selection.end = elementBox.end;\n }\n else {\n this.handleReplace(content);\n }\n if (content !== 'Ignore Once') {\n this.documentHelper.owner.editor.insertTextInternal(content, true);\n if (!isNullOrUndefined(this.currentContextInfo)) {\n this.removeErrorsFromCollection(this.currentContextInfo);\n }\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n }\n //this.documentHelper.owner.errorWordCollection.remove(content);\n this.documentHelper.triggerSpellCheck = false;\n };\n /**\n * Method to handle replace logic\n *\n * @private\n */\n SpellChecker.prototype.handleReplace = function (content) {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex, false, true);\n var startOffset = startInlineObj.element.line.getOffset(startInlineObj.element, 0) + startInlineObj.element.length;\n if (startOffset === offset) {\n this.retrieveExactElementInfo(startInlineObj);\n }\n var exactText = startInlineObj.element.text;\n var startPattern = new RegExp('^[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s]+', 'g');\n var matches = [];\n var matchInfo;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = startPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (content === 'Ignore Once') {\n this.handleIgnoreOnce(startInlineObj);\n return;\n }\n startPosition.offset = offset - startInlineObj.index;\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n startPosition.offset += matches[0].toString().length;\n }\n startPosition.location = this.documentHelper.owner.selection.getPhysicalPositionInternal(startPosition.currentWidget, startPosition.offset, true);\n startPosition = this.documentHelper.owner.searchModule.textSearch.getTextPosition(startPosition.currentWidget, startPosition.offset.toString());\n //startPosition.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n startPosition.setPositionParagraph(startPosition.currentWidget, startPosition.offset);\n var index = (startPosition.offset + startInlineObj.element.length) - startPosition.offset;\n var endOffset = startPosition.currentWidget.getOffset(startInlineObj.element, index);\n var lineWidget = startPosition.currentWidget;\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`]+$', 'g');\n matches = [];\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n endOffset -= matches[0].toString().length;\n }\n this.documentHelper.selection.end = this.documentHelper.owner.searchModule.textSearch.getTextPosition(lineWidget, endOffset.toString());\n this.documentHelper.selection.end.location = this.documentHelper.owner.selection.getPhysicalPositionInternal(startPosition.currentWidget, endOffset, true);\n this.documentHelper.selection.end.setPositionParagraph(lineWidget, endOffset);\n this.currentContextInfo = { 'element': startInlineObj.element, 'text': startInlineObj.element.text };\n };\n /**\n * Method to retrieve exact element info\n *\n * @private\n */\n SpellChecker.prototype.retrieveExactElementInfo = function (startInlineObj) {\n var nextElement = startInlineObj.element.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement instanceof TextElementBox) {\n var nextTextElBox = nextElement;\n if (nextTextElBox.text.trim() != \"\") {\n startInlineObj.element = nextElement;\n }\n }\n };\n /**\n * Method to handle to ignore error Once\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreOnce = function (startInlineObj) {\n var textElement = startInlineObj.element;\n var exactText = '';\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n exactText = this.currentContextInfo.element.text;\n }\n else {\n exactText = textElement.text;\n }\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n if (textElement.ignoreOnceItems.indexOf(exactText) === -1) {\n textElement.ignoreOnceItems.push(exactText);\n }\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n };\n /**\n * Method to handle ignore all items\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreAllItems = function (contextElement) {\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n if (this.ignoreAllItems.indexOf(retrievedText) === -1) {\n this.ignoreAllItems.push(retrievedText);\n this.removeErrorsFromCollection(contextItem);\n this.documentHelper.triggerSpellCheck = true;\n this.documentHelper.owner.editor.reLayout(this.documentHelper.selection);\n this.documentHelper.triggerSpellCheck = false;\n this.documentHelper.clearSelectionHighlight();\n }\n };\n /**\n * Method to handle dictionary\n *\n * @private\n */\n SpellChecker.prototype.handleAddToDictionary = function (contextElement) {\n var _this = this;\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.callSpellChecker(this.languageID, retrievedText, false, false, true).then(function (data) {\n _this.documentHelper.triggerSpellCheck = true;\n _this.removeErrorsFromCollection(contextItem);\n _this.ignoreAllItems.push(retrievedText);\n _this.documentHelper.owner.editor.reLayout(_this.documentHelper.selection, true);\n _this.documentHelper.triggerSpellCheck = false;\n });\n };\n /**\n * Method to append/remove special characters\n *\n * @private\n */\n SpellChecker.prototype.manageSpecialCharacters = function (exactText, replaceText, isRemove) {\n if (!isNullOrUndefined(exactText)) {\n if (isNullOrUndefined(replaceText)) {\n replaceText = exactText;\n }\n var pattern = new RegExp('^[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s]+', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? match[0] + replaceText : replaceText.replace(match[0], '');\n }\n }\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`]+$', 'g');\n matches = [];\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(replaceText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? replaceText + match[0] : replaceText.slice(0, match.index);\n }\n }\n }\n return replaceText;\n };\n /**\n * Method to remove errors\n *\n * @private\n */\n SpellChecker.prototype.removeErrorsFromCollection = function (contextItem) {\n if (!isNullOrUndefined(contextItem.text) && this.errorWordCollection.containsKey(contextItem.text)) {\n var textElement = this.errorWordCollection.get(contextItem.text);\n if (textElement.indexOf(contextItem.element) >= 0) {\n textElement.splice(0, 1);\n }\n if (textElement.length === 0) {\n this.errorWordCollection.remove(contextItem.text);\n }\n }\n };\n /**\n * Method to retrieve exact text\n *\n * @private\n */\n SpellChecker.prototype.retriveText = function () {\n var exactText;\n var currentElement;\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n currentElement = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = currentElement.start;\n this.documentHelper.selection.end = currentElement.end;\n }\n else {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex);\n currentElement = startInlineObj.element;\n exactText = startInlineObj.element.text;\n }\n return { 'text': exactText, 'element': currentElement };\n };\n /**\n * Method to handle suggestions\n *\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.handleSuggestions = function (allsuggestions) {\n this.spellCheckSuggestion = [];\n if (allsuggestions.length === 0) {\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary'));\n }\n else {\n allsuggestions = (allsuggestions.length > 3) ? this.constructInlineMenu(allsuggestions) : allsuggestions;\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary'));\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellSuggestion = [];\n if (this.spellCheckSuggestion.length > 0) {\n for (var _i = 0, _a = this.spellCheckSuggestion; _i < _a.length; _i++) {\n var str = _a[_i];\n spellSuggestion.push({\n text: str,\n id: this.documentHelper.owner.element.id + '_contextmenu_otherSuggestions_spellcheck_' + (str === this.documentHelper.owner.contextMenu.locale.getConstant('Add to Dictionary') ? 'Add to Dictionary' : str),\n iconCss: ''\n });\n }\n }\n return spellSuggestion;\n };\n /**\n * Method to check whether text element has errors\n *\n * @private\n */\n SpellChecker.prototype.checktextElementHasErrors = function (text, element, left) {\n var hasError = false;\n var erroElements = [];\n text = text.replace(/[\\s]+/g, '');\n if (!isNullOrUndefined(element.errorCollection) && element.errorCollection.length > 0) {\n if (!this.documentHelper.isScrollHandler && (element.ischangeDetected || element.paragraph.isChangeDetected)) {\n this.updateStatusForGlobalErrors(element.errorCollection, element);\n element.errorCollection = [];\n element.ischangeDetected = true;\n return { 'errorFound': hasError, 'elements': erroElements };\n }\n for (var i = 0; i < element.errorCollection.length; i++) {\n if (this.handleErrorCollection(element.errorCollection[i])) {\n hasError = true;\n erroElements.push(element.errorCollection[i]);\n }\n }\n }\n else if (!this.documentHelper.isScrollHandler && element.paragraph.isChangeDetected) {\n element.ischangeDetected = true;\n }\n else if (!element.ischangeDetected && this.handleErrorCollection(element)) {\n hasError = true;\n erroElements.push(element);\n }\n return { 'errorFound': hasError, 'elements': erroElements };\n };\n SpellChecker.prototype.updateStatusForGlobalErrors = function (erroElements, parentElement) {\n if (erroElements.length > 0) {\n for (var i = 0; i < erroElements.length; i++) {\n var exactText = this.manageSpecialCharacters(erroElements[i].text, undefined, true);\n if (this.errorWordCollection.containsKey(exactText)) {\n var elements = this.errorWordCollection.get(exactText);\n for (var j = 0; j < elements.length; j++) {\n if (elements[j] instanceof ErrorTextElementBox && elements[j] === erroElements[i]) {\n elements[j].ischangeDetected = true;\n elements[j].start.offset = parentElement.line.getOffset(parentElement.istextCombined ? this.getCombinedElement(parentElement) : parentElement, 0);\n elements[j].line = parentElement.line;\n break;\n }\n }\n }\n }\n }\n };\n /**\n * Method to handle document error collection.\n *\n * @param {string} errorInElement\n * @private\n */\n SpellChecker.prototype.handleErrorCollection = function (errorInElement) {\n var errors = this.errorWordCollection;\n var exactText = this.manageSpecialCharacters(errorInElement.text, undefined, true);\n if (errors.containsKey(exactText) && errorInElement.length > 1) {\n var ignoreAllIndex = this.ignoreAllItems.indexOf(exactText);\n if (ignoreAllIndex > -1) {\n if (errors.containsKey(exactText)) {\n errors.remove(exactText);\n }\n return false;\n }\n return true;\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.constructInlineMenu = function (inlineSuggestion) {\n for (var i = inlineSuggestion.length - 1; i > 0; i--) {\n if (inlineSuggestion.length > 3) {\n this.spellCheckSuggestion.push(inlineSuggestion[i]);\n inlineSuggestion.pop();\n }\n }\n return inlineSuggestion;\n };\n /**\n * Method to retrieve error element text\n *\n * @private\n */\n SpellChecker.prototype.findCurretText = function () {\n var insertPosition = this.documentHelper.selection.start;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var element;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var text;\n if (!isNullOrUndefined(inlineObj.element)) {\n if (!isNullOrUndefined(inlineObj.element.errorCollection) && inlineObj.element.errorCollection.length > 0) {\n for (var i = 0; i < inlineObj.element.errorCollection.length; i++) {\n var errorElement = inlineObj.element.errorCollection[i];\n if (errorElement.start.location.x <= insertPosition.location.x && errorElement.end.location.x >= insertPosition.location.x) {\n text = errorElement.text;\n element = errorElement;\n break;\n }\n }\n }\n else {\n text = inlineObj.element.text;\n }\n if (text === ' ') {\n inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset + 1, 0);\n text = inlineObj.element.text;\n }\n }\n return { 'text': text, 'element': element };\n };\n SpellChecker.prototype.addErrorCollection = function (text, elementToCompare, suggestions) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (this.errorWordCollection.containsKey(text)) {\n var errorElements = this.errorWordCollection.get(text);\n if (elementToCompare instanceof ErrorTextElementBox) {\n if (!this.compareErrorTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n else if (elementToCompare instanceof TextElementBox) {\n if (!this.compareTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n }\n else {\n if (!isNullOrUndefined(suggestions) && suggestions.length > 0) {\n this.errorSuggestions.add(text, suggestions);\n }\n this.errorWordCollection.add(text, [elementToCompare]);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, true);\n }\n }\n };\n SpellChecker.prototype.addCorrectWordCollection = function (text) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, false);\n }\n };\n /**\n * @private\n */\n SpellChecker.prototype.isInUniqueWords = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.containsKey(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isErrorWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.get(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isCorrectWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return !this.uniqueWordsCollection.get(text);\n };\n SpellChecker.prototype.compareErrorTextElement = function (errorElement, errorCollection) {\n var copyElement = [];\n var isChanged = false;\n for (var i = 0; i < errorCollection.length; i++) {\n copyElement.push(errorCollection[i]);\n }\n var length = errorCollection.length;\n for (var i = 0; i < length; i++) {\n if (copyElement[i] instanceof ErrorTextElementBox) {\n if (copyElement[i].ischangeDetected) {\n var exactText = this.manageSpecialCharacters(copyElement[i].text, undefined, true);\n isChanged = true;\n this.removeErrorsFromCollection({ 'element': copyElement[i], 'text': exactText });\n }\n else {\n var currentElement = copyElement[i];\n if (errorElement.start.offset === currentElement.start.offset && errorElement.end.offset === currentElement.end.offset) {\n return true;\n }\n }\n }\n }\n if (isChanged) {\n this.errorWordCollection.add(this.manageSpecialCharacters(errorElement.text, undefined, true), [errorElement]);\n }\n return false;\n };\n /**\n * Method to compare text elements\n *\n * @private\n */\n SpellChecker.prototype.compareTextElement = function (errorElement, errorCollection) {\n for (var i = 0; i < errorCollection.length; i++) {\n if (errorCollection[i] instanceof TextElementBox) {\n var currentElement = errorCollection[i];\n if (currentElement === errorElement) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle Word by word spell check\n *\n * @private\n */\n SpellChecker.prototype.handleWordByWordSpellCheck = function (jsonObject, elementBox, left, top, underlineY, baselineAlignment, isSamePage) {\n if (jsonObject.HasSpellingError && isSamePage) {\n this.addErrorCollection(elementBox.text, elementBox, jsonObject.Suggestions);\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.line.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n this.documentHelper.render.renderWavyLine(elementBox, left, top, underlineY, '#FF0000', 'Single', baselineAlignment, backgroundColor);\n elementBox.isSpellChecked = true;\n }\n else {\n this.addCorrectWordCollection(elementBox.text);\n elementBox.isSpellChecked = true;\n }\n };\n /**\n * Method to check errors for combined elements\n *\n * @private\n */\n SpellChecker.prototype.checkElementCanBeCombined = function (elementBox, underlineY, beforeIndex, callSpellChecker, textToCombine, isNext, isPrevious, canCombine) {\n var currentText = isNullOrUndefined(textToCombine) ? '' : textToCombine;\n var isCombined = isNullOrUndefined(canCombine) ? false : canCombine;\n var checkPrevious = !isNullOrUndefined(isPrevious) ? isPrevious : true;\n var checkNext = !isNullOrUndefined(isNext) ? isNext : true;\n var combinedElements = [];\n var line = this.documentHelper.selection.getLineWidget(elementBox, 0);\n var index = line.children.indexOf(elementBox);\n var prevText = elementBox.text;\n combinedElements.push(elementBox);\n var difference = (isPrevious) ? 0 : 1;\n var prevCombined = false;\n var isPrevField = false;\n if (elementBox.text !== '\\v') {\n if (checkPrevious) {\n var textElement = undefined;\n for (var i = index - difference; i >= 0; i--) {\n textElement = line.children[i];\n if (textElement instanceof TextElementBox && !isPrevField) {\n if (prevText.indexOf(' ') !== 0 && textElement.text.lastIndexOf(' ') !== textElement.text.length - 1) {\n prevCombined = !isNullOrUndefined(textToCombine) ? true : false;\n currentText = textElement.text + currentText;\n prevText = textElement.text;\n isPrevField = false;\n combinedElements.push(textElement);\n isCombined = true;\n }\n else if (!isNullOrUndefined(textElement)) {\n textElement = textElement.nextElement;\n break;\n }\n }\n else if (textElement instanceof FieldElementBox && textElement.fieldType !== 1) {\n isPrevField = true;\n }\n }\n var currentElement = (isCombined) ? textElement : elementBox;\n if (this.lookThroughPreviousLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n if (isPrevious) {\n currentText = (prevCombined) ? currentText : elementBox.text + currentText;\n }\n else {\n currentText += elementBox.text;\n }\n isPrevField = false;\n var nextText = elementBox.text;\n if (checkNext) {\n var canCombine_1 = false;\n var element = undefined;\n for (var i = index + 1; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof TextElementBox && !isPrevField) {\n if (nextText.lastIndexOf(' ') !== nextText.length - 1 && element.text.indexOf(' ') !== 0) {\n currentText += element.text;\n nextText = element.text;\n isPrevField = false;\n combinedElements.push(element);\n canCombine_1 = true;\n isCombined = true;\n }\n else if (!isNullOrUndefined(element)) {\n element = element.previousElement;\n break;\n }\n }\n else if (element instanceof FieldElementBox && element.fieldType !== 2) {\n isPrevField = true;\n }\n }\n var currentElement = (canCombine_1) ? element : elementBox;\n if (currentElement.text !== '\\f' && this.lookThroughNextLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n }\n if (isCombined && callSpellChecker && !this.checkCombinedElementsBeIgnored(combinedElements, currentText)) {\n this.handleCombinedElements(elementBox, currentText, underlineY, beforeIndex);\n }\n return isCombined;\n };\n SpellChecker.prototype.lookThroughPreviousLine = function (currentText, prevText, currentElement, underlineY, beforeIndex) {\n if (!isNullOrUndefined(currentElement) && currentElement.indexInOwner === 0 && !isNullOrUndefined(currentElement.line.previousLine)) {\n var previousLine = currentElement.line.previousLine;\n var index = previousLine.children.length - 1;\n if (!isNullOrUndefined(previousLine.children[index]) && previousLine.children[index] instanceof TextElementBox) {\n var firstElement = previousLine.children[index];\n if (!isNullOrUndefined(currentElement.text)) {\n if (currentElement.text.indexOf(' ') !== 0 && firstElement.text.lastIndexOf(' ') !== firstElement.text.length - 1) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, false, true, true);\n return true;\n }\n }\n }\n }\n return false;\n };\n SpellChecker.prototype.lookThroughNextLine = function (currentText, prevText, elementBox, underlineY, beforeIndex) {\n if (!isNullOrUndefined(elementBox) && elementBox.indexInOwner === elementBox.line.children.length - 1 && !isNullOrUndefined(elementBox.line.nextLine)) {\n var nextLine = elementBox.line.nextLine;\n if (!isNullOrUndefined(nextLine.children[0]) && nextLine.children[0] instanceof TextElementBox) {\n var firstElement = nextLine.children[0];\n if (elementBox.text.lastIndexOf(' ') !== elementBox.text.length - 1 && firstElement.text.indexOf(' ') !== 0) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, true, false, true);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle combined elements\n *\n * @param {TextElementBox} elementBox\n * @param {string} currentText\n * @param {number} underlineY\n * @param {number} beforeIndex\n * @private\n */\n SpellChecker.prototype.handleCombinedElements = function (elementBox, currentText, underlineY, beforeIndex) {\n elementBox.istextCombined = true;\n var splittedText = currentText.split(/[\\s]+/);\n if (this.ignoreAllItems.indexOf(currentText) === -1 && elementBox instanceof TextElementBox && elementBox.ignoreOnceItems.indexOf(currentText) === -1) {\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText_1 = splittedText[i];\n currentText_1 = this.manageSpecialCharacters(currentText_1, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText_1, elementBox, underlineY, i, 0, i === splittedText.length - 1, beforeIndex);\n }\n }\n else {\n currentText = this.manageSpecialCharacters(currentText, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText, elementBox, underlineY, 0, 0, true, beforeIndex);\n }\n }\n };\n /**\n * Method to check error element collection has unique element\n *\n * @param {ErrorTextElementBox[]} errorCollection\n * @param {ErrorTextElementBox} elementToCheck\n * @private\n */\n SpellChecker.prototype.checkArrayHasSameElement = function (errorCollection, elementToCheck) {\n for (var i = 0; i < errorCollection.length; i++) {\n var errorText = errorCollection[i];\n if ((errorText.start.location.x === elementToCheck.start.location.x) && (errorText.start.location.y === elementToCheck.start.location.y)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n SpellChecker.prototype.handleSplitWordSpellCheck = function (jsonObject, currentText, elementBox, isSamePage, underlineY, iteration, markIndex, isLastItem) {\n if (jsonObject.HasSpellingError && elementBox.text !== ' ' && isSamePage) {\n var matchResults = this.getMatchedResultsFromElement(elementBox, currentText);\n markIndex = (elementBox.istextCombined) ? elementBox.line.getOffset(this.getCombinedElement(elementBox), 0) : markIndex;\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, matchResults.textResults, matchResults.elementInfo, 0, elementBox, false, null, markIndex);\n this.handleMatchedResults(matchResults.textResults, elementBox, underlineY, iteration, jsonObject.Suggestions, isLastItem);\n }\n else {\n this.addCorrectWordCollection(currentText);\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n this.updateUniqueWords([{ Text: currentText, HasSpellError: jsonObject.HasSpellingError }]);\n };\n SpellChecker.prototype.handleMatchedResults = function (results, elementBox, wavyLineY, index, suggestions, isLastItem) {\n if (results.length === 0 && isLastItem) {\n elementBox.isSpellChecked = true;\n return;\n }\n for (var i = 0; i < results.length; i++) {\n var span = this.createErrorElementWithInfo(results.innerList[i], elementBox);\n var color = '#FF0000';\n if (!isNullOrUndefined(elementBox.errorCollection) && !this.checkArrayHasSameElement(elementBox.errorCollection, span)) {\n elementBox.errorCollection.splice(index, 0, span);\n }\n this.addErrorCollection(span.text, span, suggestions);\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n this.documentHelper.render.renderWavyLine(span, span.start.location.x, span.start.location.y - elementBox.margin.top, wavyLineY, color, 'Single', elementBox.characterFormat.baselineAlignment, backgroundColor);\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n };\n /**\n * Calls the spell checker service\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.callSpellChecker = function (languageID, word, checkSpelling, checkSuggestion, addWord, isByPage) {\n var _this = this;\n var spellchecker = this;\n return new Promise(function (resolve, reject) {\n if (!isNullOrUndefined(_this)) {\n var httpRequest_1 = new XMLHttpRequest();\n var service_1 = _this.documentHelper.owner.serviceUrl + _this.documentHelper.owner.serverActionSettings.spellCheck;\n service_1 = (isByPage) ? service_1 + 'ByPage' : service_1;\n httpRequest_1.open('POST', service_1, true);\n httpRequest_1.setRequestHeader('Content-Type', 'application/json');\n _this.setCustomHeaders(httpRequest_1);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellCheckData = { LanguageID: languageID, TexttoCheck: word, CheckSpelling: checkSpelling, CheckSuggestion: checkSuggestion, AddWord: addWord };\n var httprequestEventArgs = { serverActionType: 'SpellCheck', headers: _this.documentHelper.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.documentHelper.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (!httprequestEventArgs.cancel) {\n httpRequest_1.send(JSON.stringify(spellCheckData));\n }\n httpRequest_1.onreadystatechange = function () {\n if (httpRequest_1.readyState === 4) {\n if (httpRequest_1.status === 200 || httpRequest_1.status === 304) {\n resolve(httpRequest_1.response);\n }\n else {\n var result = {\n name: 'onFailure',\n status: httpRequest_1.status,\n statusText: httpRequest_1.responseText,\n url: service_1\n };\n spellchecker.documentHelper.owner.fireServiceFailure(result);\n reject(httpRequest_1.response);\n }\n }\n };\n }\n });\n };\n SpellChecker.prototype.setCustomHeaders = function (httpRequest) {\n for (var i = 0; i < this.documentHelper.owner.headers.length; i++) {\n var header = this.documentHelper.owner.headers[i];\n for (var _i = 0, _a = Object.keys(header); _i < _a.length; _i++) {\n var key = _a[_i];\n httpRequest.setRequestHeader(key, header[key]);\n }\n }\n };\n /**\n * Method to check for next error\n *\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.checkForNextError = function () {\n if (!isNullOrUndefined(this.viewer)) {\n var errorWords = this.errorWordCollection;\n if (errorWords.length > 0) {\n for (var i = 0; i < errorWords.length; i++) {\n var errorElements = errorWords.get(errorWords.keys[i]);\n for (var j = 0; j < errorElements.length; j++) {\n if (errorElements[j] instanceof ErrorTextElementBox && !errorElements[j].ischangeDetected) {\n this.updateErrorElementTextBox(errorWords.keys[i], errorElements[j]);\n }\n else if (errorElements[j] instanceof TextElementBox) {\n var matchResults = this.getMatchedResultsFromElement(errorElements[j]);\n var results = matchResults.textResults;\n var markIndex = (errorElements[j].ischangeDetected) ? errorElements[j].start.offset : errorElements[j].line.getOffset(errorElements[j], 0);\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, errorElements[j], false, null, markIndex);\n for (var i_1 = 0; i_1 < results.length; i_1++) {\n var element = this.createErrorElementWithInfo(results.innerList[i_1], errorElements[j]);\n this.updateErrorElementTextBox(element.text, element);\n break;\n }\n }\n break;\n }\n break;\n }\n }\n else {\n this.documentHelper.clearSelectionHighlight();\n }\n }\n };\n /**\n * Method to create error element with matched results\n *\n * @param {TextSearchResult} result\n * @param {ElementBox} errorElement\n * @private\n */\n SpellChecker.prototype.createErrorElementWithInfo = function (result, errorElement) {\n var element = new ErrorTextElementBox();\n element.text = result.text;\n element.start = result.start;\n element.end = result.end;\n element.height = errorElement.height;\n element.canTrigger = errorElement.canTrigger;\n element.characterFormat.copyFormat(errorElement.characterFormat);\n element.width = this.documentHelper.textHelper.getWidth(element.text, errorElement.characterFormat);\n return element;\n };\n /**\n * Method to get matched results from element box\n *\n * @private\n * @param {ElementBox} errorElement - Specifies the error element box.\n * @param {string} currentText - Specifies the current text\n * @returns {MatchResults} - Returns match results info.\n */\n SpellChecker.prototype.getMatchedResultsFromElement = function (errorElement, currentText) {\n var line = errorElement.line;\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex((isNullOrUndefined(currentText)) ? errorElement.text : currentText, 'CaseSensitive');\n this.textSearchResults.clearResults();\n var results = this.textSearchResults;\n var textLineInfo = this.documentHelper.owner.searchModule.textSearch.getElementInfo(line.children[0], 0, false);\n var text = textLineInfo.fullText;\n var matches = [];\n var spans = textLineInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n return { 'matches': matches, 'elementInfo': spans, 'textResults': results };\n };\n /**\n * Method to update error element information\n *\n * @private\n * @param {string} error - Specifies the error word.\n * @param {ErrorTextElementBox} errorElement - Specifies the error element box.\n * @returns {void}\n */\n SpellChecker.prototype.updateErrorElementTextBox = function (error, errorElement) {\n var element = errorElement;\n this.documentHelper.clearSelectionHighlight();\n this.documentHelper.selection.start = element.start;\n this.documentHelper.selection.end = element.end;\n this.documentHelper.selection.highlight(errorElement.start.paragraph, errorElement.start, errorElement.end);\n this.documentHelper.owner.spellCheckDialog.updateSuggestionDialog(error, element);\n };\n /**\n * Method to retrieve space information in a text\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getWhiteSpaceCharacterInfo = function (text, characterFormat) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var width = 0;\n var length = 0;\n matchedText = text.match(/[\\s]+/);\n if (!isNullOrUndefined(matchedText) && matchedText.length > 0) {\n for (var i = 0; i < matchedText.length; i++) {\n width += this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n length += matchedText[i].length;\n }\n }\n return { 'width': width, 'wordLength': length, 'isBeginning': (!isNullOrUndefined(matchedText) && matchedText.index === 0) };\n };\n /**\n * Retrieve Special character info\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getSpecialCharactersInfo = function (text, characterFormat) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var beginingwidth = 0;\n var endWidth = 0;\n var length = 0;\n matchedText = text.match(/^[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n beginingwidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n }\n length = matchedText.length;\n }\n matchedText = text.match(/[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*$/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n endWidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat);\n }\n length = matchedText.length;\n }\n return { 'beginningWidth': beginingwidth, 'endWidth': endWidth, 'wordLength': length };\n };\n /**\n * Method to retrieve next available combined element\n *\n * @private\n * @param {ElementBox} element - Specified the element.\n * @returns {ElementBox} - Returns combined element.\n */\n SpellChecker.prototype.getCombinedElement = function (element) {\n var prevElement = element;\n while (!isNullOrUndefined(element) && element instanceof TextElementBox && element.istextCombined) {\n prevElement = element;\n element = element.previousElement;\n }\n return prevElement;\n };\n SpellChecker.prototype.checkCombinedElementsBeIgnored = function (elements, exactText) {\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].ignoreOnceItems.indexOf(exactText) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Method to update error collection\n *\n * @private\n * @param {TextElementBox} currentElement - Specifies current element.\n * @param {TextElementBox} splittedElement - Specifies splitted element.\n * @returns {void}\n */\n SpellChecker.prototype.updateSplittedElementError = function (currentElement, splittedElement) {\n var errorCount = currentElement.errorCollection.length;\n if (errorCount > 0) {\n var errorCollection = [];\n for (var i = 0; i < errorCount; i++) {\n errorCollection.push(currentElement.errorCollection[i]);\n }\n for (var i = 0; i < errorCount; i++) {\n if (currentElement.text.indexOf(errorCollection[i].text) === -1) {\n splittedElement.ischangeDetected = true;\n currentElement.errorCollection.splice(0, 1);\n }\n }\n }\n };\n /**\n * @private\n * @param {Page} page - Specifies the page.\n * @returns {string} - Returns page content.\n */\n SpellChecker.prototype.getPageContent = function (page) {\n var content = '';\n if (this.documentHelper.owner.sfdtExportModule) {\n var sfdtExport = this.documentHelper.owner.sfdtExportModule;\n sfdtExport.Initialize();\n var document_1 = sfdtExport.writePage(page);\n if (this.documentHelper.owner.textExportModule) {\n var textExport = this.documentHelper.owner.textExportModule;\n textExport.pageContent = '';\n textExport.setDocument(document_1);\n textExport.writeInternal();\n content = textExport.pageContent;\n }\n }\n return content;\n };\n /**\n * @private\n * @param {any[]} spelledWords - Specifies spelledWords\n * @returns {void}\n */\n SpellChecker.prototype.updateUniqueWords = function (spelledWords) {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n this.uniqueSpelledWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n }\n this.uniqueSpelledWords = this.uniqueSpelledWords || {};\n var totalCount = spelledWords.length + Object.keys(this.uniqueSpelledWords).length;\n if (totalCount <= this.uniqueWordsCount) {\n for (var i = 0; i < spelledWords.length; i++) {\n this.checkForUniqueWords(spelledWords[i]);\n }\n }\n localStorage.setItem(this.uniqueKey, JSON.stringify(this.uniqueSpelledWords));\n this.uniqueSpelledWords = {};\n };\n SpellChecker.prototype.checkForUniqueWords = function (spellData) {\n var identityMatched = this.uniqueSpelledWords[spellData.Text];\n if (!identityMatched) {\n this.uniqueSpelledWords[spellData.Text] = spellData.HasSpellError;\n }\n };\n /**\n * Method to clear cached words for spell check\n *\n * @returns {void}\n */\n SpellChecker.prototype.clearCache = function () {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n };\n SpellChecker.prototype.createGuid = function () {\n var dateTime = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (char) {\n var randNo = (dateTime + Math.random() * 16) % 16 | 0;\n dateTime = Math.floor(dateTime / 16);\n return (char === 'x' ? randNo : (randNo & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n };\n /**\n * Check spelling in page data\n *\n * @private\n * @param {string} wordToCheck - Specifies wordToCheck\n * @returns {WordSpellInfo} - Retruns WordSpellInfo\n */\n SpellChecker.prototype.checkSpellingInPageInfo = function (wordToCheck) {\n var hasError = false;\n var elementPresent = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var uniqueWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n if (!isNullOrUndefined(uniqueWords)) {\n if (!isNullOrUndefined(uniqueWords[wordToCheck])) {\n return { hasSpellError: uniqueWords[wordToCheck], isElementPresent: true };\n }\n }\n return { hasSpellError: hasError, isElementPresent: elementPresent };\n };\n /**\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.destroy = function () {\n this.errorWordCollection = undefined;\n this.ignoreAllItems = undefined;\n this.errorSuggestions = undefined;\n this.uniqueWordsCollection = undefined;\n this.uniqueSpelledWords = {};\n this.textSearchResults = undefined;\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n this.documentHelper = undefined;\n };\n return SpellChecker;\n}());\nexport { SpellChecker };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Class which performs optimized text measuring logic to find font height.\n */\nvar Optimized = /** @class */ (function () {\n /**\n * Constructor to initialize Optimized module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object.\n */\n function Optimized(documentHelper) {\n this.documentHelper = documentHelper;\n this.optimizedHeightCollection = {};\n }\n Optimized.prototype.getModuleName = function () {\n return 'Optimized';\n };\n /**\n * Construct key based on the character format.\n *\n * @param {WCharacterFormat} characterFormat - the character format to construct key.\n * @returns {string} - the constructed key.\n */\n Optimized.prototype.getkeyFromCharFormat = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * Method to retrieve font information with optimized text measuring logic.\n *\n * @param {WCharacterFormat} characterFormat -character format to apply.\n * @returns {string} - returns font size information.\n */\n Optimized.prototype.getFontInfo = function (characterFormat) {\n var container = document.createElement('div');\n container.setAttribute('style', 'position:absolute;top:-1000px;left:-1000px;opacity:0;font-size:0px;line-height:normal;');\n // constant tested height value for calculating height factor which matches 90% accuracy with GDI+ value.\n var maxFontHeight = 288;\n var factor = 1.0 / window.devicePixelRatio;\n container.style.transform = 'scale(' + factor.toString() + ',' + factor.toString() + ')';\n /* eslint-disable-next-line max-len */\n container.innerHTML = 'mm';\n document.body.appendChild(container);\n /* eslint-disable-next-line max-len */\n var baseLineFactor = container.firstChild.offsetTop / container.lastChild.offsetHeight;\n var heightFactor = parseFloat((container.lastChild.offsetHeight / maxFontHeight).toFixed(2));\n document.body.removeChild(container);\n return { HeightFactor: heightFactor, BaselineFactor: baseLineFactor };\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @returns {TextSizeInfo} returns text size information.\n */\n Optimized.prototype.getHeightInternal = function (characterFormat) {\n var key = this.getkeyFromCharFormat(characterFormat);\n //With optimized technique, height and baseline factor will be same for each font-family, hence we maintaining cache for the factors and updating height based on font size.\n if (isNullOrUndefined(this.optimizedHeightCollection[key])) {\n var fontInfo = this.getFontInfo(characterFormat);\n this.optimizedHeightCollection[key] = fontInfo;\n var fontHeight = fontInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontInfo.BaselineFactor * fontHeight };\n }\n else {\n var fontSizeInfo = this.optimizedHeightCollection[key];\n var fontHeight = fontSizeInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontSizeInfo.BaselineFactor * fontHeight };\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Optimized.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.optimizedHeightCollection = undefined;\n };\n return Optimized;\n}());\nexport { Optimized };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Class which performs regular text measuring logic to find font height.\n */\nvar Regular = /** @class */ (function () {\n /**\n * Constructor to initialize Regular module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object\n */\n function Regular(documentHelper) {\n this.documentHelper = documentHelper;\n }\n /**\n * Gets module name.\n *\n * @returns {string} - the module name.\n */\n Regular.prototype.getModuleName = function () {\n return 'Regular';\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @returns {TextSizeInfo} returns text size information.\n */\n Regular.prototype.getHeightInternal = function (characterFormat) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.innerText = 'm';\n var iframe = createElement('iframe');\n document.body.appendChild(iframe);\n var innerHtml = ''\n + ''\n + ''\n + ''\n + '';\n if (!isNullOrUndefined(iframe.contentDocument)) {\n iframe.contentDocument.open();\n iframe.contentDocument.write(innerHtml);\n iframe.contentDocument.close();\n }\n this.applyStyle(spanElement, characterFormat);\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'display:inline-block;position:absolute;');\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n iframe.contentDocument.body.appendChild(parentDiv);\n textHeight = spanElement.offsetHeight;\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(iframe);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n Regular.prototype.applyStyle = function (spanElement, characterFormat) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n var style = 'white-space:nowrap;';\n if (characterFormat.fontFamily !== '') {\n style += 'font-family:' + characterFormat.fontFamily + ';';\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n style += 'font-size:' + fontSize.toString() + 'pt;';\n if (characterFormat.bold) {\n style += 'font-weight:bold;';\n }\n if (characterFormat.italic) {\n style += 'font-style:italic;';\n }\n spanElement.setAttribute('style', style);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Regular.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Regular;\n}());\nexport { Regular };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WTableFormat, WSectionFormat, WRowFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, ChartDataFormat, ChartCategory, ChartData, ChartSeries, ChartDataLabels, ChartTrendLines, ChartSeriesFormat, CommentCharacterElementBox, CommentElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, LineFormat, TextFrame, ContentControlProperties, ContentControlListItems, ContentControl, CheckBoxState, XmlMapping, CustomXmlPart, Footnote, FootnoteElementBox, FillFormat, TablePosition } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/dictionary';\nimport { ChartComponent } from '@syncfusion/ej2-office-chart';\nimport { Revision } from '../track-changes/track-changes';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.documentHelper = undefined;\n /**\n * @private\n */\n this.commentStarts = undefined;\n /**\n * @private\n */\n this.commentEnds = undefined;\n /**\n * @private\n */\n this.commentsCollection = undefined;\n /**\n * @private\n */\n this.revisionCollection = undefined;\n this.isPageBreakInsideTable = false;\n this.referedRevisions = [];\n this.isParseHeader = false;\n this.footnotes = undefined;\n this.endnotes = undefined;\n /**\n * @private\n */\n this.isCutPerformed = false;\n /**\n * @private\n */\n this.isPaste = false;\n /**\n * @private\n */\n this.isHtmlPaste = false;\n this.documentHelper = documentHelper;\n this.editableRanges = new Dictionary();\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtReader.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n SfdtReader.prototype.convertJsonToDocument = function (json) {\n this.commentStarts = new Dictionary();\n this.commentEnds = new Dictionary();\n this.commentsCollection = new Dictionary();\n this.revisionCollection = new Dictionary();\n this.referedRevisions = [];\n this.footnotes = new Footnote();\n this.endnotes = new Footnote();\n var sections = [];\n var jsonObject = json;\n jsonObject = (jsonObject instanceof Object) ? jsonObject : JSON.parse(jsonObject);\n var characterFormat = isNullOrUndefined(jsonObject.characterFormat) ?\n this.viewer.owner.characterFormat : jsonObject.characterFormat;\n this.parseCharacterFormat(characterFormat, this.documentHelper.characterFormat);\n var paragraphFormat = isNullOrUndefined(jsonObject.paragraphFormat) ?\n this.viewer.owner.paragraphFormat : jsonObject.paragraphFormat;\n this.parseParagraphFormat(paragraphFormat, this.documentHelper.paragraphFormat);\n this.parseDocumentProtection(jsonObject);\n if (!isNullOrUndefined(jsonObject.defaultTabWidth)) {\n this.documentHelper.defaultTabWidth = jsonObject.defaultTabWidth;\n }\n if (!isNullOrUndefined(jsonObject.trackChanges)) {\n this.documentHelper.owner.enableTrackChanges = jsonObject.trackChanges;\n }\n if (!isNullOrUndefined(jsonObject.dontUseHTMLParagraphAutoSpacing)) {\n this.documentHelper.dontUseHtmlParagraphAutoSpacing = jsonObject.dontUseHTMLParagraphAutoSpacing;\n }\n if (!isNullOrUndefined(jsonObject.alignTablesRowByRow)) {\n this.documentHelper.alignTablesRowByRow = jsonObject.alignTablesRowByRow;\n }\n if (!isNullOrUndefined(jsonObject.background)) {\n this.documentHelper.backgroundColor = this.getColor(jsonObject.background.color);\n }\n if (!isNullOrUndefined(jsonObject.compatibilityMode)) {\n this.documentHelper.compatibilityMode = jsonObject.compatibilityMode;\n if (!isNullOrUndefined(this.documentHelper.owner.documentSettings)) {\n this.documentHelper.owner.documentSettings.compatibilityMode = jsonObject.compatibilityMode;\n }\n }\n if (!isNullOrUndefined(jsonObject.abstractLists)) {\n this.parseAbstractList(jsonObject, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject.lists)) {\n this.parseList(jsonObject, this.documentHelper.lists);\n }\n if (!isNullOrUndefined(jsonObject.styles)) {\n this.parseStyles(jsonObject, this.documentHelper.styles);\n }\n if (!isNullOrUndefined(jsonObject.comments)) {\n this.parseComments(jsonObject, this.documentHelper.comments);\n }\n if (!isNullOrUndefined(jsonObject.revisions)) {\n this.parseRevisions(jsonObject, this.viewer.owner.revisionsInternal.changes);\n }\n if (!isNullOrUndefined(jsonObject.sections)) {\n this.parseSections(jsonObject.sections, sections);\n }\n if (!isNullOrUndefined(jsonObject.customXml)) {\n this.parseCustomXml(jsonObject);\n }\n if (!isNullOrUndefined(jsonObject.formFieldShading)) {\n this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading = jsonObject.formFieldShading;\n }\n if (!isNullOrUndefined(jsonObject.footnotes)) {\n this.parseFootnotes(jsonObject.footnotes, this.documentHelper.footnotes);\n }\n if (!isNullOrUndefined(jsonObject.endnotes)) {\n this.parseEndtnotes(jsonObject.endnotes, this.documentHelper.endnotes);\n }\n this.generalizeRevisions();\n return sections;\n };\n SfdtReader.prototype.generalizeRevisions = function () {\n var _this = this;\n var tempRevisionCollection = new Dictionary();\n var tempRevisons = [];\n this.referedRevisions.forEach(function (element) {\n var revision = _this.documentHelper.revisionsInternal.get(element);\n if (tempRevisons.indexOf(revision) === -1) {\n tempRevisons.push(revision);\n tempRevisionCollection.add(element, revision);\n }\n });\n this.viewer.owner.revisionsInternal.changes = tempRevisons;\n this.documentHelper.revisionsInternal = tempRevisionCollection;\n };\n SfdtReader.prototype.parseFootnotes = function (data, footnote) {\n if (!isNullOrUndefined(data.separator)) {\n this.parseBody(data.separator, footnote.separator);\n }\n if (!isNullOrUndefined(data.continuationNotice)) {\n this.parseBody(data.continuationNotice, footnote.continuationNotice);\n }\n if (!isNullOrUndefined(data.continuationSeparator)) {\n this.parseBody(data.continuationSeparator, footnote.continuationSeparator);\n }\n };\n SfdtReader.prototype.parseEndtnotes = function (data, endnote) {\n if (!isNullOrUndefined(data.separator)) {\n this.parseBody(data.separator, endnote.separator);\n }\n if (!isNullOrUndefined(data.continuationNotice)) {\n this.parseBody(data.continuationNotice, endnote.continuationNotice);\n }\n if (!isNullOrUndefined(data.continuationSeparator)) {\n this.parseBody(data.continuationSeparator, endnote.continuationSeparator);\n }\n };\n SfdtReader.prototype.parseCustomXml = function (data) {\n for (var i = 0; i < data.customXml.length; i++) {\n var xmlData = data.customXml[i];\n if (!this.revisionCollection.containsKey(xmlData.itemID)) {\n this.documentHelper.customXmlData.add(xmlData.itemID, xmlData.xml);\n }\n }\n };\n SfdtReader.prototype.parseDocumentProtection = function (data) {\n if (!isNullOrUndefined(data.formatting)) {\n this.documentHelper.restrictFormatting = data.formatting;\n }\n if (!isNullOrUndefined(data.enforcement)) {\n this.documentHelper.isDocumentProtected = data.enforcement;\n }\n if (!isNullOrUndefined(data.protectionType)) {\n this.documentHelper.protectionType = data.protectionType;\n }\n if (!isNullOrUndefined(data.hashValue)) {\n this.documentHelper.hashValue = data.hashValue;\n }\n if (!isNullOrUndefined(data.saltValue)) {\n this.documentHelper.saltValue = data.saltValue;\n }\n };\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data.styles.length; i++) {\n if (isNullOrUndefined(this.documentHelper.styles.findByName(data.styles[i].name))) {\n this.parseStyle(data, data.styles[i], styles);\n }\n }\n };\n SfdtReader.prototype.parseRevisions = function (data, revisions) {\n for (var i = 0; i < data.revisions.length; i++) {\n var revisionData = data.revisions[i];\n if (!isNullOrUndefined(revisionData.revisionId) && !isNullOrUndefined(revisionData.revisionType)) {\n var revision = this.parseRevision(revisionData);\n var revisionCheck = true;\n if (!this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && this.isPaste) {\n if (revisionData.revisionType === 'Insertion' && this.isPaste && this.documentHelper.owner.enableTrackChanges) {\n continue;\n }\n else {\n if (!this.revisionCollection.containsKey(revisionData.revisionId)) {\n this.revisionCollection.add(revisionData.revisionId, revision);\n }\n }\n }\n else {\n this.revisionCollection.add(revisionData.revisionId, revision);\n }\n for (var j = 0; j < revisions.length; j++) {\n if (revisions[j].revisionID === revision.revisionID) {\n revisionCheck = false;\n }\n }\n if (revisionCheck) {\n revisions.push(revision);\n }\n }\n }\n this.documentHelper.revisionsInternal = this.revisionCollection;\n if (this.documentHelper.owner.sfdtExportModule) {\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n };\n SfdtReader.prototype.parseRevision = function (data) {\n if (!isNullOrUndefined(data)) {\n var revision = new Revision(this.viewer.owner, data.author, data.date);\n revision.revisionID = data.revisionId;\n revision.revisionType = data.revisionType;\n return revision;\n }\n else {\n return undefined;\n }\n };\n SfdtReader.prototype.checkAndApplyRevision = function (inline, item) {\n if (!isNullOrUndefined(inline.revisionIds) && inline.revisionIds.length > 0) {\n for (var i = 0; i < inline.revisionIds.length; i++) {\n var id = inline.revisionIds[i];\n if (this.revisionCollection.containsKey(id)) {\n this.referedRevisions.push(id);\n var revision = this.revisionCollection.get(id);\n if (!(item instanceof WParagraphFormat)) {\n revision.range.push(item);\n }\n item.revisions.push(revision);\n }\n }\n }\n };\n SfdtReader.prototype.parseComments = function (data, comments) {\n var count = 0;\n for (var i = 0; i < data.comments.length; i++) {\n var commentData = data.comments[i];\n var commentElement = undefined;\n commentElement = this.parseComment(commentData, commentElement);\n while (count < commentData.replyComments.length) {\n var replyComment = undefined;\n replyComment = this.parseComment(commentData.replyComments[count], replyComment);\n replyComment.ownerComment = commentElement;\n replyComment.isReply = true;\n commentElement.replyComments.push(replyComment);\n this.commentsCollection.add(replyComment.commentId, replyComment);\n count++;\n }\n this.commentsCollection.add(commentElement.commentId, commentElement);\n comments.push(commentElement);\n count = 0;\n }\n };\n SfdtReader.prototype.parseComment = function (commentData, commentElement) {\n commentElement = new CommentElementBox(commentData.date);\n commentElement.author = commentData.author;\n commentElement.initial = commentData.initial;\n commentElement.commentId = commentData.commentId;\n commentElement.isResolved = commentData.done;\n commentElement.text = this.parseCommentText(commentData.blocks);\n return commentElement;\n };\n SfdtReader.prototype.parseCommentText = function (blocks) {\n var text = '';\n for (var i = 0; i < blocks.length; i++) {\n if (i !== 0) {\n text += '\\n';\n }\n for (var j = 0; j < blocks[i].inlines.length; j++) {\n text = text + blocks[i].inlines[j].text;\n }\n }\n return text;\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles) {\n var wStyle;\n if (!isNullOrUndefined(style.type)) {\n if (style.type === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (style.type === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (!isNullOrUndefined(style.name)) {\n wStyle.name = style.name;\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n wStyle.basedOn = styles.findByName(styleString.name);\n }\n }\n if (!isNullOrUndefined(style.link)) {\n var link = styles.findByName(style.link);\n var linkStyle = this.getStyle(style.link, data);\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n charaStyle.name = style.name + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style.basedOn === 'Normal' ? 'Default Paragraph Font' : (style.basedOn + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style.link : styles.findByName(styleString.name);\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style.characterFormat)) {\n this.parseCharacterFormat(style.characterFormat, wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.parseParagraphFormat(style.paragraphFormat, wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style.next)) {\n if (style.next === style.name) {\n wStyle.next = wStyle;\n }\n else {\n var next = styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style.next, data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data.abstractLists.length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data.abstractLists[i];\n abstractLists.push(abstractList);\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract.abstractListId)) {\n abstractList.abstractListId = abstract.abstractListId;\n }\n if (!isNullOrUndefined(abstract.levels)) {\n for (var j = 0; j < abstract.levels.length; j++) {\n var level = abstract.levels[j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (data.listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n }\n else {\n listLevel.listLevelPattern = data.listLevelPattern;\n listLevel.startAt = data.startAt;\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n if (data.restartLevel >= 0) {\n listLevel.restartLevel = data.restartLevel;\n }\n else {\n listLevel.restartLevel = data.levelNumber;\n }\n }\n listLevel.followCharacter = data.followCharacter;\n this.parseCharacterFormat(data.characterFormat, listLevel.characterFormat);\n this.parseParagraphFormat(data.paragraphFormat, listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data.lists.length; i++) {\n var list = new WList();\n var lists = data.lists[i];\n if (!isNullOrUndefined(lists.abstractListId)) {\n list.abstractListId = lists.abstractListId;\n list.abstractList = this.documentHelper.getAbstractListById(lists.abstractListId);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists.listId)) {\n list.listId = lists.listId;\n }\n if (lists.hasOwnProperty('levelOverrides')) {\n this.parseLevelOverride(lists.levelOverrides, list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride.startAt;\n levelOverrides.levelNumber = levelOverride.levelNumber;\n if (!isNullOrUndefined(levelOverride.overrideListLevel)) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride.overrideListLevel, levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n if (!isNullOrUndefined(item.sectionFormat)) {\n this.parseSectionFormat(item.sectionFormat, section.sectionFormat);\n }\n if (isNullOrUndefined(item.headersFooters)) {\n item.headersFooters = {};\n }\n this.documentHelper.headersFooters.push(this.parseHeaderFooter(item.headersFooters, this.documentHelper.headersFooters));\n this.isParseHeader = false;\n this.parseTextBody(item.blocks, section, i + 1 < data.length);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n this.isParseHeader = true;\n var hfs = {};\n if (!isNullOrUndefined(data.header)) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data.header.blocks, oddHeader);\n }\n if (!isNullOrUndefined(data.footer)) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data.footer.blocks, oddFooter);\n }\n if (!isNullOrUndefined(data.evenHeader)) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data.evenHeader.blocks, evenHeader);\n }\n if (!isNullOrUndefined(data.evenFooter)) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data.evenFooter.blocks, evenFooter);\n }\n if (!isNullOrUndefined(data.firstPageHeader)) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data.firstPageHeader.blocks, firstPageHeader);\n }\n if (!isNullOrUndefined(data.firstPageFooter)) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data.firstPageFooter.blocks, firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section, isSectionBreak) {\n this.parseBody(data, section.childWidgets, section, isSectionBreak);\n };\n SfdtReader.prototype.addCustomStyles = function (data) {\n if (!isNullOrUndefined(data.styles)) {\n for (var i = 0; i < data.styles.length; i++) {\n var style = this.documentHelper.styles.findByName(data.styles[i].name);\n if (style === undefined) {\n this.parseStyle(data, data.styles[i], this.documentHelper.styles);\n }\n }\n }\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container, isSectionBreak, contentControlProperties) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n var hasValidElmts = false;\n if (block.hasOwnProperty('inlines')) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n if (block.inlines.length > 0) {\n hasValidElmts = this.parseParagraph(block.inlines, paragraph, writeInlineFormat);\n }\n if (!(isSectionBreak && block === data[data.length - 1] && !hasValidElmts)) {\n this.parseCharacterFormat(block.characterFormat, paragraph.characterFormat);\n this.parseParagraphFormat(block.paragraphFormat, paragraph.paragraphFormat);\n var styleObj = void 0;\n var styleName = 'Normal';\n if (!isNullOrUndefined(block.paragraphFormat) && !isNullOrUndefined(block.paragraphFormat.styleName)) {\n //Default value to link style object.\n styleName = block.paragraphFormat.styleName;\n }\n styleObj = this.documentHelper.styles.findByName(styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n paragraph.paragraphFormat.applyStyle(styleObj);\n }\n blocks.push(paragraph);\n }\n else if (isSectionBreak && data.length === 1) {\n blocks.push(paragraph);\n }\n paragraph.index = blocks.length - 1;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty('rows')) {\n this.parseTable(block, blocks, blocks.length, container);\n }\n else if (block.hasOwnProperty('contentControlProperties')) {\n var blockStartContentControl = new ContentControl('Block');\n var blockEndContentControl = new ContentControl('Block');\n this.parseContentControlProperties(block.contentControlProperties, blockStartContentControl.contentControlProperties);\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n this.parseBody(block.blocks, blocks, container, isSectionBreak, blockStartContentControl.contentControlProperties);\n for (var j = 0; j < 2; j++) {\n var para = (blocks.length < block.blocks.length) ? blocks[0] : j === 0 ? blocks[blocks.length - block.blocks.length] : blocks[blocks.length - 1];\n var blockWidget = void 0;\n if (para instanceof ParagraphWidget) {\n blockWidget = para;\n }\n else if (para instanceof TableWidget) {\n if (j === 0) {\n blockWidget = para.firstChild.firstChild.firstChild;\n }\n else {\n var cell = para.lastChild.lastChild;\n blockWidget = cell.lastChild;\n }\n }\n if (!isNullOrUndefined(blockWidget) && blockWidget.childWidgets.length === 0) {\n var lineWidget = new LineWidget(blockWidget);\n blockWidget.childWidgets.push(lineWidget);\n }\n if (j === 0) {\n blockWidget.firstChild.children.splice(0, 0, blockStartContentControl);\n blockStartContentControl.line = blockWidget.firstChild;\n }\n else {\n blockWidget.lastChild.children.push(blockEndContentControl);\n blockEndContentControl.line = blockWidget.lastChild;\n }\n }\n }\n if (!isNullOrUndefined(contentControlProperties)) {\n blocks[blocks.length - 1].contentControlProperties = contentControlProperties;\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n table.tableFormat = new WTableFormat(table);\n if (!isNullOrUndefined(block.tableFormat)) {\n this.parseTableFormat(block.tableFormat, table.tableFormat);\n }\n table.title = block.title;\n table.description = block.description;\n this.parseTablePositioning(block, table);\n for (var i = 0; i < block.rows.length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block.rows[i];\n if (!isNullOrUndefined(tableRow.contentControlProperties)) {\n row.contentControlProperties = new ContentControlProperties('Row');\n this.parseContentControlProperties(tableRow.contentControlProperties, row.contentControlProperties);\n }\n if (tableRow.hasOwnProperty('rowFormat')) {\n this.parseRowFormat(tableRow.rowFormat, row.rowFormat);\n this.parseRowGridValues(tableRow, row.rowFormat);\n this.parseRowGridValues(tableRow.rowFormat, row.rowFormat);\n row.index = i;\n for (var j = 0; j < block.rows[i].cells.length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n if (!isNullOrUndefined(block.rows[i].cells[j].contentControlProperties)) {\n cell.contentControlProperties = new ContentControlProperties('Cell');\n this.parseContentControlProperties(block.rows[i].cells[j].contentControlProperties, cell.contentControlProperties);\n }\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n cell.columnIndex = j;\n if (block.rows[i].cells[j].hasOwnProperty('cellFormat')) {\n this.parseCellFormat(block.rows[i].cells[j].cellFormat, cell.cellFormat);\n }\n var item = block.rows[i].cells[j].blocks;\n for (var k = 0; k < item.length; k++) {\n if (item[k].hasOwnProperty('rows')) {\n table.isContainInsideTable = true;\n }\n }\n this.isPageBreakInsideTable = true;\n this.parseTextBody(block.rows[i].cells[j].blocks, cell, false);\n if (!isNullOrUndefined(cell.contentControlProperties)) {\n var cellStartContentControl = new ContentControl('Cell');\n var cellEndContentControl = new ContentControl('Cell');\n cellStartContentControl.contentControlProperties = cell.contentControlProperties;\n cellEndContentControl.contentControlProperties = cell.contentControlProperties;\n cellStartContentControl.type = 0;\n cellEndContentControl.type = 1;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n cellStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, cellStartContentControl);\n cellEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(cellEndContentControl);\n }\n if (!isNullOrUndefined(row.contentControlProperties)) {\n if (row.firstChild === cell) {\n var rowStartContentControl = new ContentControl('Row');\n rowStartContentControl.contentControlProperties = row.contentControlProperties;\n rowStartContentControl.type = 0;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n rowStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, rowStartContentControl);\n }\n else if (row.lastChild === cell) {\n var rowEndContentControl = new ContentControl('Row');\n rowEndContentControl.contentControlProperties = row.contentControlProperties;\n rowEndContentControl.type = 1;\n if (cell.lastChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.lastChild);\n cell.lastChild.childWidgets.push(lineWidget);\n }\n rowEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(rowEndContentControl);\n }\n }\n this.isPageBreakInsideTable = false;\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseTablePositioning = function (block, table) {\n table.wrapTextAround = !isNullOrUndefined(block.wrapTextAround) ? block.wrapTextAround : false;\n if (table.wrapTextAround) {\n table.positioning = new TablePosition();\n table.positioning.allowOverlap = block.positioning.allowOverlap;\n table.positioning.distanceBottom = HelperMethods.convertPointToPixel(block.positioning.distanceBottom);\n table.positioning.distanceLeft = HelperMethods.convertPointToPixel(block.positioning.distanceLeft);\n table.positioning.distanceRight = HelperMethods.convertPointToPixel(block.positioning.distanceRight);\n table.positioning.distanceTop = HelperMethods.convertPointToPixel(block.positioning.distanceTop);\n if (!isNullOrUndefined(block.positioning.verticalAlignment)) {\n table.positioning.verticalAlignment = block.positioning.verticalAlignment;\n }\n if (!isNullOrUndefined(block.positioning.verticalOrigin)) {\n table.positioning.verticalOrigin = block.positioning.verticalOrigin;\n }\n table.positioning.verticalPosition = block.positioning.verticalPosition;\n if (!isNullOrUndefined(block.positioning.horizontalAlignment)) {\n table.positioning.horizontalAlignment = block.positioning.horizontalAlignment;\n }\n if (!isNullOrUndefined(block.positioning.horizontalOrigin)) {\n table.positioning.horizontalOrigin = block.positioning.horizontalOrigin;\n }\n table.positioning.horizontalPosition = block.positioning.horizontalPosition;\n }\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat) {\n if (!isNullOrUndefined(data.gridBefore)) {\n rowFormat.gridBefore = data.gridBefore;\n }\n if (!isNullOrUndefined(data.gridBeforeWidth)) {\n rowFormat.gridBeforeWidth = data.gridBeforeWidth;\n }\n if (!isNullOrUndefined(data.gridBeforeWidthType)) {\n rowFormat.gridBeforeWidthType = data.gridBeforeWidthType;\n }\n if (!isNullOrUndefined(data.gridAfter)) {\n rowFormat.gridAfter = data.gridAfter;\n }\n if (!isNullOrUndefined(data.gridAfterWidth)) {\n rowFormat.gridAfterWidth = data.gridAfterWidth;\n }\n if (!isNullOrUndefined(data.gridAfterWidthType)) {\n rowFormat.gridAfterWidthType = data.gridAfterWidthType;\n }\n };\n SfdtReader.prototype.parseContentControlProperties = function (wContentControlProperties, contentControlProperties) {\n if (!isNullOrUndefined(wContentControlProperties.lockContentControl)) {\n contentControlProperties.lockContentControl = wContentControlProperties.lockContentControl;\n }\n if (!isNullOrUndefined(wContentControlProperties.lockContents)) {\n contentControlProperties.lockContents = wContentControlProperties.lockContents;\n }\n if (!isNullOrUndefined(wContentControlProperties.tag)) {\n contentControlProperties.tag = wContentControlProperties.tag;\n }\n if (!isNullOrUndefined(wContentControlProperties.color)) {\n contentControlProperties.color = wContentControlProperties.color;\n }\n if (!isNullOrUndefined(wContentControlProperties.title)) {\n contentControlProperties.title = wContentControlProperties.title;\n }\n if (!isNullOrUndefined(wContentControlProperties.appearance)) {\n contentControlProperties.appearance = wContentControlProperties.appearance;\n }\n if (!isNullOrUndefined(wContentControlProperties.type)) {\n contentControlProperties.type = wContentControlProperties.type;\n }\n if (!isNullOrUndefined(wContentControlProperties.hasPlaceHolderText)) {\n contentControlProperties.hasPlaceHolderText = wContentControlProperties.hasPlaceHolderText;\n }\n if (!isNullOrUndefined(wContentControlProperties.multiline)) {\n contentControlProperties.multiline = wContentControlProperties.multiline;\n }\n if (!isNullOrUndefined(wContentControlProperties.isTemporary)) {\n contentControlProperties.isTemporary = wContentControlProperties.isTemporary;\n }\n if (!isNullOrUndefined(wContentControlProperties.characterFormat)) {\n this.parseCharacterFormat(wContentControlProperties.characterFormat, contentControlProperties.characterFormat);\n }\n if (contentControlProperties.type === 'CheckBox') {\n if (!isNullOrUndefined(wContentControlProperties.isChecked)) {\n contentControlProperties.isChecked = wContentControlProperties.isChecked;\n }\n if (!isNullOrUndefined(wContentControlProperties.uncheckedState)) {\n contentControlProperties.uncheckedState = new CheckBoxState();\n contentControlProperties.uncheckedState.font = wContentControlProperties.uncheckedState.font;\n contentControlProperties.uncheckedState.value = wContentControlProperties.uncheckedState.value;\n }\n if (!isNullOrUndefined(wContentControlProperties.checkedState)) {\n contentControlProperties.checkedState = new CheckBoxState();\n contentControlProperties.checkedState.font = wContentControlProperties.checkedState.font;\n contentControlProperties.checkedState.value = wContentControlProperties.checkedState.value;\n }\n }\n else if (contentControlProperties.type === 'Date') {\n if (!isNullOrUndefined(wContentControlProperties.dateCalendarType)) {\n contentControlProperties.dateCalendarType = wContentControlProperties.dateCalendarType;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateStorageFormat)) {\n contentControlProperties.dateStorageFormat = wContentControlProperties.dateStorageFormat;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateDisplayLocale)) {\n contentControlProperties.dateDisplayLocale = wContentControlProperties.dateDisplayLocale;\n }\n if (!isNullOrUndefined(wContentControlProperties.dateDisplayFormat)) {\n contentControlProperties.dateDisplayFormat = wContentControlProperties.dateDisplayFormat;\n }\n }\n else if (contentControlProperties.type === 'ComboBox' || contentControlProperties.type === 'DropDownList') {\n if (!isNullOrUndefined(wContentControlProperties.contentControlListItems)) {\n for (var i = 0; i < wContentControlProperties.contentControlListItems.length; i++) {\n var contentControlListItem = new ContentControlListItems();\n contentControlListItem.displayText = wContentControlProperties.contentControlListItems[i].displayText;\n contentControlListItem.value = wContentControlProperties.contentControlListItems[i].value;\n contentControlProperties.contentControlListItems.push(contentControlListItem);\n }\n }\n }\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping)) {\n contentControlProperties.xmlMapping = new XmlMapping();\n contentControlProperties.xmlMapping.isMapped = wContentControlProperties.xmlMapping.isMapped;\n contentControlProperties.xmlMapping.isWordMl = wContentControlProperties.xmlMapping.isWordMl;\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping.prefixMapping)) {\n contentControlProperties.xmlMapping.prefixMapping = wContentControlProperties.xmlMapping.prefixMapping;\n }\n contentControlProperties.xmlMapping.xPath = wContentControlProperties.xmlMapping.xPath;\n contentControlProperties.xmlMapping.storeItemId = wContentControlProperties.xmlMapping.storeItemId;\n if (!isNullOrUndefined(wContentControlProperties.xmlMapping.customXmlPart)) {\n contentControlProperties.xmlMapping.customXmlPart = new CustomXmlPart();\n contentControlProperties.xmlMapping.customXmlPart.id = wContentControlProperties.xmlMapping.customXmlPart.id;\n contentControlProperties.xmlMapping.customXmlPart.xml = wContentControlProperties.xmlMapping.customXmlPart.xml;\n }\n }\n };\n /* eslint-disable */\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat, lineWidget) {\n var isContentControl = false;\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n }\n else {\n isContentControl = true;\n }\n var hasValidElmts = false;\n var revision;\n var trackChange = this.viewer.owner.enableTrackChanges;\n for (var i = 0; i < data.length; i++) {\n var inline = data[i];\n if (inline.hasOwnProperty('text')) {\n var textElement = undefined;\n if (this.documentHelper.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n }\n else if (inline.text === '\\t') {\n textElement = new TabElementBox();\n }\n else if (inline.text === '\\f' && this.isPageBreakInsideTable) {\n continue;\n }\n else {\n textElement = new TextElementBox();\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this.parseCharacterFormat(inline.characterFormat, textElement.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, textElement);\n textElement.text = inline.text;\n if (this.isHtmlPaste && textElement instanceof TextElementBox) {\n var previousElement = void 0;\n if (lineWidget.children.length > 0) {\n previousElement = lineWidget.children[lineWidget.children.length - 1];\n }\n // In html content, text bidi property is not present in the file level\n // Hence bidi property is false for RTL content\n // So, For html pasting we need to check and content and enable bidi to order the content similar to MS Word\n if (this.documentHelper.textHelper.isRTLText(textElement.text)) {\n textElement.characterFormat.bidi = true;\n if (previousElement instanceof TextElementBox && previousElement.text === ' ') {\n previousElement.characterFormat.bidi = true;\n }\n }\n //If previous element is RTL element, the we need to enable bidi for space character\n else if (textElement.text === ' ' && previousElement && previousElement.characterFormat.bidi) {\n textElement.characterFormat.bidi = true;\n }\n }\n if (this.documentHelper.owner.parser.isPaste && !(this.isCutPerformed)) {\n if (!isNullOrUndefined(inline.revisionIds)) {\n for (var j = 0; j < inline.revisionIds.length; j++) {\n if (this.revisionCollection.containsKey(inline.revisionIds[j])) {\n if (trackChange) {\n revision = this.revisionCollection.get(inline.revisionIds[j]);\n }\n if (!isNullOrUndefined(revision) && !isNullOrUndefined(lineWidget.children[i - 1].revisions[j]) && ((!trackChange) || (trackChange && (revision.revisionType === 'Deletion')))) {\n if (revision.revisionID === inline.revisionIds[j]) {\n inline.revisionIds[j] = lineWidget.children[i - 1].revisions[j].revisionID;\n this.checkAndApplyRevision(inline, textElement);\n continue;\n }\n }\n if (!trackChange) {\n revision = this.documentHelper.revisionsInternal.get(inline.revisionIds[j]);\n }\n this.documentHelper.owner.editorModule.insertRevision(textElement, revision.revisionType, revision.author);\n inline.revisionIds[j] = textElement.revisions[j].revisionID;\n }\n }\n }\n }\n else {\n this.checkAndApplyRevision(inline, textElement);\n }\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('footnoteType')) {\n var footnoteElement = new FootnoteElementBox();\n footnoteElement.line = lineWidget;\n footnoteElement.footnoteType = inline.footnoteType;\n if (footnoteElement.footnoteType === 'Footnote') {\n this.documentHelper.footnoteCollection.push(footnoteElement);\n }\n else {\n this.documentHelper.endnoteCollection.push(footnoteElement);\n }\n footnoteElement.symbolCode = inline.symbolCode;\n footnoteElement.symbolFontName = inline.symbolFontName;\n footnoteElement.customMarker = inline.customMarker;\n footnoteElement.characterFormat = new WCharacterFormat(footnoteElement);\n this.parseCharacterFormat(inline.characterFormat, footnoteElement.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, footnoteElement);\n this.parseBody(inline.blocks, footnoteElement.bodyWidget.childWidgets, undefined, false);\n lineWidget.children.push(footnoteElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('chartType')) {\n // chartPreservation\n if (this.documentHelper.owner.editor) {\n this.documentHelper.owner.editor.chartType = true;\n }\n var chartElement = new ChartElementBox();\n chartElement.title = inline.chartTitle;\n chartElement.type = inline.chartType;\n chartElement.chartGapWidth = inline.gapWidth;\n chartElement.chartOverlap = inline.overlap;\n this.parseChartTitleArea(inline.chartTitleArea, chartElement.chartTitleArea);\n this.parseChartArea(inline.chartArea, chartElement.chartArea);\n this.parseChartArea(inline.plotArea, chartElement.chartPlotArea);\n this.parseChartLegend(inline.chartLegend, chartElement.chartLegend);\n this.parseChartData(inline, chartElement);\n this.parseChartCategoryAxis(inline.chartPrimaryCategoryAxis, chartElement.chartPrimaryCategoryAxis);\n this.parseChartCategoryAxis(inline.chartPrimaryValueAxis, chartElement.chartPrimaryValueAxis);\n if (inline.chartDataTable != null) {\n this.parseChartDataTable(inline.chartDataTable, chartElement.chartDataTable);\n }\n chartElement.line = lineWidget;\n lineWidget.children.push(chartElement);\n chartElement.height = HelperMethods.convertPointToPixel(inline.height);\n chartElement.width = HelperMethods.convertPointToPixel(inline.width);\n var officeChart = new ChartComponent();\n officeChart.chartRender(inline);\n chartElement.officeChart = officeChart;\n officeChart.chart.appendTo(chartElement.targetElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('imageString')) {\n var image = new ImageElementBox(data[i].isInlineImage);\n image.isMetaFile = data[i].isMetaFile;\n image.isCompressed = data[i].isCompressed;\n image.metaFileImageString = data[i].metaFileImageString;\n image.characterFormat = new WCharacterFormat(image);\n image.line = lineWidget;\n this.checkAndApplyRevision(inline, image);\n lineWidget.children.push(image);\n var imageString = HelperMethods.formatClippedString(inline.imageString).formatClippedString;\n var isValidImage = this.validateImageUrl(imageString);\n if (!isValidImage) {\n image.imageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n }\n else {\n image.imageString = inline.imageString;\n }\n image.width = HelperMethods.convertPointToPixel(inline.width);\n image.height = HelperMethods.convertPointToPixel(inline.height);\n image.top = inline.top;\n image.left = inline.left;\n image.bottom = inline.bottom;\n image.right = inline.right;\n image.cropHeightScale = inline.getimageheight;\n image.cropWidthScale = inline.getimagewidth;\n image.name = inline.name;\n image.alternativeText = inline.alternativeText;\n image.title = inline.title;\n image.visible = inline.visible;\n image.widthScale = inline.widthScale;\n image.heightScale = inline.heightScale;\n image.verticalPosition = HelperMethods.convertPointToPixel(inline.verticalPosition);\n image.verticalOrigin = inline.verticalOrigin;\n image.verticalAlignment = inline.verticalAlignment;\n image.horizontalPosition = HelperMethods.convertPointToPixel(inline.horizontalPosition);\n image.horizontalOrigin = inline.horizontalOrigin;\n image.horizontalAlignment = inline.horizontalAlignment;\n image.allowOverlap = inline.allowOverlap;\n image.textWrappingStyle = isNullOrUndefined(inline.textWrappingStyle) ? 'Inline' : inline.textWrappingStyle;\n image.textWrappingType = inline.textWrappingType;\n image.zOrderPosition = inline.zOrderPosition;\n image.layoutInCell = inline.layoutInCell;\n if (!isNullOrUndefined(inline.top) && inline.top !== 0 ||\n !isNullOrUndefined(inline.bottom) && inline.bottom !== 0 ||\n !isNullOrUndefined(inline.left) && inline.left !== 0 ||\n !isNullOrUndefined(inline.right) && inline.right !== 0) {\n image.isCrop = true;\n }\n if (image.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(image);\n }\n this.parseCharacterFormat(inline.characterFormat, image.characterFormat);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('hasFieldEnd') || (inline.hasOwnProperty('fieldType') && inline.fieldType === 0)) {\n var fieldBegin = new FieldElementBox(0);\n this.parseCharacterFormat(inline.characterFormat, fieldBegin.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, fieldBegin);\n fieldBegin.fieldCodeType = inline.fieldCodeType;\n fieldBegin.hasFieldEnd = inline.hasFieldEnd;\n if (inline.hasOwnProperty('formFieldData')) {\n var formFieldData = void 0;\n if (inline.formFieldData.hasOwnProperty('textInput')) {\n formFieldData = new TextFormField();\n formFieldData.type = inline.formFieldData.textInput.type;\n formFieldData.maxLength = inline.formFieldData.textInput.maxLength;\n formFieldData.defaultValue = inline.formFieldData.textInput.defaultValue;\n formFieldData.format = inline.formFieldData.textInput.format;\n }\n else if (inline.formFieldData.hasOwnProperty('checkBox')) {\n formFieldData = new CheckBoxFormField();\n formFieldData.sizeType = inline.formFieldData.checkBox.sizeType;\n formFieldData.size = inline.formFieldData.checkBox.size;\n formFieldData.defaultValue = inline.formFieldData.checkBox.defaultValue;\n formFieldData.checked = inline.formFieldData.checkBox.checked;\n }\n else {\n formFieldData = new DropDownFormField();\n formFieldData.dropdownItems = inline.formFieldData.dropDownList.dropDownItems;\n formFieldData.selectedIndex = inline.formFieldData.dropDownList.selectedIndex;\n }\n formFieldData.name = inline.formFieldData.name;\n formFieldData.enabled = inline.formFieldData.enabled;\n formFieldData.helpText = inline.formFieldData.helpText;\n formFieldData.statusText = inline.formFieldData.statusText;\n fieldBegin.formFieldData = formFieldData;\n this.documentHelper.formFields.push(fieldBegin);\n }\n this.documentHelper.fieldStacks.push(fieldBegin);\n this.checkAndApplyRevision(inline, fieldBegin);\n fieldBegin.line = lineWidget;\n this.documentHelper.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n var field = undefined;\n if (inline.fieldType === 2) {\n field = new FieldElementBox(2);\n this.parseCharacterFormat(inline.characterFormat, field.characterFormat, writeInlineFormat);\n this.fieldSeparator = field;\n if (this.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2) {\n var fieldTextElement = this.containsFieldBegin(lineWidget);\n if (!isNullOrUndefined(fieldTextElement) && fieldTextElement instanceof TextElementBox && (fieldTextElement.text.match('PAGE') || fieldTextElement.text.match('page'))) {\n this.documentHelper.isPageField = true;\n }\n }\n }\n }\n else if (inline.fieldType === 1) {\n field = new FieldElementBox(1);\n this.parseCharacterFormat(inline.characterFormat, field.characterFormat, writeInlineFormat);\n this.applyCharacterStyle(inline, field);\n this.checkAndApplyRevision(inline, field);\n //For Field End Updated begin and separator. \n if (this.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n hasValidElmts = true;\n }\n //After setting all the property clear the field values\n this.documentHelper.fieldStacks.splice(this.documentHelper.fieldStacks.length - 1, 1);\n this.fieldSeparator = undefined;\n this.documentHelper.isPageField = false;\n this.documentHelper.fieldCollection.push(field.fieldBegin);\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty('bookmarkType')) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline.bookmarkType);\n bookmark.name = inline.name;\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (!this.isParseHeader || this.isPaste) {\n if (inline.bookmarkType === 0) {\n var isAdd = this.isPaste && !this.documentHelper.bookmarks.containsKey(bookmark.name);\n if (!this.isPaste || isAdd) {\n this.documentHelper.bookmarks.add(bookmark.name, bookmark);\n }\n else if (!isAdd) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n else if (inline.bookmarkType === 1) {\n if (this.documentHelper.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this.documentHelper.bookmarks.get(bookmark.name);\n var isConsider = this.isPaste && isNullOrUndefined(bookmarkStart.reference);\n if (!this.isPaste || isConsider) {\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n }\n else if (!isConsider) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n }\n }\n if (bookmark.name.indexOf('_') !== 0) {\n hasValidElmts = true;\n }\n }\n else if (inline.hasOwnProperty('editRangeId')) {\n if (inline.hasOwnProperty('editableRangeStart')) {\n var permEnd = new EditRangeEndElementBox();\n if (this.editableRanges.containsKey(inline.editRangeId)) {\n var start = this.editableRanges.get(inline.editRangeId);\n permEnd.editRangeStart = start;\n start.editRangeEnd = permEnd;\n this.editableRanges.remove(inline.editRangeId);\n }\n lineWidget.children.push(permEnd);\n permEnd.line = lineWidget;\n }\n else {\n var permStart = this.parseEditableRangeStart(inline);\n lineWidget.children.push(permStart);\n permStart.line = lineWidget;\n if (!this.editableRanges.containsKey(inline.editRangeId)) {\n this.editableRanges.add(inline.editRangeId, permStart);\n }\n }\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty('commentId')) {\n var commentID = inline.commentId;\n var commentStart = undefined;\n var comment = void 0;\n if (this.commentStarts.containsKey(commentID)) {\n commentStart = this.commentStarts.get(commentID);\n }\n var commentEnd = undefined;\n if (this.commentEnds.containsKey(commentID)) {\n commentEnd = this.commentEnds.get(commentID);\n }\n if (inline.hasOwnProperty('commentCharacterType')) {\n if (inline.commentCharacterType === 0) {\n var commentStartElement = new CommentCharacterElementBox(0);\n commentStartElement.commentId = commentID;\n if (!this.commentStarts.containsKey(commentID)) {\n this.commentStarts.add(commentID, commentStartElement);\n }\n commentStartElement.line = lineWidget;\n lineWidget.children.push(commentStartElement);\n comment = this.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentStart = commentStartElement;\n commentStartElement.comment = comment;\n }\n }\n else {\n var commentEndElement = new CommentCharacterElementBox(1);\n commentEndElement.commentId = commentID;\n if (!this.commentEnds.containsKey(commentID)) {\n this.commentEnds.add(commentID, commentEndElement);\n }\n commentEndElement.line = lineWidget;\n lineWidget.children.push(commentEndElement);\n comment = this.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentEnd = commentEndElement;\n commentEndElement.comment = comment;\n }\n }\n if (!isNullOrUndefined(comment) && comment.isReply) {\n if (isNullOrUndefined(comment.ownerComment.commentStart)) {\n comment.ownerComment.commentStart = comment.commentStart;\n }\n if (isNullOrUndefined(comment.ownerComment.commentEnd)) {\n comment.ownerComment.commentEnd = comment.commentEnd;\n }\n }\n }\n }\n else if (inline.hasOwnProperty('shapeId')) {\n var shape = new ShapeElementBox();\n shape.shapeId = inline.shapeId;\n shape.name = inline.name;\n shape.alternativeText = inline.alternativeText;\n shape.title = inline.title;\n shape.visible = inline.visible;\n shape.width = HelperMethods.convertPointToPixel(inline.width);\n shape.height = HelperMethods.convertPointToPixel(inline.height);\n shape.widthScale = inline.widthScale;\n shape.heightScale = inline.heightScale;\n shape.verticalPosition = HelperMethods.convertPointToPixel(inline.verticalPosition);\n shape.verticalOrigin = inline.verticalOrigin;\n shape.verticalAlignment = inline.verticalAlignment;\n shape.verticalRelativePercent = inline.verticalRelativePercent;\n shape.horizontalPosition = HelperMethods.convertPointToPixel(inline.horizontalPosition);\n shape.horizontalOrigin = inline.horizontalOrigin;\n shape.horizontalAlignment = inline.horizontalAlignment;\n shape.horizontalRelativePercent = inline.horizontalRelativePercent;\n shape.zOrderPosition = inline.zOrderPosition;\n shape.allowOverlap = inline.allowOverlap;\n shape.textWrappingStyle = isNullOrUndefined(inline.textWrappingStyle) ? 'InFrontOfText' : inline.textWrappingStyle;\n shape.textWrappingType = inline.textWrappingType;\n shape.distanceBottom = HelperMethods.convertPointToPixel(inline.distanceBottom);\n shape.distanceLeft = HelperMethods.convertPointToPixel(inline.distanceLeft);\n shape.distanceRight = HelperMethods.convertPointToPixel(inline.distanceRight);\n shape.distanceTop = HelperMethods.convertPointToPixel(inline.distanceTop);\n shape.layoutInCell = inline.layoutInCell;\n shape.lockAnchor = inline.lockAnchor;\n shape.autoShapeType = inline.autoShapeType;\n if (inline.hasOwnProperty('lineFormat')) {\n var lineFormat = new LineFormat();\n lineFormat.line = inline.lineFormat.line;\n lineFormat.lineFormatType = inline.lineFormat.lineFormatType;\n lineFormat.color = inline.lineFormat.color;\n lineFormat.weight = inline.lineFormat.weight;\n lineFormat.dashStyle = inline.lineFormat.lineStyle;\n shape.lineFormat = lineFormat;\n }\n if (inline.hasOwnProperty('fillFormat')) {\n var fillFormat = new FillFormat();\n fillFormat.color = inline.fillFormat.color;\n fillFormat.fill = inline.fillFormat.fill;\n shape.fillFormat = fillFormat;\n }\n if (inline.hasOwnProperty('textFrame')) {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = inline.textFrame.textVerticalAlignment;\n textFrame.marginLeft = HelperMethods.convertPointToPixel(inline.textFrame.leftMargin);\n textFrame.marginRight = HelperMethods.convertPointToPixel(inline.textFrame.rightMargin);\n textFrame.marginTop = HelperMethods.convertPointToPixel(inline.textFrame.topMargin);\n textFrame.marginBottom = HelperMethods.convertPointToPixel(inline.textFrame.bottomMargin);\n this.parseBody(inline.textFrame.blocks, textFrame.childWidgets, textFrame);\n shape.textFrame = textFrame;\n textFrame.containerShape = shape;\n }\n shape.line = lineWidget;\n lineWidget.children.push(shape);\n if (shape.textWrappingStyle !== 'Inline') {\n paragraph.floatingElements.push(shape);\n }\n }\n else if (inline.hasOwnProperty('contentControlProperties')) {\n var inlineStartContentControl = new ContentControl('Inline');\n var inlineEndContentControl = new ContentControl('Inline');\n this.parseContentControlProperties(inline.contentControlProperties, inlineStartContentControl.contentControlProperties);\n inlineEndContentControl.contentControlProperties = inlineStartContentControl.contentControlProperties;\n inlineStartContentControl.line = lineWidget;\n inlineEndContentControl.line = lineWidget;\n inlineStartContentControl.type = 0;\n inlineEndContentControl.type = 1;\n lineWidget.children.push(inlineStartContentControl);\n this.parseParagraph(inline.inlines, paragraph, writeInlineFormat, lineWidget);\n var element = lineWidget.children[lineWidget.children.length - 1];\n while (!(element instanceof ContentControl)) {\n element.contentControlProperties = inlineStartContentControl.contentControlProperties;\n element = element.previousElement;\n }\n lineWidget.children.push(inlineEndContentControl);\n hasValidElmts = true;\n }\n }\n this.isCutPerformed = false;\n if (!isContentControl) {\n paragraph.childWidgets.push(lineWidget);\n }\n return hasValidElmts;\n };\n SfdtReader.prototype.applyCharacterStyle = function (inline, elementbox) {\n if (!isNullOrUndefined(inline.characterFormat) && !isNullOrUndefined(inline.characterFormat.styleName)) {\n var charStyle = this.documentHelper.styles.findByName(inline.characterFormat.styleName, 'Character');\n elementbox.characterFormat.applyStyle(charStyle);\n }\n };\n SfdtReader.prototype.parseEditableRangeStart = function (data) {\n var permStart = new EditRangeStartElementBox();\n if (!isNullOrUndefined(data.columnFirst)) {\n permStart.columnFirst = data.columnFirst;\n }\n if (!isNullOrUndefined(data.columnLast)) {\n permStart.columnLast = data.columnLast;\n }\n if (!isNullOrUndefined(data.user)) {\n permStart.user = data.user;\n if (this.documentHelper.userCollection.indexOf(permStart.user) === -1) {\n this.documentHelper.userCollection.push(permStart.user);\n }\n this.addEditRangeCollection(permStart.user, permStart);\n }\n if (!isNullOrUndefined(data.group) && data.group !== '') {\n permStart.group = data.group;\n permStart.group = permStart.group === 'everyone' ? 'Everyone' : permStart.group;\n if (this.documentHelper.userCollection.indexOf(permStart.group) === -1) {\n this.documentHelper.userCollection.push(permStart.group);\n }\n this.addEditRangeCollection(permStart.group, permStart);\n }\n return permStart;\n };\n SfdtReader.prototype.addEditRangeCollection = function (name, permStart) {\n if (this.documentHelper.editRanges.containsKey(name)) {\n var editStartCollection = this.documentHelper.editRanges.get(name);\n editStartCollection.push(permStart);\n }\n else {\n var newEditStartCollection = [];\n newEditStartCollection.push(permStart);\n this.documentHelper.editRanges.add(name, newEditStartCollection);\n }\n };\n SfdtReader.prototype.parseChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea.chartfontName = titleArea.fontName;\n chartTitleArea.chartFontSize = titleArea.fontSize;\n this.parseChartDataFormat(titleArea.dataFormat, chartTitleArea.dataFormat);\n this.parseChartLayout(titleArea.layout, chartTitleArea.layout);\n };\n SfdtReader.prototype.parseChartDataFormat = function (format, dataFormat) {\n dataFormat.fill.color = format.fill.foreColor;\n dataFormat.fill.rgb = format.fill.rgb;\n dataFormat.line.color = format.line.color;\n dataFormat.line.rgb = format.line.rgb;\n };\n SfdtReader.prototype.parseChartLayout = function (layout, chartLayout) {\n chartLayout.chartLayoutLeft = layout.layoutX;\n chartLayout.chartLayoutTop = layout.layoutY;\n };\n SfdtReader.prototype.parseChartLegend = function (legend, chartLegend) {\n chartLegend.chartLegendPostion = legend.position;\n this.parseChartTitleArea(legend.chartTitleArea, chartLegend.chartTitleArea);\n };\n SfdtReader.prototype.parseChartCategoryAxis = function (categoryAxis, primaryAxis) {\n primaryAxis.categoryAxisType = categoryAxis.categoryType;\n primaryAxis.categoryNumberFormat = categoryAxis.numberFormat;\n primaryAxis.interval = categoryAxis.majorUnit;\n primaryAxis.axisFontSize = categoryAxis.fontSize;\n primaryAxis.axisFontName = categoryAxis.fontName;\n primaryAxis.max = categoryAxis.maximumValue;\n primaryAxis.min = categoryAxis.minimumValue;\n primaryAxis.majorGridLines = categoryAxis.hasMajorGridLines;\n primaryAxis.minorGridLines = categoryAxis.hasMinorGridLines;\n primaryAxis.majorTick = categoryAxis.majorTickMark;\n primaryAxis.minorTick = categoryAxis.minorTickMark;\n primaryAxis.tickPosition = categoryAxis.tickLabelPosition;\n primaryAxis.categoryAxisTitle = categoryAxis.chartTitle;\n if (categoryAxis.chartTitle != null) {\n this.parseChartTitleArea(categoryAxis.chartTitleArea, primaryAxis.chartTitleArea);\n }\n };\n SfdtReader.prototype.parseChartDataTable = function (dataTable, chartDataTable) {\n chartDataTable.showSeriesKeys = dataTable.showSeriesKeys;\n chartDataTable.hasHorzBorder = dataTable.hasHorzBorder;\n chartDataTable.hasVertBorder = dataTable.hasVertBorder;\n chartDataTable.hasBorders = dataTable.hasBorders;\n };\n SfdtReader.prototype.parseChartArea = function (area, chartArea) {\n chartArea.chartForeColor = area.foreColor;\n };\n SfdtReader.prototype.parseChartData = function (inline, chart) {\n for (var i = 0; i < inline.chartCategory.length; i++) {\n var chartCategory = new ChartCategory();\n var xData = inline.chartCategory[i];\n if (xData.hasOwnProperty('categoryXName')) {\n chartCategory.xName = xData.categoryXName;\n }\n for (var j = 0; j < xData.chartData.length; j++) {\n var chartData = new ChartData();\n var yData = xData.chartData[j];\n chartData.yAxisValue = yData.yValue;\n if (inline.chartType === 'Bubble') {\n chartData.bubbleSize = yData.size;\n }\n chartCategory.chartData.push(chartData);\n }\n chart.chartCategory.push(chartCategory);\n }\n this.parseChartSeries(inline, chart);\n };\n SfdtReader.prototype.parseChartSeries = function (inline, chart) {\n var chartType = inline.chartType;\n var isPieType = (chartType === 'Pie' || chartType === 'Doughnut');\n for (var i = 0; i < inline.chartSeries.length; i++) {\n var chartSeries = new ChartSeries();\n var xData = inline.chartSeries[i];\n if (xData.hasOwnProperty('seriesName')) {\n chartSeries.seriesName = xData.seriesName;\n if (isPieType) {\n if (xData.hasOwnProperty('firstSliceAngle')) {\n chartSeries.firstSliceAngle = xData.firstSliceAngle;\n }\n if (chartType === 'Doughnut') {\n chartSeries.doughnutHoleSize = xData.holeSize;\n }\n }\n if (xData.hasOwnProperty('dataLabel')) {\n this.parseChartDataLabels(xData.dataLabel, chartSeries);\n }\n if (xData.hasOwnProperty('seriesFormat')) {\n var seriesFormat = new ChartSeriesFormat();\n var format = xData.seriesFormat;\n seriesFormat.markerStyle = format.markerStyle;\n seriesFormat.markerColor = format.markerColor;\n seriesFormat.numberValue = format.markerSize;\n chartSeries.seriesFormat = seriesFormat;\n }\n if (xData.hasOwnProperty('errorBar')) {\n var errorBar = chartSeries.errorBar;\n errorBar.errorType = xData.errorBar.type;\n errorBar.errorDirection = xData.errorBar.direction;\n errorBar.errorEndStyle = xData.errorBar.endStyle;\n errorBar.numberValue = xData.errorBar.numberValue;\n }\n if (xData.hasOwnProperty('trendLines')) {\n this.parseChartTrendLines(xData.trendLines, chartSeries);\n }\n this.parseChartSeriesDataPoints(xData.dataPoints, chartSeries);\n }\n chart.chartSeries.push(chartSeries);\n }\n };\n SfdtReader.prototype.parseChartDataLabels = function (dataLabels, series) {\n var dataLabel = new ChartDataLabels();\n dataLabel.labelPosition = dataLabels.position;\n dataLabel.fontName = dataLabels.fontName;\n dataLabel.fontColor = dataLabels.fontColor;\n dataLabel.fontSize = dataLabels.fontSize;\n dataLabel.isLegendKey = dataLabels.isLegendKey;\n dataLabel.isBubbleSize = dataLabels.isBubbleSize;\n dataLabel.isCategoryName = dataLabels.isCategoryName;\n dataLabel.isSeriesName = dataLabels.isSeriesName;\n dataLabel.isValue = dataLabels.isValue;\n dataLabel.isPercentage = dataLabels.isPercentage;\n dataLabel.isLeaderLines = dataLabels.isLeaderLines;\n series.dataLabels = dataLabel;\n };\n SfdtReader.prototype.parseChartSeriesDataPoints = function (dataPoints, series) {\n for (var i = 0; i < dataPoints.length; i++) {\n var chartFormat = new ChartDataFormat();\n this.parseChartDataFormat(dataPoints[i], chartFormat);\n series.chartDataFormat.push(chartFormat);\n }\n };\n SfdtReader.prototype.parseChartTrendLines = function (trendLines, series) {\n for (var i = 0; i < trendLines.length; i++) {\n var data = trendLines[i];\n var trendLine = new ChartTrendLines();\n trendLine.trendLineName = data.name;\n trendLine.trendLineType = data.type;\n trendLine.forwardValue = data.forward;\n trendLine.backwardValue = data.backward;\n trendLine.interceptValue = data.intercept;\n trendLine.isDisplayEquation = data.isDisplayEquation;\n trendLine.isDisplayRSquared = data.isDisplayRSquared;\n series.trendLines.push(trendLine);\n }\n };\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat) {\n this.parseBorders(sourceFormat.borders, tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat.allowAutoFit)) {\n tableFormat.allowAutoFit = sourceFormat.allowAutoFit;\n }\n if (!isNullOrUndefined(sourceFormat.cellSpacing)) {\n tableFormat.cellSpacing = sourceFormat.cellSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n tableFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n tableFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n tableFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n tableFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n tableFormat.leftIndent = sourceFormat.leftIndent;\n }\n this.parseShading(sourceFormat.shading, tableFormat.shading);\n if (!isNullOrUndefined(sourceFormat.tableAlignment)) {\n tableFormat.tableAlignment = sourceFormat.tableAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n tableFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n tableFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n tableFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.horizontalPositionAbs)) {\n tableFormat.horizontalPositionAbs = sourceFormat.horizontalPositionAbs;\n }\n if (!isNullOrUndefined(sourceFormat.horizontalPosition)) {\n tableFormat.horizontalPosition = sourceFormat.horizontalPosition;\n }\n if (!isNullOrUndefined(sourceFormat.styleName)) {\n tableFormat.styleName = sourceFormat.styleName;\n }\n };\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(sourceFormat.borders, cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat);\n }\n if (!isNullOrUndefined(sourceFormat.cellWidth)) {\n cellFormat.cellWidth = sourceFormat.cellWidth;\n }\n if (!isNullOrUndefined(sourceFormat.columnSpan)) {\n cellFormat.columnSpan = sourceFormat.columnSpan;\n }\n if (!isNullOrUndefined(sourceFormat.rowSpan)) {\n cellFormat.rowSpan = sourceFormat.rowSpan;\n }\n this.parseShading(sourceFormat.shading, cellFormat.shading);\n if (!isNullOrUndefined(sourceFormat.verticalAlignment)) {\n cellFormat.verticalAlignment = sourceFormat.verticalAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n cellFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n cellFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n cellFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n cellFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n cellFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n cellFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n };\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.allowBreakAcrossPages)) {\n rowFormat.allowBreakAcrossPages = sourceFormat.allowBreakAcrossPages;\n }\n if (!isNullOrUndefined(sourceFormat.isHeader)) {\n rowFormat.isHeader = sourceFormat.isHeader;\n }\n if (!isNullOrUndefined(sourceFormat.heightType)) {\n rowFormat.heightType = sourceFormat.heightType;\n }\n if (!isNullOrUndefined(sourceFormat.height)) {\n rowFormat.height = sourceFormat.height;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n rowFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n rowFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n rowFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n rowFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n rowFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.revisionIds) && sourceFormat.revisionIds.length > 0) {\n this.checkAndApplyRevision(sourceFormat, rowFormat);\n }\n this.parseBorders(sourceFormat.borders, rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n destBorder.isParsing = true;\n this.parseBorder(sourceBorders.left, destBorder.left);\n this.parseBorder(sourceBorders.right, destBorder.right);\n this.parseBorder(sourceBorders.top, destBorder.top);\n this.parseBorder(sourceBorders.bottom, destBorder.bottom);\n this.parseBorder(sourceBorders.vertical, destBorder.vertical);\n this.parseBorder(sourceBorders.horizontal, destBorder.horizontal);\n this.parseBorder(sourceBorders.diagonalDown, destBorder.diagonalDown);\n this.parseBorder(sourceBorders.diagonalUp, destBorder.diagonalUp);\n destBorder.isParsing = false;\n }\n };\n SfdtReader.prototype.parseBorder = function (sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder.color)) {\n destBorder.color = this.getColor(sourceBorder.color);\n }\n if (!isNullOrUndefined(sourceBorder.lineStyle)) {\n destBorder.lineStyle = sourceBorder.lineStyle;\n }\n if (!isNullOrUndefined(sourceBorder.lineWidth)) {\n destBorder.lineWidth = sourceBorder.lineWidth;\n }\n if (!isNullOrUndefined(sourceBorder.hasNoneStyle)) {\n destBorder.hasNoneStyle = sourceBorder.hasNoneStyle;\n }\n if (!isNullOrUndefined(sourceBorder.space)) {\n destBorder.space = sourceBorder.space;\n }\n if (!isNullOrUndefined(sourceBorder.shadow)) {\n destBorder.shadow = sourceBorder.shadow;\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading.backgroundColor)) {\n destShading.backgroundColor = this.getColor(sourceShading.backgroundColor);\n }\n if (!isNullOrUndefined(sourceShading.foregroundColor)) {\n destShading.foregroundColor = this.getColor(sourceShading.foregroundColor);\n }\n if (!isNullOrUndefined(sourceShading.texture) || !isNullOrUndefined(sourceShading.textureStyle)) {\n destShading.textureStyle = !isNullOrUndefined(sourceShading.texture) ? sourceShading.texture : sourceShading.textureStyle;\n }\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseCharacterFormat = function (sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty('inlineFormat')) {\n this.parseCharacterFormat(sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat.baselineAlignment)) {\n characterFormat.baselineAlignment = sourceFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.underline)) {\n characterFormat.underline = sourceFormat.underline;\n }\n if (!isNullOrUndefined(sourceFormat.strikethrough)) {\n characterFormat.strikethrough = sourceFormat.strikethrough;\n }\n if (!isNullOrUndefined(sourceFormat.fontSize)) {\n sourceFormat.fontSize = parseFloat(sourceFormat.fontSize);\n var number = sourceFormat.fontSize * 10;\n if (number % 10 !== 0) {\n number = sourceFormat.fontSize.toFixed(1) * 10;\n //to check worst case scenerio like 8.2 or 8.7 like these to round off\n if (number % 5 === 0) {\n sourceFormat.fontSize = sourceFormat.fontSize.toFixed(1);\n }\n else {\n sourceFormat.fontSize = Math.round(sourceFormat.fontSize);\n }\n }\n var fontSize = parseFloat(sourceFormat.fontSize);\n characterFormat.fontSize = fontSize < 0 ? 0 : fontSize;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamily)) {\n if (sourceFormat.fontFamily.indexOf('\"') !== -1) {\n sourceFormat.fontFamily = sourceFormat.fontFamily.replace('\"', '');\n }\n characterFormat.fontFamily = sourceFormat.fontFamily;\n }\n if (!isNullOrUndefined(sourceFormat.bold)) {\n characterFormat.bold = sourceFormat.bold;\n }\n if (!isNullOrUndefined(sourceFormat.italic)) {\n characterFormat.italic = sourceFormat.italic;\n }\n if (!isNullOrUndefined(sourceFormat.highlightColor)) {\n characterFormat.highlightColor = sourceFormat.highlightColor;\n }\n if (!isNullOrUndefined(sourceFormat.fontColor)) {\n characterFormat.fontColor = this.getColor(sourceFormat.fontColor);\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n characterFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.bdo)) {\n characterFormat.bdo = sourceFormat.bdo;\n }\n if (!isNullOrUndefined(sourceFormat.fontSizeBidi)) {\n characterFormat.fontSizeBidi = sourceFormat.fontSizeBidi < 0 ? 0 : sourceFormat.fontSizeBidi;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamilyBidi)) {\n characterFormat.fontFamilyBidi = sourceFormat.fontFamilyBidi;\n }\n if (!isNullOrUndefined(sourceFormat.boldBidi)) {\n characterFormat.boldBidi = sourceFormat.boldBidi;\n }\n if (!isNullOrUndefined(sourceFormat.italicBidi)) {\n characterFormat.italicBidi = sourceFormat.italicBidi;\n }\n if (!isNullOrUndefined(sourceFormat.revisionIds) && sourceFormat.revisionIds.length > 0) {\n this.checkAndApplyRevision(sourceFormat, characterFormat);\n }\n if (!isNullOrUndefined(sourceFormat.allCaps)) {\n characterFormat.allCaps = sourceFormat.allCaps;\n }\n if (!isNullOrUndefined(sourceFormat.localeIdBidi)) {\n characterFormat.localeIdBidi = sourceFormat.localeIdBidi;\n }\n }\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseParagraphFormat = function (sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.borders)) {\n this.parseBorders(sourceFormat.borders, paragraphFormat.borders);\n }\n if (!isNullOrUndefined(sourceFormat.bidi)) {\n paragraphFormat.bidi = sourceFormat.bidi;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n paragraphFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.rightIndent)) {\n paragraphFormat.rightIndent = sourceFormat.rightIndent;\n }\n if (!isNullOrUndefined(sourceFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = sourceFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(sourceFormat.afterSpacing)) {\n paragraphFormat.afterSpacing = sourceFormat.afterSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.beforeSpacing)) {\n paragraphFormat.beforeSpacing = sourceFormat.beforeSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.spaceBeforeAuto)) {\n paragraphFormat.spaceBeforeAuto = sourceFormat.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(sourceFormat.spaceAfterAuto)) {\n paragraphFormat.spaceAfterAuto = sourceFormat.spaceAfterAuto;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacing = sourceFormat.lineSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = sourceFormat.lineSpacingType;\n }\n else {\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacingType = 'Multiple';\n }\n }\n if (!isNullOrUndefined(sourceFormat.textAlignment)) {\n paragraphFormat.textAlignment = sourceFormat.textAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = sourceFormat.outlineLevel;\n }\n if (!isNullOrUndefined(sourceFormat.contextualSpacing)) {\n paragraphFormat.contextualSpacing = sourceFormat.contextualSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.keepWithNext)) {\n paragraphFormat.keepWithNext = sourceFormat.keepWithNext;\n }\n if (!isNullOrUndefined(sourceFormat.keepLinesTogether)) {\n paragraphFormat.keepLinesTogether = sourceFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(sourceFormat.widowControl)) {\n paragraphFormat.widowControl = sourceFormat.widowControl;\n }\n paragraphFormat.listFormat = new WListFormat(paragraphFormat);\n if (sourceFormat.hasOwnProperty('listFormat')) {\n this.parseListFormat(sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty('tabs')) {\n this.parseTabStop(sourceFormat.tabs, paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (block, listFormat) {\n if (!isNullOrUndefined(block.listFormat)) {\n if (!isNullOrUndefined(block.listFormat.listId)) {\n listFormat.listId = block.listFormat.listId;\n listFormat.list = this.documentHelper.getListById(block.listFormat.listId);\n }\n if (!isNullOrUndefined(block.listFormat.listLevelNumber)) {\n listFormat.listLevelNumber = block.listFormat.listLevelNumber;\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (data, sectionFormat) {\n if (!isNullOrUndefined(data.pageWidth)) {\n sectionFormat.pageWidth = data.pageWidth;\n }\n if (!isNullOrUndefined(data.pageHeight)) {\n sectionFormat.pageHeight = data.pageHeight;\n }\n if (!isNullOrUndefined(data.leftMargin)) {\n sectionFormat.leftMargin = data.leftMargin;\n }\n if (!isNullOrUndefined(data.topMargin)) {\n sectionFormat.topMargin = data.topMargin;\n }\n if (!isNullOrUndefined(data.rightMargin)) {\n sectionFormat.rightMargin = data.rightMargin;\n }\n if (!isNullOrUndefined(data.bottomMargin)) {\n sectionFormat.bottomMargin = data.bottomMargin;\n }\n if (!isNullOrUndefined(data.headerDistance)) {\n sectionFormat.headerDistance = data.headerDistance;\n }\n if (!isNullOrUndefined(data.footerDistance)) {\n sectionFormat.footerDistance = data.footerDistance;\n }\n if (!isNullOrUndefined(data.differentFirstPage)) {\n sectionFormat.differentFirstPage = data.differentFirstPage;\n }\n if (!isNullOrUndefined(data.differentOddAndEvenPages)) {\n sectionFormat.differentOddAndEvenPages = data.differentOddAndEvenPages;\n }\n if (!isNullOrUndefined(data.bidi)) {\n sectionFormat.bidi = data.bidi;\n }\n if (!isNullOrUndefined(data.restartPageNumbering)) {\n sectionFormat.restartPageNumbering = data.restartPageNumbering;\n }\n if (!isNullOrUndefined(data.pageStartingNumber)) {\n sectionFormat.pageStartingNumber = data.pageStartingNumber;\n }\n if (!isNullOrUndefined(data.endnoteNumberFormat)) {\n sectionFormat.endnoteNumberFormat = data.endnoteNumberFormat;\n }\n if (!isNullOrUndefined(data.footNoteNumberFormat)) {\n sectionFormat.footNoteNumberFormat = data.footNoteNumberFormat;\n }\n if (!isNullOrUndefined(data.restartIndexForFootnotes)) {\n sectionFormat.restartIndexForFootnotes = data.restartIndexForFootnotes;\n }\n if (!isNullOrUndefined(data.pageStartingNumber)) {\n sectionFormat.restartIndexForEndnotes = data.restartIndexForEndnotes;\n }\n if (!isNullOrUndefined(data.initialFootNoteNumber)) {\n sectionFormat.initialFootNoteNumber = data.initialFootNoteNumber;\n }\n if (!isNullOrUndefined(data.initialEndNoteNumber)) {\n sectionFormat.initialEndNoteNumber = data.initialEndNoteNumber;\n }\n if (!isNullOrUndefined(data.pageNumberStyle)) {\n sectionFormat.pageNumberStyle = data.pageNumberStyle;\n }\n };\n SfdtReader.prototype.parseTabStop = function (wTabs, tabs) {\n if (wTabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tabStop = new WTabStop();\n tabStop.position = wTabs[i].position;\n tabStop.tabLeader = wTabs[i].tabLeader;\n tabStop.deletePosition = wTabs[i].deletePosition;\n tabStop.tabJustification = wTabs[i].tabJustification;\n tabs.push(tabStop);\n }\n }\n };\n SfdtReader.prototype.validateImageUrl = function (imagestr) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n imagestr = imagestr.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = imagestr.length * 3 / 4;\n if (imagestr.charAt(imagestr.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (imagestr.charAt(imagestr.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the imagestr is not a base64 content\n // - the imagestr is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the imagestr uses a base64 variant (base64url for example)\n return false;\n }\n return true;\n };\n SfdtReader.prototype.containsFieldBegin = function (line) {\n var element = undefined;\n for (var i = line.children.length - 1; i >= 0; i--) {\n element = line.children[i];\n if (element instanceof FieldElementBox && element.hasFieldEnd && element.nextElement instanceof TextElementBox) {\n return element.nextElement;\n }\n else if (element instanceof FieldElementBox) {\n return undefined;\n }\n }\n return element;\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtReader.prototype.destroy = function () {\n if (this.footnotes) {\n this.footnotes.destroy();\n }\n this.footnotes = undefined;\n if (this.endnotes) {\n this.endnotes.destroy();\n }\n this.endnotes = undefined;\n if (this.editableRanges) {\n this.editableRanges.destroy();\n }\n this.editableRanges = undefined;\n if (this.commentEnds) {\n this.commentEnds.destroy();\n }\n this.commentEnds = undefined;\n if (this.commentStarts) {\n this.commentStarts.destroy();\n }\n this.commentStarts = undefined;\n if (this.commentsCollection) {\n this.commentsCollection.destroy();\n }\n this.commentsCollection = undefined;\n if (this.revisionCollection) {\n this.revisionCollection.destroy();\n }\n this.revisionCollection = undefined;\n this.documentHelper = undefined;\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../index';\nimport { Dictionary } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.customXMLItemsPath = 'customXml/item';\n this.customXMLItemsPropspath = 'customXml/itemProps';\n this.itemPropsPath = 'itemProps';\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.chartPath = 'word/charts';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n this.footnotesPath = 'word/footnotes.xml';\n this.endnotesPath = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n this.defaultEmbeddingPath = 'word/embeddings/';\n this.commentsPath = 'word/comments.xml';\n this.commentsExtendedPath = 'word/commentsExtended.xml';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n // private ThemePath: string = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n this.customXMLRelPath = 'customXml/_rels/item';\n this.excelRelationPath = 'xl/_rels/workbook.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n this.footnotesRelationPath = 'word/_rels/footnotes.xml.rels';\n this.endnotesRelationPath = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n // private TemplateContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n this.commentsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.commentsExContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml';\n this.endnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n this.footnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n this.chartsContentType = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n // private ThemeContentType: string = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n this.chartColorStyleContentType = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n this.commentsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.commentsExRelType = 'http://schemas.microsoft.com/office/2011/relationships/commentsExtended';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n this.endnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n this.footnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n this.chartRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n // private ThemeRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n this.chartColorStyleRelType = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n this.svgNamespace = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n this.cxNamespace = 'http://schemas.microsoft.com/office/drawing/2014/chartex';\n // chart\n this.c15Namespace = 'http://schemas.microsoft.com/office/drawing/2015/06/chart';\n this.c7Namespace = 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart';\n this.csNamespace = 'http://schemas.microsoft.com/office/drawing/2012/chartStyle';\n // worksheet\n this.spreadSheetNamespace = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n this.spreadSheet9 = 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.dsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/customXml';\n this.excelFiles = undefined;\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.cRelationShipId = 0;\n this.eRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.seriesCount = 0;\n this.chartStringCount = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n this.mComments = [];\n this.revisions = [];\n this.customXMLProps = [];\n this.paraID = 0;\n this.commentParaID = 0;\n this.commentParaIDInfo = {};\n this.isInsideComment = false;\n this.commentId = {};\n this.currentCommentId = 0;\n this.trackChangesId = 0;\n this.prevRevisionIds = [];\n this.isRevisionContinuous = false;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /* eslint-enable */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"svgImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mSvgImages === undefined) {\n this.mSvgImages = new Dictionary();\n }\n return this.mSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterSvgImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterSvgImages === undefined) {\n this.mHeaderFooterSvgImages = new Dictionary();\n }\n return this.mHeaderFooterSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentCharts\", {\n // Gets the collection of charts present in the document body\n get: function () {\n if (this.mDocumentCharts === undefined) {\n this.mDocumentCharts = new Dictionary();\n }\n return this.mDocumentCharts;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"endnotesFootnotes\", {\n /// Gets the Endnote and Footnote Collection\n get: function () {\n if (this.mFootEndnotesColl === undefined) {\n this.mFootEndnotesColl = new Dictionary();\n }\n return this.mFootEndnotesColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @param {string} fileName - file name\n * @returns {void}\n */\n WordExport.prototype.save = function (documentHelper, fileName) {\n var _this = this;\n this.fileName = fileName;\n this.serialize(documentHelper);\n var excelFiles = this.serializeExcelFiles();\n if (excelFiles && excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.saveInternal(fileName);\n });\n }\n else {\n this.saveInternal(fileName);\n }\n this.close();\n };\n WordExport.prototype.saveInternal = function (fileName) {\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @returns {Promise} - Return Promise\n */\n WordExport.prototype.saveAsBlob = function (documentHelper) {\n var _this = this;\n this.serialize(documentHelper);\n var excelFiles = this.serializeExcelFiles();\n /* eslint-disable */\n return new Promise(function (resolve, reject) {\n if (excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n }\n else {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n }\n });\n /* eslint-enable */\n };\n WordExport.prototype.serializeExcelFiles = function () {\n var _this = this;\n var excelFiles = this.excelFiles;\n var files = [];\n if (excelFiles && excelFiles.length > 0) {\n var _loop_1 = function (i) {\n var fileName = excelFiles.keys[i];\n var excelFile = excelFiles.get(fileName);\n var excelPromise = excelFile.saveAsBlob();\n files.push(excelPromise);\n excelPromise.then(function (blob) {\n var zipArchiveItem = new ZipArchiveItem(blob, fileName);\n _this.mArchive.addItem(zipArchiveItem);\n });\n };\n for (var i = 0; i < excelFiles.length; i++) {\n _loop_1(i);\n }\n this.excelFiles.clear();\n }\n return files;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.saveExcel = function () {\n var xlsxPath = this.defaultEmbeddingPath + 'Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.excelFiles.add(xlsxPath, this.mArchiveExcel);\n this.mArchiveExcel = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n this.fileName = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n if (this.mArchiveExcel) {\n this.mArchiveExcel.destroy();\n this.mArchiveExcel = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var document = documentHelper.owner.sfdtExportModule.write();\n this.setDocument(document);\n this.mComments = documentHelper.comments;\n this.mCustomXML = documentHelper.customXmlData;\n this.revisions = documentHelper.owner.revisions.changes;\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //comments.xml\n this.serializeComments();\n //commentsExtended.xml\n this.serializeCommentsExtended();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n // SerializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n this.serializeFootnotes();\n this.serializeEndnotes();\n //document relations\n this.serializeDocumentRelations();\n // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n this.mLists = document.lists;\n this.mAbstractLists = document.abstractLists;\n this.defCharacterFormat = document.characterFormat;\n this.defParagraphFormat = document.paragraphFormat;\n this.defaultTabWidthValue = document.defaultTabWidth;\n this.dontUseHtmlParagraphAutoSpacing = document.dontUseHTMLParagraphAutoSpacing;\n this.mStyles = document.styles;\n this.formatting = document.formatting;\n this.enforcement = document.enforcement;\n this.hashValue = document.hashValue;\n this.saltValue = document.saltValue;\n this.protectionType = document.protectionType;\n this.formFieldShading = document.formFieldShading;\n this.trackChanges = document.trackChanges;\n this.compatibilityMode = document.compatibilityMode;\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.trackChanges = undefined;\n this.customXMLProps = [];\n this.mRelationShipID = 0;\n this.eRelationShipId = 0;\n this.cRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mSvgImages) {\n this.mSvgImages.destroy();\n this.mSvgImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n if (this.mHeaderFooterSvgImages) {\n this.mHeaderFooterSvgImages.destroy();\n this.mHeaderFooterSvgImages = undefined;\n }\n if (this.mDocumentCharts) {\n this.mDocumentCharts.destroy();\n this.mDocumentCharts = undefined;\n }\n if (this.mFootEndnotesColl) {\n this.mFootEndnotesColl.destroy();\n this.mFootEndnotesColl = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document.sections.length;\n for (var i = 0; i < count; i++) {\n this.section = this.document.sections[i];\n this.lastSection = i === count - 1;\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n this.serializeBodyItems(writer, section.blocks, last);\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the comments (comments.xml)\n WordExport.prototype.serializeComments = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'comments', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentInternal(writer, this.mComments);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCommentCommonAttribute = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeCommentInternal = function (writer, comments) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n writer.writeStartElement('w', 'comment', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, this.commentId[comment.commentId].toString());\n if (comment.author && comment.author !== ' ') {\n writer.writeAttributeString('w', 'author', this.wNamespace, comment.author);\n }\n if (comment.date) {\n writer.writeAttributeString('w', 'date', this.wNamespace, comment.date);\n }\n if (comment.initial && comment.initial !== '') {\n writer.writeAttributeString('w', 'initials', this.wNamespace, comment.initial);\n }\n var blocks = this.retrieveCommentText(comment.text);\n for (var k = 0; k < blocks.length; k++) {\n this.isInsideComment = true;\n this.commentParaID++;\n this.serializeBodyItem(writer, blocks[k], true);\n this.isInsideComment = false;\n }\n if (blocks.length === 0) {\n this.isInsideComment = true;\n this.commentParaID++;\n }\n this.commentParaIDInfo[comment.commentId] = this.commentParaID;\n //}\n this.isInsideComment = false;\n //}\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentInternal(writer, comment.replyComments);\n }\n }\n };\n WordExport.prototype.retrieveCommentText = function (text) {\n var blocks = [];\n var multiText = text.split('\\n');\n multiText = multiText.filter(function (x) { return x !== ''; });\n var block = {};\n if (multiText.length === 0) {\n block.inlines = [{ text: '' }];\n blocks.push(block);\n }\n else {\n while (multiText.length > 0) {\n block.inlines = [{ text: multiText[0] }];\n blocks.push(block);\n multiText.splice(0, 1);\n }\n }\n return blocks;\n };\n // Serialize the comments (commentsExtended.xml)\n WordExport.prototype.serializeCommentsExtended = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w15', 'commentsEx', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentsExInternal(writer, this.mComments, false);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsExtendedPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCommentsExInternal = function (writer, comments, isReply) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n writer.writeStartElement('w15', 'commentEx', this.wNamespace);\n //if (comment.blocks.length > 0) {\n var syncParaID = this.commentParaIDInfo[comment.commentId];\n if (isReply) {\n var paraID = this.commentParaIDInfo[comment.ownerComment.commentId];\n writer.writeAttributeString('w15', 'paraIdParent', this.wNamespace, paraID.toString());\n }\n writer.writeAttributeString('w15', 'paraId', this.wNamespace, syncParaID.toString());\n //}\n var val = comment.done ? 1 : 0;\n writer.writeAttributeString('w15', 'done', this.wNamespace, val.toString());\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentsExInternal(writer, comment.replyComments, true);\n }\n }\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section.headersFooters) {\n this.serializeHFReference(writer, section.headersFooters);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n this.serializeSectionType(writer, 'nextPage');\n this.serializePageSetup(writer, section.sectionFormat);\n this.serializeColumns(writer);\n this.serializeFootNotesPr(writer, section.sectionFormat);\n this.serializeEndNotesPr(writer, section.sectionFormat);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section.sectionFormat !== undefined && section.sectionFormat.differentFirstPage) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n if (!isNullOrUndefined(section.sectionFormat) && section.sectionFormat.bidi) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n WordExport.prototype.serializeFootNotesPr = function (writer, section) {\n if (section.footNoteNumberFormat || section.restartIndexForFootnotes) {\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'pageBottom');\n writer.writeEndElement();\n if (section.footNoteNumberFormat !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section.footNoteNumberFormat));\n writer.writeEndElement();\n }\n if (section.restartIndexForFootnotes !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section.restartIndexForFootnotes));\n writer.writeEndElement();\n }\n if (section.initialFootNoteNumber !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section.initialFootNoteNumber).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.getFootNoteNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'UpperCaseRoman':\n patternType = 'upperRoman';\n break;\n case 'LowerCaseRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpperCaseLetter':\n patternType = 'upperLetter';\n break;\n case 'LowerCaseLetter':\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'decimal';\n break;\n }\n return patternType;\n };\n WordExport.prototype.getFootNoteNumberRestart = function (numberRestart) {\n switch (numberRestart) {\n case 'RestartForEachSection ':\n return 'eachSect';\n case 'RestartForEachPage':\n return 'eachPage';\n default:\n return 'continuous';\n }\n };\n WordExport.prototype.getPageNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'RomanUpper':\n patternType = 'upperRoman';\n break;\n case 'RomanLower':\n patternType = 'lowerRoman';\n break;\n case 'LetterUpper':\n patternType = 'upperLetter';\n break;\n case 'LetterLower':\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'Arabic';\n break;\n }\n return patternType;\n };\n // Serialize the Footnote Properties\n WordExport.prototype.serializeEndNotesPr = function (writer, section) {\n if (section.endnoteNumberFormat || section.restartIndexForEndnotes) {\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'docEnd');\n writer.writeEndElement();\n if (section.endnoteNumberFormat !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section.endnoteNumberFormat));\n writer.writeEndElement();\n }\n if (section.restartIndexForEndnotes !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section.restartIndexForEndnotes));\n writer.writeEndElement();\n }\n if (section.initialEndNoteNumber !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section.initialEndNoteNumber).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n writer.writeAttributeString(undefined, 'space', this.wNamespace, '0');\n writer.writeEndElement();\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n this.serializePageNumberType(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n if (pageSetup.restartPageNumbering) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'start', this.wNamespace, pageSetup.pageStartingNumber.toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageWidth * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageHeight * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup.topMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.rightMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.bottomMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.leftMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup.headerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup.footerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n //Serialize the page number type\n WordExport.prototype.serializePageNumberType = function (writer, pageSetup) {\n if (pageSetup.pageNumberStyle !== undefined) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'fmt', this.wNamespace, this.getPageNumberFormat(pageSetup.pageNumberStyle));\n writer.writeEndElement();\n }\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = this.section.sectionFormat.differentOddAndEvenPages;\n var hf = headersFooters.firstPageHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.firstPageFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.header;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.footer;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[i], isLastSection);\n }\n };\n // serialize the content Control\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentControl = function (writer, contentControlItem, item, isLastSection, inlines) {\n if (isNullOrUndefined(contentControlItem)) {\n throw new Error('contentCOntrol should not be undefined');\n }\n writer.writeStartElement('w', 'sdt', this.wNamespace);\n writer.writeStartElement(undefined, 'sdtPr', this.wNamespace);\n if (!isNullOrUndefined(contentControlItem)) {\n this.serializeContentProperties(writer, contentControlItem, item, isLastSection, inlines);\n }\n };\n // serialize Content Control Properties\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentProperties = function (writer, contentProperties, items, isLastSection, inlines) {\n var repeatSdt = undefined;\n if (!isNullOrUndefined(contentProperties.title)) {\n writer.writeStartElement(undefined, 'alias', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties.title);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tag', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties.tag);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.characterFormat)) {\n this.serializeCharacterFormat(writer, items.contentControlProperties.characterFormat);\n }\n // if (items.hasOwnProperty('blocks') && contentProperties.type !== 'CheckBox') {\n // this.serializeContentParagraph(writer, items);\n // }\n if (contentProperties.lockContents || contentProperties.lockContentControl) {\n writer.writeStartElement(undefined, 'lock', this.wNamespace);\n if (contentProperties.lockContentControl && contentProperties.lockContents) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtContentLocked');\n }\n else if (contentProperties.lockContentControl) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtLocked');\n }\n else if (contentProperties.lockContents) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'contentLocked');\n }\n writer.writeEndElement();\n }\n if (contentProperties.hasPlaceHolderText && isNullOrUndefined(repeatSdt)) {\n writer.writeStartElement('w', 'placeholder', undefined);\n writer.writeAttributeString('w', 'docPart', this.wNamespace, undefined);\n writer.writeEndElement();\n writer.writeStartElement('w', 'showingPlcHdr', undefined);\n writer.writeEndElement();\n }\n if (contentProperties.isTemporary) {\n writer.writeStartElement('w', 'temporary', undefined);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.appearance)) {\n writer.writeStartElement('w15', 'appearance', undefined);\n writer.writeAttributeString('w15', 'val', undefined, contentProperties.appearance.toLowerCase());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.color)) {\n writer.writeStartElement('w15', 'color', undefined);\n writer.writeAttributeString('w', 'val', undefined, this.getColor(contentProperties.color));\n writer.writeEndElement();\n }\n if (contentProperties.multiline) {\n writer.writeStartElement(undefined, 'text', this.wNamespace);\n writer.writeAttributeString('w', 'multiLine', this.wNamespace, '1');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.xmlMapping)) {\n if (contentProperties.xmlMapping.isMapped) {\n writer.writeStartElement('w', 'dataBinding', this.wNamespace);\n writer.writeAttributeString('w', 'xpath', undefined, contentProperties.xmlMapping.xPath);\n writer.writeAttributeString('w', 'storeItemID', undefined, contentProperties.xmlMapping.storeItemId);\n writer.writeEndElement();\n }\n }\n if (contentProperties.picture) {\n writer.writeStartElement('w', 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.uncheckedState || contentProperties.checkedState)) {\n writer.writeStartElement('w14', 'checkbox', undefined);\n if (contentProperties.isChecked) {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '1');\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '0');\n writer.writeEndElement();\n }\n writer.writeStartElement('w14', 'uncheckedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties.uncheckedState.value));\n writer.writeAttributeString('w14', 'font', undefined, (contentProperties.uncheckedState.font));\n writer.writeEndElement();\n writer.writeStartElement('w14', 'checkedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties.checkedState.value));\n writer.writeAttributeString('w14', 'font', undefined, contentProperties.checkedState.font);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.contentControlListItems) && contentProperties.type === 'DropDownList') {\n var dropDownLists = contentProperties.contentControlListItems;\n writer.writeStartElement(undefined, 'dropDownList', this.wNamespace);\n this.serializeContentControlList(writer, dropDownLists);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.contentControlListItems) && contentProperties.type === 'ComboBox') {\n var comboList = contentProperties.contentControlListItems;\n writer.writeStartElement(undefined, 'comboBox', this.wNamespace);\n this.serializeContentControlList(writer, comboList);\n writer.writeEndElement();\n }\n this.serializeContentControlDate(writer, contentProperties);\n if (!isNullOrUndefined(contentProperties.type)) {\n if (contentProperties.type === 'Picture') {\n writer.writeStartElement(undefined, 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n }\n writer.writeEndElement();\n writer.writeStartElement('w', 'sdtContent', this.wNamespace);\n if (inlines) {\n return;\n }\n /* eslint-disable */\n if (items.hasOwnProperty('blocks') && (isNullOrUndefined(items.cellFormat))) {\n for (var i = 0; i < items.blocks.length; i++) {\n var block = items.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n this.paragraph = block;\n this.serializeParagraph(writer, block, isLastSection);\n this.paragraph = undefined;\n }\n else if (block.hasOwnProperty('rowFormat')) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, block, mVerticalMerge);\n }\n else if (block.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, block.contentControlProperties, block, isLastSection);\n }\n else {\n var table = block;\n this.serializeTable(writer, table);\n }\n }\n }\n else if (items.hasOwnProperty('rowFormat')) {\n if (items.cells.length > 0) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, items, mVerticalMerge);\n }\n }\n else if (items.hasOwnProperty('cellFormat')) {\n var mVerticalMerge = new Dictionary();\n this.serializeCell(writer, items, mVerticalMerge);\n }\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.toUnicode = function (code) {\n var charCode = code.charCodeAt(0);\n return charCode.toString(16);\n };\n //serialize dropdown and list property\n WordExport.prototype.serializeContentControlList = function (writer, lists) {\n for (var i = 0; i < lists.length; i++) {\n writer.writeStartElement(undefined, 'listItem', this.wNamespace);\n if (!isNullOrUndefined(lists[i].displayText)) {\n writer.writeAttributeString('w', 'displayText', this.wNamespace, lists[i].displayText);\n }\n writer.writeAttributeString('w', 'value', this.wNamespace, lists[i].value);\n writer.writeEndElement();\n }\n };\n //Serialize character formatfor content control\n WordExport.prototype.serializeContentParagraph = function (writer, items) {\n for (var i = 0; i < items.blocks.length; i++) {\n var blocks = items.blocks[i];\n if (blocks.hasOwnProperty('inlines')) {\n for (var j = 0; j < blocks.inlines.length; j++) {\n var inlines = blocks.inlines[j];\n if (!isNullOrUndefined(inlines.characterFormat)) {\n this.serializeCharacterFormat(writer, inlines.characterFormat);\n }\n }\n }\n }\n };\n // serialize content control date property\n WordExport.prototype.serializeContentControlDate = function (writer, contentProperties) {\n if (contentProperties.type === 'Date') {\n writer.writeStartElement('w', 'date', this.wNamespace);\n if (!isNullOrUndefined(contentProperties.dateDisplayFormat)) {\n writer.writeStartElement('w', 'calender', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateCalendarType);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateDisplayLocale)) {\n writer.writeStartElement('w', 'lid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateDisplayLocale);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateStorageFormat)) {\n writer.writeStartElement('w', 'storeMappedDataAs', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateStorageFormat);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties.dateCalendarType)) {\n writer.writeStartElement('w', 'dateFormat', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties.dateDisplayFormat);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, item.contentControlProperties, item, isLastSection);\n }\n else if (item.hasOwnProperty('inlines')) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].cells.length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty('sectionFormat')\n && sec.blocks.indexOf(item) === sec.blocks.length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n writer.writeStartElement('w', 'p', this.wNamespace);\n if (this.isInsideComment) {\n writer.writeAttributeString('w14', 'paraId', undefined, this.commentParaID.toString());\n }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n this.serializeParagraphFormat(writer, paragraph.paragraphFormat, paragraph);\n }\n if (!isNullOrUndefined(paragraph.characterFormat)) {\n this.serializeCharacterFormat(writer, paragraph.characterFormat);\n }\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.prevRevisionIds = [];\n this.serializeParagraphItems(writer, paragraph.inlines);\n writer.writeEndElement(); //end of paragraph tag.\n };\n //Serialize Revision start\n WordExport.prototype.serializeRevisionStart = function (writer, item, previousNode) {\n if (item.hasOwnProperty('revisionIds')) {\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType === 0) {\n return;\n }\n if (item.hasOwnProperty('fieldType') && item.fieldType === 1) {\n return;\n }\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('bookmarkType') && (previousNode.bookmarkType === 0 && !(previousNode.name.indexOf('_Toc') >= 0) && isNullOrUndefined(item.revisionIds))) {\n return;\n }\n var ids = item.revisionIds;\n for (var i = 0; i < ids.length; i++) {\n var revision = this.retrieveRevision(ids[i]);\n if (revision.revisionType === 'Insertion') {\n this.serializeTrackChanges(writer, 'ins', revision.author, revision.date);\n }\n if (revision.revisionType === 'Deletion') {\n this.serializeTrackChanges(writer, 'del', revision.author, revision.date);\n }\n }\n }\n };\n //Serialize track changes\n WordExport.prototype.serializeTrackChanges = function (writer, type, author, date) {\n writer.writeStartElement('w', type, this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, (this.trackChangesId++).toString());\n writer.writeAttributeString('w', 'author', this.wNamespace, author);\n writer.writeAttributeString('w', 'date', this.wNamespace, date);\n };\n WordExport.prototype.retrieveRevision = function (id) {\n var matchedRevisions = [];\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.revisions[i].revisionID === id) {\n return this.revisions[i];\n }\n }\n return undefined;\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems) {\n var inlines;\n var previousNode = undefined;\n var isContinueOverride = false;\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty('contentControlProperties')) {\n inlines = true;\n this.serializeContentControl(writer, item.contentControlProperties, item, undefined, inlines);\n this.serializeParagraphItems(writer, item.inlines);\n }\n if (item.hasOwnProperty('inlines')) {\n this.serializeParagraphItems(writer, item);\n }\n this.serializeRevisionStart(writer, item, previousNode);\n var isBdo = false;\n if (item.characterFormat) {\n isBdo = !isNullOrUndefined(item.characterFormat.bdo) && item.characterFormat.bdo !== 'None';\n if (isBdo && !isContinueOverride) {\n this.serializeBiDirectionalOverride(writer, item.characterFormat);\n isContinueOverride = true;\n }\n }\n if (isContinueOverride && !isBdo) {\n writer.writeEndElement();\n isContinueOverride = false;\n }\n if (item.hasOwnProperty('fieldType')) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty('imageString')) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty('shapeId')) {\n var currentParargaph = this.paragraph;\n this.serializeShape(writer, item);\n this.paragraph = currentParargaph;\n }\n else if (item.hasOwnProperty('bookmarkType')) {\n this.serializeBookMark(writer, item);\n }\n else if (item.hasOwnProperty('editRangeId')) {\n this.serializeEditRange(writer, item);\n }\n else if (item.hasOwnProperty('chartType')) {\n this.chart = item;\n this.serializeChart(writer, item);\n // chart.xml\n this.serializeChartStructure();\n }\n else if (item.hasOwnProperty('commentCharacterType')) {\n this.serializeComment(writer, item);\n }\n else if (item.hasOwnProperty('footnoteType')) {\n this.serializeEFReference(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n //Serialize revision end\n this.serializeRevisionEnd(writer, item, previousNode);\n previousNode = item;\n if (inlines) {\n writer.writeEndElement();\n writer.writeEndElement();\n inlines = false;\n }\n }\n if (isContinueOverride) {\n writer.writeEndElement();\n }\n };\n WordExport.prototype.serializeEFReference = function (writer, item) {\n var efId = '';\n var ef = item.blocks;\n if (item.footnoteType === 'Footnote') {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n writer.writeStartElement(undefined, 'footnoteReference', this.wNamespace);\n if (this.document.footnotes.continuationNotice && this.efRelationShipId === 0) {\n this.efRelationShipId = 1;\n }\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'footnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n writer.writeStartElement(undefined, 'endnoteReference', this.wNamespace);\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'endnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.addFootnotesEndnotes = function (ef, efType, id) {\n var efColl = new Dictionary();\n this.endnotesFootnotes.add(efType, efColl);\n this.endnotesFootnotes.get(efType).add(id, ef);\n };\n WordExport.prototype.serializeEndnotesFootnote = function (writer, efType) {\n if (this.endnotesFootnotes.length === 0) {\n return;\n }\n var endnoteFootnotePath;\n var endnoteFootnoteRelsPath;\n if (!this.endnotesFootnotes.containsKey(efType)) {\n return;\n }\n var efColl = this.endnotesFootnotes.get(efType);\n var ef = undefined;\n for (var i = 0; i < efColl.keys.length; i++) {\n var id = efColl.keys[i];\n ef = efColl.get(id);\n if (efType === 'endnote') {\n endnoteFootnotePath = this.endnotesPath;\n endnoteFootnoteRelsPath = this.endnotesRelationPath;\n this.serializeInlineEndnotes(writer, ef, id);\n }\n else {\n endnoteFootnotePath = this.footnotesPath;\n endnoteFootnoteRelsPath = this.footnotesRelationPath;\n this.serializeInlineFootnotes(writer, ef, id);\n }\n }\n };\n WordExport.prototype.serializeInlineEndnotes = function (writer, endNote, id) {\n this.endNoteFootnote = endNote;\n var owner = this.blockOwner;\n this.blockOwner = endNote;\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, endNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n };\n WordExport.prototype.serializeInlineFootnotes = function (writer, footNote, id) {\n this.endNoteFootnote = footNote;\n var owner = this.blockOwner;\n this.blockOwner = footNote;\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, footNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n };\n // private footnoteXMLItem(fileIndex: number): any {\n // let writer = new XmlWriter;\n // writer.writeStartElement(undefined, 'Sources', this.wNamespace)\n // writer.writeAttributeString('xmlns', 'b', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'xmlns', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'SelectedStyle', undefined,\"\\APASixthEditionOfficeOnline.xsl\")\n // writer.writeAttributeString(undefined,'StyleName', undefined,\"APA\")\n // writer.writeAttributeString(undefined,'Version', undefined,\"6\")\n // writer.writeEndElement();\n // let itemPath: string = this.customXMLItemsPath + fileIndex + '.xml';\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, itemPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPath;\n // }\n // private footnoteXMLItemProps(itemID: string, fileIndex: number): any {\n // let writer: XmlWriter = new XmlWriter();\n // let customitemPropsPath: string = this.customXMLItemsPropspath + fileIndex + '.xml';\n // let itemPropsPath: string = this.itemPropsPath + fileIndex + '.xml';\n // writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n // writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n // writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n // writer.writeStartElement('ds','schemaRefs', this.wNamespace);\n // writer.writeStartElement('ds', 'schemaRef', this.wNamespace);\n // writer.writeAttributeString('ds','uri', undefined,'http://schemas.openxmlformats.org/officeDocument/2006/bibliography' )\n // writer.writeEndElement();\n // writer.writeEndElement();\n // writer.writeEndElement();\n // this.customXMLProps.push(customitemPropsPath);\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPropsPath;\n // }\n //Serialize the Footnote Endnotes Common Atributes\n WordExport.prototype.writeEFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'aink', undefined, 'http://schemas.microsoft.com/office/drawing/2016/ink');\n writer.writeAttributeString('xmlns', 'am3d', undefined, 'http://schemas.microsoft.com/office/drawing/2017/,odel3d');\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeFootnotes = function () {\n if (isNullOrUndefined(this.document.footnotes)) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'footnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document.footnotes.separator, true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document.footnotes.continuationSeparator, true);\n writer.writeEndElement();\n if (this.document.footnotes.continuationNotice) {\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document.footnotes.continuationNotice, true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'footnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.footnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n WordExport.prototype.serializeEndnotes = function () {\n if (isNullOrUndefined(this.document.endnotes)) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'endnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document.endnotes.separator, true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document.endnotes.continuationSeparator, true);\n writer.writeEndElement();\n if (this.document.endnotes.continuationNotice) {\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document.endnotes.continuationNotice, true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'endnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.endnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n //Serialize Revision end\n WordExport.prototype.serializeRevisionEnd = function (writer, item, previousNode) {\n if (item.hasOwnProperty('revisionIds')) {\n //skip revision end for field begin as we combine to end with field code text\n if (item.hasOwnProperty('fieldType') && item.fieldType === 0) {\n return;\n }\n //skip revision end for field result text as we need to only on field end.\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty('fieldType') && (previousNode.fieldType === 2 || (previousNode.fieldType === 0 && item.text.indexOf('TOC') >= 0))) {\n return;\n }\n for (var i = 0; i < item.revisionIds.length; i++) {\n var revision = this.retrieveRevision(item.revisionIds[i]);\n if (revision.revisionType === 'Insertion' || revision.revisionType === 'Deletion') {\n writer.writeEndElement();\n }\n }\n }\n };\n // Serialize the comment\n WordExport.prototype.serializeComment = function (writer, comment) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n if (comment.commentCharacterType === 0) {\n writer.writeStartElement('w', 'commentRangeStart', this.wNamespace);\n }\n else if (comment.commentCharacterType === 1) {\n writer.writeStartElement('w', 'commentRangeEnd', this.wNamespace);\n }\n var commentId = this.commentId[comment.commentId];\n if (isNullOrUndefined(commentId)) {\n commentId = this.commentId[comment.commentId] = this.currentCommentId++;\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n if (comment.commentCharacterType === 1) {\n this.serializeCommentItems(writer, commentId);\n }\n }\n };\n WordExport.prototype.serializeCommentItems = function (writer, commentId) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement('w', 'commentReference', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBiDirectionalOverride = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'bdo', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, characterFormat.bdo.toLowerCase());\n };\n // Serialize Document Protection\n //\n WordExport.prototype.serializeEditRange = function (writer, editElement) {\n if (editElement.hasOwnProperty('editableRangeStart')) {\n writer.writeStartElement('w', 'permEnd', this.wNamespace);\n }\n else {\n writer.writeStartElement('w', 'permStart', this.wNamespace);\n if (editElement.user && editElement.user !== '') {\n writer.writeAttributeString('w', 'ed', this.wNamespace, editElement.user);\n }\n if (editElement.group && editElement.group !== '') {\n writer.writeAttributeString('w', 'edGrp', this.wNamespace, editElement.group.toLowerCase());\n }\n if (editElement.columnFirst && editElement.columnFirst !== -1) {\n writer.writeAttributeString('w', 'colFirst', this.wNamespace, editElement.columnFirst.toString());\n }\n if (editElement.columnLast && editElement.columnLast !== -1) {\n writer.writeAttributeString('w', 'colLast', this.wNamespace, editElement.columnLast.toString());\n }\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, editElement.editRangeId);\n writer.writeEndElement();\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark.name);\n var bookmarkName = bookmark.name;\n if (bookmark.bookmarkType === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n }\n else if (bookmark.bookmarkType === 1) {\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image.width >= 0 && image.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image.characterFormat);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n WordExport.prototype.serializeShape = function (writer, item) {\n if (item.width >= 0 && item.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item.characterFormat);\n this.serializeDrawing(writer, item);\n writer.writeEndElement(); //end of run element\n }\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, draw) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n if (draw.hasOwnProperty('chartType')) {\n this.serializeInlineCharts(writer, draw);\n }\n else {\n if (draw.textWrappingStyle === 'Inline') {\n this.serializeInlinePictureAndShape(writer, draw);\n }\n else {\n this.serializeWrappingPictureAndShape(writer, draw);\n }\n }\n writer.writeEndElement();\n };\n // Serialize the Other Wrapping picture & Shape.\n WordExport.prototype.serializeWrappingPictureAndShape = function (writer, picture) {\n writer.writeStartElement('wp', 'anchor', this.wpNamespace);\n this.serializePictureAndShapeDistance(writer, picture);\n writer.writeAttributeString(undefined, 'simplePos', undefined, '0');\n writer.writeAttributeString(undefined, 'relativeHeight', undefined, picture.zOrderPosition ? Math.abs(picture.zOrderPosition).toString() : '0');\n var behindText = (picture.textWrappingStyle && picture.textWrappingStyle === 'Behind');\n writer.writeAttributeString(undefined, 'behindDoc', undefined, behindText ? '1' : '0');\n var lockAnchor = (picture.LockAnchor) ? '1' : '0';\n writer.writeAttributeString(undefined, 'locked', undefined, lockAnchor);\n var layoutcell = (picture.layoutInCell) ? '1' : '0';\n writer.writeAttributeString(undefined, 'layoutInCell', undefined, layoutcell);\n var allowOverlap = (picture.allowOverlap) ? '1' : '0';\n writer.writeAttributeString(undefined, 'allowOverlap', undefined, allowOverlap);\n writer.writeStartElement('wp', 'simplePos', this.wpNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('wp', 'positionH', this.wpNamespace);\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", picture.horizontalOrigin.toString()));\n if (picture.horizontalAlignment === 'None') {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var horPos = Math.round(picture.horizontalPosition * this.emusPerPoint);\n writer.writeString(horPos.toString());\n writer.writeEndElement(); //end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var horAlig = picture.horizontalAlignment.toString().toLowerCase();\n writer.writeString(horAlig);\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionH\n writer.writeStartElement('wp', 'positionV', this.wpNamespace);\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", picture.verticalOrigin.toString()));\n if (picture.verticalAlignment === 'None') {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var vertPos = Math.round(picture.verticalPosition * this.emusPerPoint);\n writer.writeString(vertPos.toString());\n writer.writeEndElement(); // end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var verAlig = picture.verticalAlignment.toString().toLowerCase();\n writer.writeString(verAlig);\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionV\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(picture.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(picture.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n if (!isNullOrUndefined(picture.imageString)) {\n // this.serializePicProperties(writer, draw);\n this.serializeShapeWrapStyle(writer, picture);\n this.serializeDrawingGraphics(writer, picture);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, picture);\n }\n writer.writeEndElement(); // end of anchor\n };\n // Serialize the inline picture & Shape.\n WordExport.prototype.serializeInlinePictureAndShape = function (writer, draw) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(draw.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(draw.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n if (!isNullOrUndefined(draw.imageString)) {\n this.serializeShapeWrapStyle(writer, draw);\n this.serializeDrawingGraphics(writer, draw);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, draw);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializePictureAndShapeDistance = function (writer, draw) {\n var top = draw.distanceTop ? Math.round(draw.distanceTop * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distT', undefined, top);\n var bottom = draw.distanceBottom ? Math.round(draw.distanceBottom * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distB', undefined, bottom);\n var left = draw.distanceLeft ? Math.round(draw.distanceLeft * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distL', undefined, left);\n var right = draw.distanceRight ? Math.round(draw.distanceRight * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distR', undefined, right);\n };\n WordExport.prototype.writeDefaultDistAttribute = function (writer) {\n writer.writeAttributeString(undefined, 'distT', undefined, '0');\n writer.writeAttributeString(undefined, 'distB', undefined, '0');\n writer.writeAttributeString(undefined, 'distL', undefined, '0');\n writer.writeAttributeString(undefined, 'distR', undefined, '0');\n };\n // serialize inline chart\n WordExport.prototype.serializeInlineCharts = function (writer, item) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(item.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(item.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement(); // end of wp:extend\n writer.writeStartElement(undefined, 'effectExtent', this.wpNamespace);\n writer.writeAttributeString(undefined, 'l', undefined, '0');\n writer.writeAttributeString(undefined, 't', undefined, '0');\n writer.writeAttributeString(undefined, 'r', undefined, '0');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeEndElement(); // end of wp: effectExtent\n this.serializeDrawingGraphicsChart(writer, item);\n writer.writeEndElement(); // end of inline\n };\n // Serialize the graphics element for chart.\n WordExport.prototype.serializeDrawingGraphicsChart = function (writer, chart) {\n var id = '';\n id = this.updatechartId(chart);\n // Processing chart\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, this.getNextChartName());\n writer.writeEndElement(); // end of wp docPr\n writer.writeStartElement('wp', 'cNvGraphicFramePr', this.wpNamespace);\n writer.writeEndElement(); // end of cNvGraphicFramePr\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.chartNamespace);\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('r', 'id', undefined, id);\n writer.writeEndElement(); // end of chart\n writer.writeEndElement(); // end of graphic data\n writer.writeEndElement(); // end of graphic\n };\n WordExport.prototype.getNextChartName = function () {\n return 'Chart' + (++this.chartCount);\n };\n // serialize chart\n WordExport.prototype.serializeChart = function (writer, chart) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, chart.characterFormat);\n this.serializeDrawing(writer, chart);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartStructure = function () {\n this.serializeChartXML();\n this.serializeChartColors();\n this.serializeChartExcelData();\n this.serializeChartRelations();\n this.chart = undefined;\n this.saveExcel();\n };\n // serialize Chart.xml\n WordExport.prototype.serializeChartXML = function () {\n var chartPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement('c', 'chartSpace', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'c16r2', undefined, this.c15Namespace);\n this.serializeChartData(writer, this.chart);\n writer.writeStartElement('c', 'externalData', this.chartNamespace);\n writer.writeAttributeString('r', 'id', undefined, 'rId1');\n writer.writeStartElement('c', 'autoUpdate', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoUpdate\n writer.writeEndElement(); // end of externalData\n writer.writeEndElement(); // end of chartSpace\n chartPath = this.chartPath + '/chart' + this.chartCount + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // serialize chart colors.xml\n WordExport.prototype.serializeChartColors = function () {\n var writer = new XmlWriter();\n var colorPath = '';\n writer.writeStartElement('cs', 'colorStyle', this.csNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString(undefined, 'meth', undefined, 'cycle');\n writer.writeAttributeString(undefined, 'id', undefined, '10');\n this.serializeChartColor(writer);\n colorPath = this.chartPath + '/colors' + this.chartCount + '.xml';\n writer.writeEndElement(); // end of cs:colorStyle chart color\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, colorPath);\n this.mArchive.addItem(zipArchiveItem);\n colorPath = '';\n };\n WordExport.prototype.serializeChartColor = function (writer) {\n for (var i = 1; i <= 6; i++) {\n writer.writeStartElement('a', 'schemeClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'accent' + i);\n writer.writeEndElement(); // end of a:schemeClr\n }\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '20000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '40000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '30000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n };\n // serialize chart Excel Data\n WordExport.prototype.serializeChartExcelData = function () {\n if (isNullOrUndefined(this.excelFiles)) {\n this.excelFiles = new Dictionary();\n }\n this.mArchiveExcel = new ZipArchive();\n this.mArchiveExcel.compressionLevel = 'Normal';\n var type = this.chart.chartType;\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n this.serializeWorkBook();\n this.serializeSharedString(isScatterType);\n this.serializeExcelContentTypes();\n this.serializeExcelData(isScatterType);\n this.serializeExcelStyles();\n this.serializeExcelRelation();\n this.serializeExcelGeneralRelations();\n this.chartStringCount = 0;\n };\n WordExport.prototype.serializeWorkBook = function () {\n var writer = new XmlWriter();\n var workbookPath = 'xl/workbook.xml';\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'workbook', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeStartElement(undefined, 'sheets', undefined);\n writer.writeStartElement(undefined, 'sheet', undefined);\n writer.writeAttributeString(undefined, 'name', undefined, 'Sheet1');\n writer.writeAttributeString(undefined, 'sheetId', undefined, '1');\n writer.writeAttributeString('r', 'id', undefined, this.getNextExcelRelationShipID());\n writer.writeEndElement(); // end of sheet\n writer.writeEndElement(); // end of sheets\n writer.writeEndElement(); // end of workbook\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, workbookPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelStyles = function () {\n var writer = new XmlWriter();\n var stylePath = 'xl/styles.xml';\n writer.writeStartElement(undefined, 'styleSheet', undefined);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'x14ac');\n writer.writeAttributeString('xmlns', 'x14ac', undefined, 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac');\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeEndElement(); // end of styleSheet\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, stylePath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelData = function (isScatterType) {\n // excel data\n var sheetPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'worksheet', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'x14', undefined, this.spreadSheet9);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n this.serializeExcelSheet(writer, isScatterType);\n writer.writeEndElement(); // end of worksheet\n sheetPath = 'xl/worksheets' + '/sheet1.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sheetPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeSharedString = function (isScatterType) {\n var chart = this.chart;\n var writer = new XmlWriter();\n var sharedStringPath = '';\n var chartSharedString = [];\n var type = this.chart.chartType;\n var seriesLength = chart.chartSeries.length;\n for (var column = 0; column < seriesLength; column++) {\n var series = chart.chartSeries[column];\n var seriesName = series.seriesName;\n var isString = seriesName.match(/[a-z]/i);\n if (isScatterType && column === 0) {\n chartSharedString.push('X-Values');\n }\n if (isString) {\n chartSharedString.push(series.seriesName);\n this.chartStringCount++;\n }\n }\n if (type === 'Bubble') {\n chartSharedString.push('Size');\n }\n for (var row = 0; row < chart.chartCategory.length; row++) {\n var category = chart.chartCategory[row];\n var format = chart.chartPrimaryCategoryAxis.numberFormat;\n var categoryName = category.categoryXName;\n var isString = categoryName.match(/[a-z]/i);\n if (isString || format === 'm/d/yyyy') {\n chartSharedString.push(category.categoryXName);\n this.chartStringCount++;\n }\n }\n var uniqueCount = this.chartStringCount + 1;\n writer.writeStartElement(undefined, 'sst', undefined);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeAttributeString(undefined, 'count', undefined, uniqueCount.toString());\n writer.writeAttributeString(undefined, 'uniqueCount', undefined, uniqueCount.toString());\n for (var i = 0; i <= chartSharedString.length; i++) {\n writer.writeStartElement(undefined, 'si', undefined);\n writer.writeStartElement(undefined, 't', undefined);\n if (i !== chartSharedString.length) {\n writer.writeString(chartSharedString[i]);\n }\n else if (!isScatterType) {\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(' ');\n }\n writer.writeEndElement(); // end of t\n writer.writeEndElement(); // end of si\n }\n writer.writeEndElement(); // end of sst\n sharedStringPath = 'xl/sharedStrings' + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sharedStringPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // excel sheet data\n WordExport.prototype.serializeExcelSheet = function (writer, isScatterType) {\n var chart = this.chart;\n var type = 's';\n var isBubbleType = (chart.chartType === 'Bubble');\n var bubbleLength;\n var categoryLength = chart.chartCategory.length + 1;\n var format = chart.chartPrimaryCategoryAxis.numberFormat;\n var seriesLength = chart.chartSeries.length + 1;\n if (isBubbleType) {\n bubbleLength = seriesLength;\n seriesLength = seriesLength + 1;\n }\n var category = undefined;\n var series = undefined;\n var count = 0;\n writer.writeStartElement(undefined, 'sheetData', undefined);\n for (var row = 0; row < categoryLength; row++) {\n writer.writeStartElement(undefined, 'row', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, (row + 1).toString());\n for (var column = 0; column < seriesLength; column++) {\n var alphaNumeric = String.fromCharCode('A'.charCodeAt(0) + column) + (row + 1).toString();\n writer.writeStartElement(undefined, 'c', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, alphaNumeric);\n if (row !== 0 && column === 0) {\n category = chart.chartCategory[row - 1];\n var categoryName = category.categoryXName;\n var isString = categoryName.match(/[a-z]/i);\n if (isNullOrUndefined(isString) && format === 'm/d/yyyy') {\n type = 's';\n }\n else if ((!isString && !isNullOrUndefined(isString)) || isScatterType) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && column !== 0 && column !== (bubbleLength)) {\n series = chart.chartSeries[column - 1];\n var seriesName = series.seriesName;\n var isString = seriesName.match(/[a-z]/i);\n if (!isString) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && isBubbleType && column === (bubbleLength)) {\n type = 's';\n }\n else if (row === 0 && column === 0) {\n type = 's';\n }\n else {\n type = 'n';\n }\n writer.writeAttributeString(undefined, 't', undefined, type);\n writer.writeStartElement(undefined, 'v', undefined);\n if (row === 0 && column === 0 && !isScatterType) {\n writer.writeString(this.chartStringCount.toString());\n }\n else if (type === 's') {\n writer.writeString(count.toString());\n count++;\n }\n else if (row !== 0 && type !== 's' && column === 0 && column !== (bubbleLength)) {\n writer.writeString(category.categoryXName);\n }\n else if (column !== 0 && type !== 's' && row === 0 && column !== (bubbleLength)) {\n writer.writeString(series.seriesName);\n }\n else if (column !== 0 && column !== (bubbleLength)) {\n var data = category.chartData[column - 1];\n var yValue = data.yValue;\n writer.writeString(yValue.toString());\n }\n else if (isBubbleType && column === (bubbleLength)) {\n var data = category.chartData[column - 2];\n var size = data.size;\n writer.writeString(size.toString());\n }\n writer.writeEndElement(); // end of v[value]\n writer.writeEndElement(); // end of c[column]\n type = '';\n }\n writer.writeEndElement(); // end of row\n }\n writer.writeEndElement(); // end of sheetData\n };\n // excel content types\n WordExport.prototype.serializeExcelContentTypes = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeOverrideContentType(writer, 'xl/styles.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml');\n this.serializeOverrideContentType(writer, 'xl/workbook.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml');\n // this.serializeOverrideContentType(writer, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml');\n // this.serializeOverrideContentType(writer, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml');\n this.serializeOverrideContentType(writer, 'xl/sharedStrings.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml');\n this.serializeOverrideContentType(writer, 'xl/worksheets/sheet1.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml');\n writer.writeEndElement(); // end of types tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelRelation = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n var worksheetType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\n var sharedStringType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings';\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), worksheetType, 'worksheets/sheet1.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), sharedStringType, 'sharedStrings.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.excelRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.documentRelType, 'xl/workbook.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // get the next Excel relationship ID\n WordExport.prototype.getNextExcelRelationShipID = function () {\n return 'rId' + (++this.eRelationShipId);\n };\n // get the next Chart relationship ID\n WordExport.prototype.getNextChartRelationShipID = function () {\n return 'rId' + (++this.cRelationShipId);\n };\n // chart data\n WordExport.prototype.serializeChartData = function (writer, chart) {\n writer.writeStartElement('c', 'date1904', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('c', 'lang', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'en-US');\n writer.writeEndElement();\n writer.writeStartElement('c', 'roundedCorners', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('mc', 'AlternateContent', this.veNamespace);\n writer.writeStartElement('mc', 'Choice', this.veNamespace);\n writer.writeAttributeString('xmlns', 'c14', undefined, this.c7Namespace);\n writer.writeAttributeString(undefined, 'Requires', undefined, 'c14');\n writer.writeStartElement('c14', 'style', undefined);\n writer.writeAttributeString(undefined, 'val', undefined, '102');\n writer.writeEndElement(); // c14 style end\n writer.writeEndElement(); // mc:choice ened\n writer.writeStartElement('mc', 'Fallback', this.veNamespace);\n writer.writeStartElement('c', 'style', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '2');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement(); // end tag of mc alternate content\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n if (!isNullOrUndefined(this.chart.chartTitle)) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, this.chart.chartTitleArea, this.chart.chartTitle);\n writer.writeEndElement(); // end tag of title\n }\n // serialize plot area\n this.serializeChartPlotArea(writer, chart);\n writer.writeEndElement(); // end tag of chart\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'c', undefined, this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end tag of bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeEndElement(); // end tag of defRPr\n writer.writeEndElement(); // end tag of pPr\n writer.writeStartElement('a', 'endParaRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeEndElement(); // end of a:endParaRPr\n writer.writeEndElement(); // end tag of p\n writer.writeEndElement(); // end tag of txPr\n };\n // chart plot area\n /* eslint-disable */\n WordExport.prototype.serializeChartPlotArea = function (writer, chart) {\n writer.writeStartElement('c', 'autoTitleDeleted', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoTitleDeleted\n writer.writeStartElement('c', 'plotArea', this.chartNamespace);\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n writer.writeEndElement();\n // chart Type\n var serializationChartType = this.chartType(chart);\n var isPieTypeSerialization = (serializationChartType === 'pieChart' || serializationChartType === 'doughnutChart');\n var isScatterType = (serializationChartType === 'scatterChart' || serializationChartType === 'bubbleChart');\n writer.writeStartElement('c', serializationChartType, this.chartNamespace);\n if (serializationChartType === 'barChart') {\n var barDiv = '';\n if (chart.chartType === 'Column_Clustered' || chart.chartType === 'Column_Stacked'\n || chart.chartType === 'Column_Stacked_100') {\n barDiv = 'col';\n }\n else {\n barDiv = 'bar';\n }\n writer.writeStartElement('c', 'barDir', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, barDiv);\n writer.writeEndElement(); // end of barDir\n }\n if (!isPieTypeSerialization && !isScatterType) {\n var grouping = this.chartGrouping(chart.chartType);\n writer.writeStartElement('c', 'grouping', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, grouping);\n writer.writeEndElement(); // end of grouping\n }\n if (serializationChartType === 'scatterChart') {\n writer.writeStartElement('c', 'scatterStyle', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'marker');\n writer.writeEndElement(); // end of scatterStyle\n }\n writer.writeStartElement('c', 'varyColors', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:varyColors\n var valueSheet = '';\n for (var i = 0; i < chart.chartSeries.length; i++) {\n var series = chart.chartSeries[i];\n this.seriesCount = i;\n writer.writeStartElement('c', 'ser', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'order', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:order\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'strRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n var alphaNumeric = String.fromCharCode('B'.charCodeAt(0) + i);\n valueSheet = 'Sheet1!$' + alphaNumeric;\n writer.writeString(valueSheet + '$1');\n valueSheet = valueSheet + '$2:$' + alphaNumeric + '$';\n writer.writeEndElement(); // end of c:f\n writer.writeStartElement('c', 'strCache', this.chartNamespace);\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of ptCount\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, '0');\n writer.writeStartElement('c', 'v', this.chartNamespace);\n writer.writeString(series.seriesName);\n writer.writeEndElement(); // end of c:v\n writer.writeEndElement(); // end of pt\n writer.writeEndElement(); // end of strCache\n writer.writeEndElement(); // end of strRef\n writer.writeEndElement(); // end of tx\n if (chart.chartType === 'Pie' || chart.chartType === 'Doughnut') {\n this.parseChartDataPoint(writer, series);\n writer.writeStartElement('c', 'explosion', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of explosion\n }\n else if (!isScatterType) {\n this.parseChartSeriesColor(writer, series.dataPoints, serializationChartType);\n }\n if (serializationChartType === 'scatterChart') {\n var fillColor = series.dataPoints[0].fill.foreColor;\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'circle');\n writer.writeEndElement(); // end of a: symbol\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '5');\n writer.writeEndElement(); // end of a: size\n this.serializeShapeProperties(writer, fillColor, false);\n writer.writeEndElement(); // end of a: marker\n }\n if (series.dataLabel) {\n this.parseChartDataLabels(writer, series.dataLabel);\n }\n if (series.trendLines) {\n this.parseChartTrendLines(writer, series);\n }\n if (series.errorBar) {\n this.serializeChartErrorBar(writer, series);\n }\n if (serializationChartType === 'scatterChart') {\n this.serializeDefaultShapeProperties(writer);\n }\n else if (serializationChartType === 'bubbleChart') {\n this.serializeShapeProperties(writer, series.dataPoints[i].fill.foreColor, false);\n }\n var categoryType = 'cat';\n var categoryRef = 'strRef';\n var cacheType = 'strCache';\n if (serializationChartType === 'scatterChart') {\n categoryType = 'xVal';\n categoryRef = 'numRef';\n cacheType = 'numCache';\n }\n writer.writeStartElement('c', categoryType, this.chartNamespace);\n writer.writeStartElement('c', categoryRef, this.chartNamespace);\n this.serializeChartCategory(writer, chart, cacheType); // serialize chart yvalue\n writer.writeEndElement(); // end of categoryRef\n writer.writeEndElement(); // end of cat\n this.serializeChartValue(writer, valueSheet, serializationChartType);\n writer.writeEndElement(); // end of c:ser\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n if (isPieTypeSerialization) {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'bestFit');\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: showLeaderLines\n writer.writeEndElement(); // end of c: dLbls\n if (isPieTypeSerialization) {\n var series = this.chart.chartSeries[0];\n var sliceAngle = 0;\n var holeSize = 0;\n if (series.hasOwnProperty('firstSliceAngle')) {\n sliceAngle = series.firstSliceAngle;\n }\n writer.writeStartElement('c', 'firstSliceAng', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, sliceAngle.toString());\n writer.writeEndElement(); // end of c: firstSliceAng\n if (chart.chartType === 'Doughnut') {\n holeSize = series.holeSize;\n writer.writeStartElement('c', 'holeSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, holeSize.toString());\n writer.writeEndElement(); // end of c: holeSize\n }\n }\n if (serializationChartType !== 'lineChart' && !isScatterType) {\n writer.writeStartElement('c', 'gapWidth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart.gapWidth.toString());\n writer.writeEndElement(); // end of gapWidth\n writer.writeStartElement('c', 'overlap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart.overlap.toString());\n writer.writeEndElement(); // end of overlap\n }\n else if (serializationChartType !== 'bubbleChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n if (serializationChartType === 'bubbleChart') {\n writer.writeStartElement('c', 'sizeRepresents', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'area');\n writer.writeEndElement(); // end of smooth\n }\n var type = this.chart.chartType;\n if (!isPieTypeSerialization) {\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n }\n writer.writeEndElement(); // end of chart type\n var isStackedPercentage = (type === 'Column_Stacked_100' || type === 'Area_Stacked_100' ||\n type === 'Bar_Stacked_100' || type === 'Line_Stacked_100' || type === 'Line_Markers_Stacked_100');\n var format = this.chart.chartPrimaryCategoryAxis.categoryType;\n if (!isPieTypeSerialization) {\n this.serializeCategoryAxis(writer, format, isStackedPercentage);\n this.serializeValueAxis(writer, format, isStackedPercentage);\n }\n if (this.chart.hasOwnProperty('chartDataTable')) {\n var dataTable = this.chart.chartDataTable;\n var showHorzBorder = 0;\n var showVertBorder = 0;\n var showOutline = 0;\n var showKeys = 0;\n if (dataTable.showSeriesKeys) {\n showKeys = 1;\n }\n if (dataTable.hasHorzBorder) {\n showHorzBorder = 1;\n }\n if (dataTable.hasVertBorder) {\n showVertBorder = 1;\n }\n if (dataTable.hasBorders) {\n showOutline = 1;\n }\n writer.writeStartElement('c', 'dTable', this.chartNamespace);\n writer.writeStartElement('c', 'showHorzBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showHorzBorder.toString());\n writer.writeEndElement(); // end of showHorzBorder\n writer.writeStartElement('c', 'showVertBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showVertBorder.toString());\n writer.writeEndElement(); // end of showVertBorder\n writer.writeStartElement('c', 'showOutline', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showOutline.toString());\n writer.writeEndElement(); // end of showOutline\n writer.writeStartElement('c', 'showKeys', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showKeys.toString());\n writer.writeEndElement(); // end of showKeys\n writer.writeEndElement(); // end of dTable\n }\n this.serializeDefaultShapeProperties(writer);\n writer.writeEndElement(); // end of plot area\n // legend\n if (!isNullOrUndefined(this.chart.chartLegend.position)) {\n this.serializeChartLegend(writer);\n }\n writer.writeStartElement('c', 'plotVisOnly', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: plotVisOnly\n writer.writeStartElement('c', 'dispBlanksAs', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'gap');\n writer.writeEndElement(); // end of c: dispBlanksAs\n };\n WordExport.prototype.serializeChartLegend = function (writer) {\n var legendPosition = this.chartLegendPosition(this.chart.chartLegend);\n var title = this.chart.chartLegend.chartTitleArea;\n var fill = title.dataFormat.fill.foreColor;\n writer.writeStartElement('c', 'legend', this.chartNamespace);\n writer.writeStartElement('c', 'legendPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, legendPosition);\n writer.writeEndElement();\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartErrorBar = function (writer, series) {\n var errorBar = series.errorBar;\n var errorBarValueType = this.errorBarValueType(errorBar.type);\n var endStyle = 0;\n if (errorBar.endStyle !== 'Cap') {\n endStyle = 1;\n }\n writer.writeStartElement('c', 'errBars', this.chartNamespace);\n writer.writeStartElement('c', 'errBarType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar.direction.toLowerCase());\n writer.writeEndElement(); // end of c: errBarType\n writer.writeStartElement('c', 'errValType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBarValueType);\n writer.writeEndElement(); // end of c: errValType\n writer.writeStartElement('c', 'noEndCap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, endStyle.toString());\n writer.writeEndElement(); // end of c: noEndCap\n writer.writeStartElement('c', 'val', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar.numberValue.toString());\n writer.writeEndElement(); // end of c: val\n this.serializeShapeProperties(writer, '595959', true);\n writer.writeEndElement(); // end of c: errBars\n };\n WordExport.prototype.errorBarValueType = function (type) {\n var valueType = '';\n switch (type) {\n case 'StandardError':\n valueType = 'stdErr';\n break;\n case 'StandardDeviation':\n valueType = 'stdDev';\n break;\n case 'Percentage':\n valueType = 'percentage';\n break;\n case 'Fixed':\n valueType = 'fixedVal';\n break;\n default:\n valueType = 'stdErr';\n break;\n }\n return valueType;\n };\n WordExport.prototype.serializeCategoryAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var axisType = 'catAx';\n var formatCode = this.chart.chartPrimaryCategoryAxis.numberFormat;\n var type = this.chart.chartType;\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n if (format === 'Time') {\n axisType = 'dateAx';\n }\n if (isScatterType) {\n axisType = 'valAx';\n }\n writer.writeStartElement('c', axisType, this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335263360', this.chart.chartPrimaryCategoryAxis, formatCode, isStackedPercentage);\n if (!isScatterType) {\n writer.writeStartElement('c', 'auto', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of auto\n writer.writeStartElement('c', 'lblAlgn', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'ctr');\n writer.writeEndElement(); // end of lblAlgn\n writer.writeStartElement('c', 'lblOffset', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '100');\n writer.writeEndElement(); // end of lblOffset\n }\n if (format === 'Time') {\n writer.writeStartElement('c', 'baseTimeUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'days');\n writer.writeEndElement(); // end of baseTimeUnit\n }\n else if (this.chart.chartType !== 'Bubble') {\n writer.writeStartElement('c', 'noMultiLvlLbl', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of noMultiLvlLbl\n }\n writer.writeEndElement(); // end of catAx\n };\n WordExport.prototype.serializeValueAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var valueAxis = this.chart.chartPrimaryValueAxis;\n var crossBetween = 'between';\n if (format === 'Time') {\n crossBetween = 'midCat';\n }\n writer.writeStartElement('c', 'valAx', this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335265000', valueAxis, 'General', isStackedPercentage);\n writer.writeStartElement('c', 'crossBetween', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, crossBetween);\n writer.writeEndElement(); // end of crossBetween\n if (valueAxis.majorUnit !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'majorUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, valueAxis.majorUnit.toString());\n writer.writeEndElement(); // end of majorUnit\n }\n writer.writeEndElement(); // end of valAx\n };\n WordExport.prototype.serializeAxis = function (writer, axisID, axis, formatCode, isStackedPercentage) {\n var majorTickMark = 'none';\n var minorTickMark = 'none';\n var tickLabelPosition = 'nextTo';\n writer.writeStartElement('c', 'scaling', this.chartNamespace);\n writer.writeStartElement('c', 'orientation', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'minMax');\n writer.writeEndElement(); // end of orientation\n if (axis.maximumValue !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'max', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis.maximumValue.toString());\n writer.writeEndElement(); // end of max\n writer.writeStartElement('c', 'min', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis.minimumValue.toString());\n writer.writeEndElement(); // end of min\n }\n writer.writeEndElement(); // end of scaling\n writer.writeStartElement('c', 'delete', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of delete\n writer.writeStartElement('c', 'axPos', this.chartNamespace);\n if (axisID === '335265000') {\n writer.writeAttributeString(undefined, 'val', undefined, 'l');\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, 'b');\n }\n writer.writeEndElement(); // end of axPos\n if (axis.hasMajorGridLines) {\n writer.writeStartElement('c', 'majorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeEndElement(); // end of majorGridlines\n }\n if (axis.hasMinorGridLines) {\n writer.writeStartElement('c', 'minorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'F2F2F2', true);\n writer.writeEndElement(); // end of minorGridlines\n }\n if (axis.chartTitle) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, axis.chartTitleArea, axis.chartTitle);\n writer.writeEndElement(); // end tag of title\n }\n writer.writeStartElement('c', 'numFmt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'formatCode', undefined, formatCode);\n writer.writeAttributeString(undefined, 'sourceLinked', undefined, '1');\n writer.writeEndElement(); // end of numFmt\n writer.writeStartElement('c', 'majorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, majorTickMark);\n writer.writeEndElement(); // end of majorTickMark\n writer.writeStartElement('c', 'minorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, minorTickMark);\n writer.writeEndElement(); // end of minorTickMark\n writer.writeStartElement('c', 'tickLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, tickLabelPosition);\n writer.writeEndElement(); // end of tickLblPos\n if (this.chart.chartType === 'Bubble') {\n this.serializeShapeProperties(writer, 'BFBFBF', true);\n }\n else {\n this.serializeDefaultShapeProperties(writer);\n }\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of bodyPr\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, axis.fontSize, '595959', axis.fontName);\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: txPr\n writer.writeStartElement('c', 'crossAx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axisID);\n writer.writeEndElement(); // end of crossAx\n writer.writeStartElement('c', 'crosses', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'autoZero');\n writer.writeEndElement(); // end of crosses\n };\n WordExport.prototype.parseChartTrendLines = function (writer, series) {\n for (var i = 0; i < series.trendLines.length; i++) {\n var data = series.trendLines[i];\n var type = this.chartTrendLineType(data.type);\n var dispRSqr = 0;\n var dispEq = 0;\n if (data.isDisplayEquation) {\n dispEq = 1;\n }\n else if (data.isDisplayRSquared) {\n dispRSqr = 1;\n }\n var solidFill = series.dataPoints[i];\n writer.writeStartElement('c', 'trendline', this.chartNamespace);\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '19050');\n this.serializeChartSolidFill(writer, solidFill.fill.foreColor, false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'sysDot');\n writer.writeEndElement(); // end of a: prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeEndElement(); // end of c: spPr\n writer.writeStartElement('c', 'trendlineType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, type);\n writer.writeEndElement(); // end of c: trendlineType\n writer.writeStartElement('c', 'forward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.forward.toString());\n writer.writeEndElement(); // end of c: forward\n writer.writeStartElement('c', 'backward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.backward.toString());\n writer.writeEndElement(); // end of c: backward\n if (data.intercept !== 'NaN') {\n writer.writeStartElement('c', 'intercept', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data.intercept.toString());\n writer.writeEndElement(); // end of c: intercept\n }\n writer.writeStartElement('c', 'dispRSqr', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispRSqr.toString());\n writer.writeEndElement(); // end of c: dispRSqr\n writer.writeStartElement('c', 'dispEq', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispEq.toString());\n writer.writeEndElement(); // end of c: dispEq\n writer.writeEndElement(); // end of c: trendline\n }\n };\n WordExport.prototype.chartTrendLineType = function (type) {\n var trendlineType = '';\n switch (type) {\n case 'Linear':\n trendlineType = 'linear';\n break;\n case 'Exponential':\n trendlineType = 'exp';\n break;\n }\n return trendlineType;\n };\n WordExport.prototype.parseChartDataLabels = function (writer, dataLabels) {\n var position = '';\n var dataLabelPosition = dataLabels.position;\n var isLegendKey = 0;\n var isBubbleSize = 0;\n var isCategoryName = 0;\n var isSeriesName = 0;\n var isValue = 0;\n var isPercentage = 0;\n var isLeaderLines = 0;\n switch (dataLabelPosition) {\n case 'Center':\n position = 'ctr';\n break;\n case 'Left':\n position = 'l';\n break;\n case 'Right':\n position = 'r';\n break;\n case 'Outside':\n position = 'outEnd';\n break;\n case 'BestFit':\n position = 'bestFit';\n break;\n case 'Bottom':\n case 'OutsideBase':\n position = 'inBase';\n break;\n case 'Inside':\n position = 'inEnd';\n break;\n case 'Above':\n position = 't';\n break;\n case 'Below':\n position = 'b';\n break;\n default:\n position = 'Automatic';\n break;\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); //end of a:bodyPr.\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); //end of a:lstStyle.\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, dataLabels.fontSize, dataLabels.fontColor, dataLabels.fontName);\n writer.writeEndElement(); //end of a:p.\n writer.writeEndElement(); //end of c:txPr.\n if (dataLabels.isLegendKey) {\n isLegendKey = 1;\n }\n else if (dataLabels.isBubbleSize) {\n isBubbleSize = 1;\n }\n else if (dataLabels.isCategoryName) {\n isCategoryName = 1;\n }\n else if (dataLabels.isSeriesName) {\n isSeriesName = 1;\n }\n else if (dataLabels.isValue) {\n isValue = 1;\n }\n else if (dataLabels.isPercentage) {\n isPercentage = 1;\n }\n else if (dataLabels.isLeaderLines) {\n isLeaderLines = 1;\n }\n if (position !== 'Automatic') {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, position);\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLegendKey.toString());\n writer.writeEndElement(); // end of showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isValue.toString());\n writer.writeEndElement(); // end of showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isCategoryName.toString());\n writer.writeEndElement(); // end of showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isSeriesName.toString());\n writer.writeEndElement(); // end of showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isPercentage.toString());\n writer.writeEndElement(); // end of showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isBubbleSize.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLeaderLines.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeEndElement(); // end of dLbls\n };\n WordExport.prototype.serializeShapeProperties = function (writer, color, isLine) {\n var chartType = this.chart.chartType;\n var isScatterType = (chartType === 'Scatter_Markers' || chartType === 'Bubble');\n // serialize shape\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (!isScatterType || isLine) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '9525');\n this.serializeChartSolidFill(writer, color, false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'solid');\n writer.writeEndElement(); // end of prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end tag of round\n writer.writeEndElement(); // end tag of ln\n }\n else if (chartType === 'Scatter_Markers') {\n this.serializeChartSolidFill(writer, color, false);\n this.serializeDefaultLineProperties(writer);\n }\n else if (chartType === 'Bubble') {\n this.serializeChartSolidFill(writer, color, true);\n this.serializeDefaultLineProperties(writer);\n }\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end tag of spPr\n };\n WordExport.prototype.serializeDefaultShapeProperties = function (writer) {\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n this.serializeDefaultLineProperties(writer);\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n };\n WordExport.prototype.serializeDefaultLineProperties = function (writer) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n };\n WordExport.prototype.serializeTextProperties = function (writer, title, chartTitleName) {\n var fill = title.dataFormat.fill.foreColor;\n var fontSize = title.fontSize * 100;\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'rich', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'rot', undefined, '0');\n writer.writeAttributeString(undefined, 'vert', undefined, 'horz');\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeStartElement('a', 'r', this.aNamespace);\n writer.writeStartElement('a', 'rPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSize.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, title.fontName);\n writer.writeEndElement(); // end of a: rPr\n writer.writeStartElement('a', 't', this.aNamespace);\n writer.writeString(chartTitleName);\n writer.writeEndElement(); // end of a:t\n writer.writeEndElement(); // end of a: r\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: rich\n writer.writeEndElement(); // end of c: tx\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n // writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: layout\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: overlay\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a: lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeEndElement(); // end of a: p\n this.serializeChartTitleFont(writer, title.fontSize, fill, title.fontName);\n writer.writeEndElement(); // end of c: txPr\n };\n WordExport.prototype.serializeChartTitleFont = function (writer, fontSize, fill, fontName) {\n var fontSizeCalc = fontSize * 100;\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSizeCalc.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, fontName);\n writer.writeEndElement(); // end of defRPr\n writer.writeEndElement(); // end of a: pPr\n };\n WordExport.prototype.serializeChartSolidFill = function (writer, fill, isSeriesFill) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n if (fill !== '000000') {\n writer.writeAttributeString(undefined, 'val', undefined, fill);\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, '595959');\n }\n if (this.chart.chartType === 'Bubble' && isSeriesFill) {\n writer.writeStartElement('a', 'alpha', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '75000');\n writer.writeEndElement(); // end of alpha\n }\n writer.writeEndElement(); // end of srgbClr\n writer.writeEndElement(); // end of solidFill\n };\n WordExport.prototype.serializeFont = function (writer, fontName) {\n writer.writeStartElement('a', 'latin', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:latin\n writer.writeStartElement('a', 'ea', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:ea\n writer.writeStartElement('a', 'cs', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:cs\n };\n WordExport.prototype.parseChartSeriesColor = function (writer, dataPoints, chartType) {\n for (var i = 0; i < dataPoints.length; i++) {\n var data = dataPoints[i];\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (chartType === 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '28575');\n writer.writeAttributeString(undefined, 'cap', undefined, 'rnd');\n }\n if (chartType !== 'lineChart') {\n this.serializeChartSolidFill(writer, data.fill.foreColor, true);\n }\n else {\n this.serializeChartSolidFill(writer, data.line.color, true);\n }\n if (chartType !== 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n }\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n if (chartType === 'lineChart') {\n var symbolType = 'none';\n var size = 0;\n if (this.chart.chartSeries[i].hasOwnProperty('seriesFormat')) {\n symbolType = this.chart.chartSeries[i].seriesFormat.markerStyle;\n size = this.chart.chartSeries[i].seriesFormat.markerSize;\n }\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, symbolType.toLowerCase());\n writer.writeEndElement(); // end of a: symbol\n if (this.chart.chartSeries[i].hasOwnProperty('seriesFormat')) {\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, size.toString());\n writer.writeEndElement(); // end of a: size\n }\n writer.writeEndElement(); // end of a: marker\n }\n }\n };\n WordExport.prototype.parseChartDataPoint = function (writer, series) {\n // data point\n var dataPoints = series.dataPoints;\n var points = [];\n for (var j = 0; j < dataPoints.length; j++) {\n points.push(dataPoints[j]);\n writer.writeStartElement('c', 'dPt', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, j.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'bubble3D', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:bubble3D\n this.parseChartSeriesColor(writer, points, this.chart.chartType);\n writer.writeEndElement(); // end of c:dPt\n points = [];\n }\n };\n // chart data value\n WordExport.prototype.serializeChartCategory = function (writer, chart, cacheType) {\n var chartCategory = chart.chartCategory;\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString('Sheet1!$A$2:$A$' + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', cacheType, this.chartNamespace);\n if (cacheType === 'numCache') {\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n }\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var i = 0; i < chartCategory.length; i++) {\n var category = chartCategory[i];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, i.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (category.categoryXName !== '') {\n writer.writeString(category.categoryXName);\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n writer.writeEndElement(); // end of cacheType\n };\n // chart value\n WordExport.prototype.serializeChartValue = function (writer, valueSheet, chartType) {\n var isScatterType = (chartType === 'scatterChart' || chartType === 'bubbleChart');\n var valueType = 'val';\n if (isScatterType) {\n valueType = 'yVal';\n }\n this.serializeChartYValue(writer, valueType, valueSheet);\n if (chartType === 'bubbleChart') {\n valueType = 'bubbleSize';\n valueSheet = 'Sheet1!$C$2:$C$';\n this.serializeChartYValue(writer, valueType, valueSheet);\n }\n if (chartType === 'lineChart' || chartType === 'scatterChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n };\n WordExport.prototype.serializeChartYValue = function (writer, valueType, valueSheet) {\n var chart = this.chart;\n var chartCategory = chart.chartCategory;\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', valueType, this.chartNamespace);\n writer.writeStartElement('c', 'numRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString(valueSheet + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', 'numCache', this.chartNamespace);\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var j = 0; j < chartCategoryCount; j++) {\n var category = chartCategory[j];\n for (var k = 0; k < category.chartData.length; k++) {\n if (k === this.seriesCount) {\n var chartData = category.chartData[this.seriesCount];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, j.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (valueType !== 'bubbleSize') {\n writer.writeString(chartData.yValue.toString());\n }\n else {\n writer.writeString(chartData.size.toString());\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n }\n }\n writer.writeEndElement(); // end of numCache\n writer.writeEndElement(); // end of numRef\n writer.writeEndElement(); // end of val\n };\n // chart type\n WordExport.prototype.chartType = function (chart) {\n var chartType = chart.chartType;\n switch (chartType) {\n case 'Pie':\n chartType = 'pieChart';\n break;\n case 'Doughnut':\n chartType = 'doughnutChart';\n break;\n case 'Scatter_Markers':\n chartType = 'scatterChart';\n break;\n case 'Bubble':\n chartType = 'bubbleChart';\n break;\n }\n if (chartType === 'Area' || chartType === 'Area_Stacked' || chartType === 'Area_Stacked_100') {\n chartType = 'areaChart';\n }\n if (chartType === 'Bar_Stacked_100' || chartType === 'Bar_Stacked' || chartType === 'Bar_Clustered' ||\n chartType === 'Column_Clustered' || chartType === 'Column_Stacked' || chartType === 'Column_Stacked_100') {\n chartType = 'barChart';\n }\n if (chartType === 'Line' || chartType === 'Line_Markers' || chartType === 'Line_Markers_Stacked' || chartType === 'Line_Stacked'\n || chartType === 'Line_Markers_Stacked_100' || chartType === 'Line_Stacked_100') {\n chartType = 'lineChart';\n }\n return chartType;\n };\n // chart group\n WordExport.prototype.chartGrouping = function (type) {\n var grouping = 'standard';\n if (type === 'Bar_Stacked' || type === 'Column_Stacked' || type === 'Area_Stacked'\n || type === 'Line_Stacked' || type === 'Line_Markers_Stacked') {\n grouping = 'stacked';\n }\n else if (type === 'Bar_Stacked_100' || type === 'Column_Stacked_100' ||\n type === 'Area_Stacked_100' || type === 'Line_Stacked_100' ||\n type === 'Line_Markers_Stacked_100') {\n grouping = 'percentStacked';\n }\n else if (type === 'Bar_Clustered' || type === 'Column_Clustered') {\n grouping = 'clustered';\n }\n return grouping;\n };\n // chart legend position\n WordExport.prototype.chartLegendPosition = function (chart) {\n var legendPosition = chart.position;\n switch (legendPosition) {\n case 'Top':\n legendPosition = 't';\n break;\n case 'Bottom':\n legendPosition = 'b';\n break;\n case 'Left':\n legendPosition = 'l';\n break;\n case 'Right':\n legendPosition = 'r';\n break;\n case 'Corner':\n legendPosition = 'tr';\n break;\n default:\n legendPosition = 'b';\n break;\n }\n return legendPosition;\n };\n // update the chard id\n WordExport.prototype.updatechartId = function (chart) {\n var id = '';\n if (id === '') {\n id = this.addChartRelation(this.documentCharts, chart);\n }\n return id;\n };\n // adds the chart relation.\n WordExport.prototype.addChartRelation = function (chartCollection, chart) {\n var relationId = '';\n relationId = this.getNextRelationShipID();\n chartCollection.add(relationId, chart);\n return relationId;\n };\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n WordExport.prototype.serializeShapeDrawingGraphics = function (writer, shape) {\n var val = shape.autoShapeType;\n var id = shape.shapeId;\n this.serializeShapeWrapStyle(writer, shape);\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, shape.name);\n writer.writeAttributeString(undefined, 'title', undefined, shape.title);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.wpShapeNamespace);\n writer.writeStartElement('wps', 'wsp', this.wpShapeNamespace);\n writer.writeStartElement('wps', 'cNvCnPr', this.wpShapeNamespace);\n writer.writeStartElement('a', 'cxnSpLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeShapeType', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('wps', 'spPr', this.wpShapeNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((shape.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((shape.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n if (val === 'StraightConnector') {\n writer.writeAttributeString(undefined, 'prst', undefined, 'straightConnector1');\n }\n else if (val === 'RoundedRectangle') {\n writer.writeAttributeString(undefined, 'prst', undefined, 'roundRect');\n }\n else {\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n }\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n if (shape.fillFormat && shape.fillFormat.color && shape.fillFormat.fill) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape.fillFormat.color));\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n var lineWeight = shape.lineFormat.weight ? shape.lineFormat.weight * this.emusPerPoint : this.emusPerPoint;\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, lineWeight.toString());\n if ((!isNullOrUndefined(shape.lineFormat.lineFormatType) && shape.lineFormat.lineFormatType !== 'None')\n || shape.lineFormat.line) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape.lineFormat.color));\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'headEnd', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'tailEnd', this.aNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (val === 'Rectangle' || val === 'RoundedRectangle') {\n writer.writeStartElement('wps', 'txbx', this.wpShapeNamespace);\n writer.writeStartElement(undefined, 'txbxContent', this.wNamespace);\n this.serializeBodyItems(writer, shape.textFrame.blocks, true);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeStartElement('wps', 'bodyPr', this.wpShapeNamespace);\n if (!isNullOrUndefined(shape.textFrame)) {\n var margin = void 0;\n if (shape.textFrame.leftMargin >= 0) {\n margin = Math.round(shape.textFrame.leftMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'lIns', undefined, margin);\n }\n if (shape.textFrame.topMargin >= 0) {\n margin = Math.round(shape.textFrame.topMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'tIns', undefined, margin);\n }\n if (shape.textFrame.rightMargin >= 0) {\n margin = Math.round(shape.textFrame.rightMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'rIns', undefined, margin);\n }\n if (shape.textFrame.bottomMargin >= 0) {\n margin = Math.round(shape.textFrame.bottomMargin * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'bIns', undefined, margin);\n }\n writer.writeAttributeString(undefined, 'anchor', undefined, 't');\n writer.writeAttributeString(undefined, 'anchorCtr', undefined, '0');\n }\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeShapeWrapStyle = function (writer, shape) {\n if (shape.textWrappingStyle !== 'Inline') {\n var textWrappingStyle = 'wrapNone';\n if (shape.textWrappingStyle && shape.textWrappingStyle !== 'InFrontOfText' && shape.textWrappingStyle !== 'Behind') {\n textWrappingStyle = 'wrap' + shape.textWrappingStyle;\n if (shape.textWrappingStyle === 'Tight') {\n textWrappingStyle = 'wrap' + 'Square';\n }\n }\n writer.writeStartElement('wp', textWrappingStyle, this.wpNamespace);\n if (shape.textWrappingStyle && shape.textWrappingStyle !== 'InFrontOfText' && shape.textWrappingStyle !== 'Behind' &&\n shape.textWrappingType) {\n var wrapType = shape.textWrappingType === 'Both' ? 'bothSides' : shape.textWrappingType.toLowerCase();\n writer.writeAttributeString(undefined, 'wrapText', undefined, wrapType);\n }\n writer.writeEndElement();\n }\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n var format;\n if (picture.isMetaFile && !isNullOrUndefined(picture.metaFileImageString)) {\n format = HelperMethods.formatClippedString(picture.metaFileImageString).extension;\n if (format !== '.svg') {\n picture.imageString = picture.metaFileImageString;\n }\n }\n id = this.updateShapeId(picture, false);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n if (!isNullOrUndefined(picture.alternativeText)) {\n writer.writeAttributeString(undefined, 'descr', undefined, picture.alternativeText);\n }\n writer.writeAttributeString(undefined, 'name', undefined, !isNullOrUndefined(picture.name) ? picture.name : '');\n if (!isNullOrUndefined(picture.title))\n writer.writeAttributeString(undefined, 'title', undefined, picture.title);\n // else\n // writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(picture.imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, picture.imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n }\n }\n if (format === '.svg') {\n this.serializeBlipExtensions(writer, picture);\n }\n //End Element Blip\n writer.writeEndElement();\n if (picture.iscrop) {\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n var l = Math.round(picture.left * 1000);\n writer.writeAttributeString(undefined, 'l', undefined, l.toString());\n var t = Math.round(picture.top * 1000);\n writer.writeAttributeString(undefined, 't', undefined, t.toString());\n var r = Math.round(picture.right * 1000);\n writer.writeAttributeString(undefined, 'r', undefined, r.toString());\n var b = Math.round(picture.bottom * 1000);\n writer.writeAttributeString(undefined, 'b', undefined, b.toString());\n writer.writeEndElement();\n }\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBlipExtensions = function (writer, picture) {\n writer.writeStartElement('a', 'extLst', this.aNamespace);\n writer.writeStartElement('a', \"ext\", this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, '{96DAC541-7B7A-43D3-8B79-37D633B846F1}');\n writer.writeStartElement(\"asvg\", \"svgBlip\", this.svgNamespace);\n var id = this.updateShapeId(picture, true);\n writer.writeAttributeString(\"r\", \"embed\", undefined, id);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture, isSvgData) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture, isSvgData);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty('sectionFormat') || tOwner.hasOwnProperty('inlines')) {\n id = this.addImageRelation(!isSvgData ? this.documentImages : this.svgImages, picture);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image) {\n var relationId = '';\n // if (imageCollection.ContainsValue(imageRecord)) {\n // foreach(string key in imageCollection.keys)\n // {\n // if (imageRecord === imageCollection[key]) {\n // relationId = key;\n // break;\n // }\n // }\n // }\n // else {\n relationId = this.getNextRelationShipID();\n imageCollection.add(relationId, image);\n // }\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image, isSvgImage) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (isSvgImage) {\n if (this.headerFooterSvgImages.containsKey(headerId)) {\n headerImages = this.headerFooterSvgImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterSvgImages.add(headerId, headerImages);\n }\n }\n else {\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (table.rows.length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table.rows[0].rowFormat;\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n var mVerticalMerge = new Dictionary();\n var mHorizontalMerge = new Dictionary();\n var cellFormats = new Dictionary();\n var rows = table.rows;\n if (rows.length > 0) {\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n var row = rows[rowIndex];\n if (row.cells.length > 0) {\n if (row.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, row.contentControlProperties, row);\n continue;\n }\n var owner_1 = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n var cells = row.cells;\n var cellLength = cells.length;\n var prevColIndex = 0;\n for (var i = 0; i < cellLength; i++) {\n var cell = cells[i];\n var columnIndex = cell.columnIndex;\n if (cell.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, cell.contentControlProperties, cell);\n continue;\n }\n var cellFormat = cell.cellFormat;\n if ((columnIndex - prevColIndex) > 0) {\n var checkIndex = i === 0 ? 0 : (prevColIndex + 1);\n for (var k = checkIndex; k < columnIndex; k++) {\n if (mVerticalMerge.containsKey(k)) {\n var format = this.getMergeCellFormat(cellFormat, cellFormats.get(k), k < cell.columnIndex);\n this.serializeTableCell(writer, cell, format, false);\n mVerticalMerge.set(k, mVerticalMerge.get(k) - 1);\n if (mVerticalMerge.get(k) === 1) {\n mVerticalMerge.remove(k);\n cellFormats.remove(k);\n if (mHorizontalMerge.containsKey(k)) {\n mHorizontalMerge.remove(k);\n }\n }\n if (mHorizontalMerge.containsKey(k)) {\n prevColIndex += mHorizontalMerge.get(k) - 1;\n k += mHorizontalMerge.get(k);\n }\n }\n }\n }\n prevColIndex = columnIndex;\n if (cellFormat.rowSpan > 1) {\n mVerticalMerge.add(columnIndex, cellFormat.rowSpan);\n cellFormats.add(columnIndex, cellFormat);\n }\n this.serializeTableCell(writer, cell, cellFormat, true);\n if (cellFormat.columnSpan > 1 && cellFormat.rowSpan > 1) {\n mHorizontalMerge.add(columnIndex, cellFormat.columnSpan);\n }\n for (var j = columnIndex + 1;; j++) {\n if (mVerticalMerge.containsKey(j)) {\n var mergeFormat = this.getMergeCellFormat(cellFormat, cellFormats.get(j), j < cell.columnIndex);\n this.serializeTableCell(writer, cell, mergeFormat, false);\n mVerticalMerge.set(j, mVerticalMerge.get(j) - 1);\n prevColIndex++;\n if (mVerticalMerge.get(j) === 1) {\n mVerticalMerge.remove(j);\n cellFormats.remove(j);\n if (mHorizontalMerge.containsKey(j)) {\n mHorizontalMerge.remove(j);\n }\n }\n if (mHorizontalMerge.containsKey(j)) {\n prevColIndex += mHorizontalMerge.get(j) - 1;\n j += mHorizontalMerge.get(j);\n }\n }\n else if (!(i === (cellLength - 1) && j < table.columnCount)) {\n break;\n }\n }\n }\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner_1;\n }\n }\n }\n writer.writeEndElement();\n this.table = owner;\n };\n WordExport.prototype.getMergeCellFormat = function (cellFormat, mergedCellFormat, before) {\n var format = mergedCellFormat;\n if (before) {\n format.borders.right = cellFormat.borders.left;\n }\n else {\n format.borders.left = cellFormat.borders.right;\n }\n return format;\n };\n WordExport.prototype.serializeTableCell = function (xmlWriter, cell, cellFormat, mergeStart) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n xmlWriter.writeStartElement(undefined, 'tc', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(xmlWriter, cellFormat);\n this.serializeCellMargins(xmlWriter, cellFormat);\n xmlWriter.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(xmlWriter, cellFormat.borders, 8, false);\n xmlWriter.writeEndElement(); // end of tcBorders\n this.serializeShading(xmlWriter, cell.cellFormat.shading);\n this.serializeTableCellDirection(xmlWriter, cellFormat);\n this.serializeCellVerticalAlign(xmlWriter, cellFormat.verticalAlignment);\n if (cellFormat.columnSpan > 1) {\n var num = cellFormat.columnSpan;\n xmlWriter.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n xmlWriter.writeEndElement();\n }\n if (cellFormat.rowSpan > 1) {\n xmlWriter.writeStartElement(undefined, 'vMerge', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, mergeStart ? 'restart' : 'continue');\n xmlWriter.writeEndElement(); // end of vMerge\n }\n xmlWriter.writeEndElement(); // end of tcPr\n if (cell && cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(xmlWriter, item, false);\n itemIndex += 1;\n }\n }\n else {\n xmlWriter.writeStartElement(undefined, 'p', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pPr', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pStyle', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n xmlWriter.writeEndElement(); //end of pStyle\n xmlWriter.writeEndElement(); //end of pPr\n xmlWriter.writeEndElement(); //end of P\n }\n xmlWriter.writeEndElement(); //end of table cell 'tc' \n this.blockOwner = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table.grid.length !== 0) {\n this.serializeGridColumns(writer, table.grid);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n var mVerticalMerge = new Dictionary();\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.cells.length > 0) {\n if (row.hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, row.contentControlProperties, row);\n continue;\n }\n this.serializeRow(writer, row, mVerticalMerge);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row, mVerticalMerge) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row.cells, mVerticalMerge);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n this.serializeRowMargins(writer, row.rowFormat);\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row.rowFormat.height > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row.rowFormat.heightType === 'Exactly') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row.rowFormat.heightType === 'AtLeast') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row.rowFormat.height * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row.rowFormat;\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat.gridBefore;\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat.gridAfter;\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat.gridBeforeWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat.gridAfterWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!rowFormat.allowBreakAcrossPages) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (rowFormat.isHeader) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n //serialize revision\n if (!isNullOrUndefined(rowFormat.revisionIds) && rowFormat.revisionIds.length > 0) {\n this.serializeRevisionStart(writer, rowFormat, undefined);\n this.serializeRevisionEnd(writer, rowFormat, undefined);\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells, mVerticalMerge) {\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].hasOwnProperty('contentControlProperties')) {\n this.serializeContentControl(writer, cells[i].contentControlProperties, cells[i]);\n continue;\n }\n this.serializeCell(writer, cells[i], mVerticalMerge);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell, mVerticalMerge) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n mVerticalMerge = this.serializeCellFormat(writer, cell.cellFormat, true, true, mVerticalMerge);\n if (cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n var increment = 1;\n // let count: number = 0;\n if (mVerticalMerge.containsKey((cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment) && this.row.cells.length === 1) {\n var length_1 = mVerticalMerge.keys[mVerticalMerge.keys.length - 1];\n while (increment <= length_1) {\n increment = this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n increment++;\n }\n }\n else {\n this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n }\n this.blockOwner = owner;\n };\n WordExport.prototype.createCellForMerge = function (writer, cell, mVerticalMerge, increment) {\n while (mVerticalMerge.containsKey((cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment)\n && (((this.row.cells.indexOf(cell) === this.row.cells.length - 1) || this.row.cells.indexOf(cell) === cell.columnIndex))\n && cell.nextNode === undefined) {\n var collKey = (cell.columnIndex + cell.cellFormat.columnSpan - 1) + increment;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n var endProperties = true;\n if (!isNullOrUndefined(this.spanCellFormat)) {\n endProperties = false;\n mVerticalMerge = this.serializeCellFormat(writer, this.spanCellFormat, false, endProperties, mVerticalMerge);\n }\n else {\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n endProperties = false;\n }\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n if (isNullOrUndefined(this.spanCellFormat)) {\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell.cellFormat.borders, 8, false);\n writer.writeEndElement();\n }\n if (!endProperties) {\n writer.writeEndElement();\n }\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement(); //end of P\n writer.writeEndElement(); //end of table cell 'tc' \n increment++;\n //count++;\n }\n return increment;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat, ensureMerge, endProperties, mVerticalMerge) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table.tableFormat;\n //Get the row format\n var rf = this.row.rowFormat;\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cellFormat);\n // serialize cell margins\n this.serializeCellMargins(writer, cellFormat);\n if (ensureMerge) {\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n mVerticalMerge = this.serializeCellMerge(writer, cellFormat, mVerticalMerge);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n }\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat.borders, 8, false);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell.cellFormat.shading);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat.verticalAlignment);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n if (endProperties) {\n writer.writeEndElement();\n }\n return mVerticalMerge;\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cf) {\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.percentageFactor).toString());\n }\n else if (cf.preferredWidthType === 'Auto') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat, mVerticalMerge) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell.columnIndex;\n var cellIndex = this.row.cells.indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row.cells[cellIndex - 1].columnIndex : cell.columnIndex;\n if (cell.columnIndex === cellIndex) {\n collKey = cell.columnIndex;\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell.columnIndex;\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (collKey === 0 && mVerticalMerge.containsKey(collKey)) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n }\n }\n if (cellFormat.rowSpan > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.spanCellFormat = cellFormat;\n mVerticalMerge.add(collKey, cellFormat.rowSpan - 1);\n if (cellFormat.columnSpan > 1) {\n this.mGridSpans.add(collKey, cellFormat.columnSpan);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (mVerticalMerge.containsKey(collKey) && isserialized) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n return mVerticalMerge;\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell, mVerticalMerge) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell.cellFormat.borders, 8, false);\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell.cellFormat);\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n return mVerticalMerge;\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey, mVerticalMerge) {\n if ((mVerticalMerge.get(collKey) - 1) === 0) {\n mVerticalMerge.remove(collKey);\n this.spanCellFormat = undefined;\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n mVerticalMerge.set(collKey, mVerticalMerge.get(collKey) - 1);\n }\n return mVerticalMerge;\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell.cellFormat.columnSpan > 1) {\n var num = cell.cellFormat.columnSpan;\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n case 'Bottom':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 0, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize'); \n this.serializeTablePositioning(writer, table);\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table.tableFormat);\n this.serializeCellSpacing(writer, table.tableFormat);\n this.serializeTableIndentation(writer, table.tableFormat);\n this.serializeTableMargins(writer, table.tableFormat);\n this.serializeTableBorders(writer, table.tableFormat);\n this.serializeShading(writer, table.tableFormat.shading);\n if (table.tableFormat.bidi) {\n writer.writeStartElement(undefined, 'bidiVisual', this.wNamespace);\n writer.writeEndElement();\n }\n this.serializeTblLayout(writer, table.tableFormat);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table position\n WordExport.prototype.serializeTablePositioning = function (writer, table) {\n if (table.wrapTextAround) {\n writer.writeStartElement('w', 'tblpPr', this.wNamespace);\n if (table.positioning.distanceLeft > 0) {\n var left = Math.round(table.positioning.distanceLeft * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'leftFromText', this.wNamespace, left);\n }\n if (table.positioning.distanceRight > 0) {\n var right = Math.round(table.positioning.distanceRight * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'rightFromText', this.wNamespace, right);\n }\n if (table.positioning.distanceTop > 0) {\n var top_1 = Math.round(table.positioning.distanceTop * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'topFromText', this.wNamespace, top_1);\n }\n if (table.positioning.distanceBottom > 0) {\n var bottom = Math.round(table.positioning.distanceBottom * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'bottomFromText', this.wNamespace, bottom);\n }\n if (table.positioning.verticalOrigin) {\n var verticalOrigin = table.positioning.verticalOrigin === 'Paragraph' ? 'text' : table.positioning.verticalOrigin.toLowerCase();\n writer.writeAttributeString('w', 'vertAnchor', this.wNamespace, verticalOrigin);\n }\n if (table.positioning.horizontalOrigin && table.positioning.horizontalOrigin !== 'Column') {\n writer.writeAttributeString('w', 'horzAnchor', this.wNamespace, table.positioning.horizontalOrigin.toLowerCase());\n }\n if (table.positioning.horizontalAlignment && table.positioning.horizontalAlignment !== 'Left') {\n var horizontalAlignment = table.positioning.horizontalAlignment.toLowerCase();\n writer.writeAttributeString('w', 'tblpXSpec', this.wNamespace, horizontalAlignment);\n }\n if (table.positioning.verticalAlignment && table.positioning.verticalAlignment !== 'None') {\n var verticalAlignment = table.positioning.verticalAlignment.toLowerCase();\n writer.writeAttributeString('w', 'tblpYSpec', this.wNamespace, verticalAlignment);\n }\n if (((!isNullOrUndefined(table.positioning.horizontalAlignment) && table.positioning.horizontalAlignment === 'Left')\n || !table.positioning.horizontalAlignment)\n && table.positioning.horizontalPosition > 0) {\n var horizontalPosition = Math.round(table.positioning.horizontalPosition * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpX', this.wNamespace, horizontalPosition);\n }\n if ((!table.positioning.verticalAlignment || table.positioning.verticalAlignment === 'None') && table.positioning.verticalPosition > 0) {\n var verticalPosition = Math.round(table.positioning.verticalPosition * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpY', this.wNamespace, verticalPosition);\n }\n writer.writeEndElement();\n if (!table.positioning.allowOverlap) {\n writer.writeStartElement('w', 'tblOverlap', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'never');\n writer.writeEndElement();\n }\n }\n };\n // serialize the table margin\n WordExport.prototype.serializeTableMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tblCellMar');\n };\n // serialize the row margin\n WordExport.prototype.serializeRowMargins = function (writer, format) {\n writer.writeStartElement(undefined, 'tblPrEx', this.wNamespace);\n this.serializeMargins(writer, format, 'tblCellMar');\n writer.writeEndElement();\n };\n // serialize the cell margins\n WordExport.prototype.serializeCellMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tcMar');\n };\n // serialize the table margins, row margins, cell margins\n WordExport.prototype.serializeMargins = function (writer, format, tag) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!isNullOrUndefined(format.topMargin)) {\n var topMargin = Math.round(format.topMargin * 20);\n writer.writeStartElement(undefined, 'top', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, topMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.leftMargin)) {\n var leftMargin = Math.round(format.leftMargin * 20);\n writer.writeStartElement(undefined, 'left', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, leftMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.bottomMargin)) {\n var bottomMargin = Math.round(format.bottomMargin * 20);\n writer.writeStartElement(undefined, 'bottom', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, bottomMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format.rightMargin)) {\n var rightMargin = Math.round(format.rightMargin * 20);\n writer.writeStartElement(undefined, 'right', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, rightMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n if (format.backgroundColor && format.backgroundColor !== 'empty') {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format.backgroundColor));\n }\n else {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, 'auto');\n }\n if (format.foregroundColor === 'empty' || isNullOrUndefined(format.foregroundColor)) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format.foregroundColor));\n }\n if (!isNullOrUndefined(format.textureStyle)) {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format.textureStyle));\n }\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n return 'pct5';\n case 'Texture10Percent':\n return 'pct10';\n case 'Texture12Pt5Percent':\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n return 'pct30';\n case 'Texture35Percent':\n return 'pct35';\n case 'Texture37Pt5Percent':\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n return 'pct55';\n case 'Texture60Percent':\n return 'pct60';\n case 'Texture62Pt5Percent':\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n return 'pct80';\n case 'Texture85Percent':\n return 'pct85';\n case 'Texture87Pt5Percent':\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n return 'pct95';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n return 'horzStripe';\n case 'TextureDarkVertical':\n return 'vertStripe';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n return 'thinVertStripe';\n default:\n return 'clear';\n }\n };\n //serialize the paragraph border\n WordExport.prototype.serializeParagraphBorders = function (writer, formatPara) {\n var borders = formatPara.borders;\n writer.writeStartElement(undefined, 'pBdr', this.wNamespace);\n this.serializeBorders(writer, formatPara.borders, 8, true);\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format.borders;\n // if (IsNoneBorder(borders))\n // return;\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format.borders, 8, false);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler, isParagraphBorder) {\n this.serializeBorder(writer, borders.top, 'top', multipler);\n this.serializeBorder(writer, borders.left, 'left', multipler);\n this.serializeBorder(writer, borders.bottom, 'bottom', multipler);\n this.serializeBorder(writer, borders.right, 'right', multipler);\n if (isParagraphBorder) {\n this.serializeBorder(writer, borders.horizontal, 'between', multipler);\n this.serializeBorder(writer, borders.vertical, 'bar', multipler);\n }\n else {\n this.serializeBorder(writer, borders.horizontal, 'insideH', multipler);\n this.serializeBorder(writer, borders.vertical, 'insideV', multipler);\n this.serializeBorder(writer, borders.diagonalDown, 'tl2br', multipler);\n this.serializeBorder(writer, borders.diagonalUp, 'tr2bl', multipler);\n }\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n if (!format.allowAutoFit) {\n writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n writer.writeEndElement();\n }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border.lineStyle;\n var sz = ((border.lineWidth ? border.lineWidth : 0) * multiplier);\n var space = border.space ? border.space : 0;\n if (borderStyle === 'Cleared') {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if (((borderStyle === 'None' || isNullOrUndefined(borderStyle)) && !border.hasNoneStyle) || sz <= 0) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n if (border.color) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border.color));\n }\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (border.shadow) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n return 'dotted';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n return 'dashed';\n case 'DashDotDot':\n return 'dotDotDash';\n case 'Double':\n return 'double';\n case 'ThinThickSmallGap':\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n return 'thinThickLargeGap';\n case 'ThinThickThinLargeGap':\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n return 'wave';\n case 'DoubleWavy':\n return 'doubleWave';\n case 'DashDotStroked':\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n return 'threeDEmboss';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n if (!isNullOrUndefined(format.leftIndent)) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format.leftIndent * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format.cellSpacing) && format.cellSpacing > 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal((format.cellSpacing / 2) * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table.tableFormat.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, (table.tableFormat.preferredWidth * this.percentageFactor).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table.tableFormat.preferredWidthType === 'Point') {\n var tableWidth = Math.round(table.tableFormat.preferredWidth * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format.tableAlignment) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field.characterFormat);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field.fieldType === 0 ? 'begin'\n : field.fieldType === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n if (type === 'begin' && !isNullOrUndefined(field.formFieldData)) {\n var formFieldData = field.formFieldData;\n writer.writeStartElement(undefined, 'ffData', this.wNamespace);\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.name);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'enabled', this.wNamespace);\n writer.writeEndElement();\n if (formFieldData.hasOwnProperty('textInput')) {\n writer.writeStartElement(undefined, 'textInput', this.wNamespace);\n var type_1 = formFieldData.textInput.type;\n if (type_1 === 'Number' || 'Date') {\n writer.writeStartElement(undefined, 'type', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.type == 'Calculation' ? 'calculated' : formFieldData.textInput.type.toString().toLowerCase());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'default', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.defaultValue);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'format', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.textInput.format);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else if (formFieldData.hasOwnProperty('checkBox')) {\n writer.writeStartElement(undefined, 'checkBox', this.wNamespace);\n if (formFieldData.checkBox.sizeType === 'Auto') {\n writer.writeStartElement(undefined, 'sizeAuto', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'size', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.roundToTwoDecimal(formFieldData.checkBox.size * 2).toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'defalut', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.checkBox.defaultValue ? '1' : '0');\n writer.writeEndElement();\n if (formFieldData.checkBox.checked) {\n writer.writeStartElement(undefined, 'checked', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.checkBox.checked ? '1' : '0');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'ddList', this.wNamespace);\n if (formFieldData.dropDownList.selectedIndex !== 0) {\n writer.writeStartElement(undefined, 'result', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.dropDownList.selectedIndex.toString());\n writer.writeEndElement();\n }\n for (var i = 0; i < formFieldData.dropDownList.dropDownItems.length; i++) {\n writer.writeStartElement(undefined, 'listEntry', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData.dropDownList.dropDownItems[i].toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (field.fieldType === 0 && field.fieldCodeType === 'FieldFormTextInput') {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement(undefined, 'instrText', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString('FORMTEXT');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode, efType) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n if (!isNullOrUndefined(span.characterFormat)) {\n this.serializeCharacterFormat(writer, span.characterFormat);\n }\n if (span.text === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span.text === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else if (span.text === '\\f') {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'page');\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%02') {\n writer.writeStartElement(undefined, 'footnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%02' && efType === 'endnote') {\n writer.writeStartElement(undefined, 'endnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%03') {\n writer.writeStartElement(undefined, 'separator', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span.text) === '%04') {\n writer.writeStartElement(undefined, 'continuationSeparator', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n var isDeleteText = this.retrieveDeleteRevision(span);\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType !== 2;\n var localName = isField ? isDeleteText ? 'delInstrText' : 'instrText' : isDeleteText ? 'delText' : 't';\n writer.writeStartElement(undefined, localName, this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span.text);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n WordExport.prototype.retrieveDeleteRevision = function (span) {\n if (span.hasOwnProperty('revisionIds')) {\n if (span.revisionIds.length > 0) {\n for (var i = 0; i < span.revisionIds.length; i++) {\n if (this.retrieveRevision(span.revisionIds[i]).revisionType === 'Deletion') {\n return true;\n }\n }\n }\n }\n return false;\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph) {\n if (isNullOrUndefined(paragraphFormat)) {\n return;\n }\n this.serializeParagraphBorders(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat.styleName)) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat.styleName);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat.listFormat);\n }\n if (paragraphFormat.bidi) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.keepWithNext) && paragraphFormat.keepWithNext) {\n writer.writeStartElement(undefined, 'keepNext', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.keepLinesTogether) && paragraphFormat.keepLinesTogether) {\n writer.writeStartElement(undefined, 'keepLines', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.outlineLevel)) {\n writer.writeStartElement(undefined, 'outlineLvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getOutlineLevelValue(paragraphFormat.outlineLevel).toString());\n writer.writeEndElement();\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat.contextualSpacing)) {\n writer.writeStartElement('w', 'contextualSpacing', this.wNamespace);\n if (!paragraphFormat.contextualSpacing) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat.widowControl)) {\n writer.writeStartElement('w', 'widowControl', this.wNamespace);\n if (paragraphFormat.widowControl) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '1');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat.textAlignment, paragraphFormat.bidi);\n if (!isNullOrUndefined(paragraphFormat.tabs) && paragraphFormat.tabs.length > 0) {\n this.serializeTabs(writer, paragraphFormat.tabs);\n }\n };\n WordExport.prototype.getOutlineLevelValue = function (outlineLvl) {\n if (outlineLvl.indexOf('Level') !== -1) {\n var lvlNumber = parseInt(outlineLvl.substring(5), 10);\n if (lvlNumber > 0) {\n return lvlNumber - 1;\n }\n }\n return 9;\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop.position === 0 && tabStop.deletePosition !== 0) {\n position = tabStop.deletePosition * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop.position * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop.tabJustification));\n }\n if (!isNullOrUndefined(tabStop.tabLeader) && (tabStop.tabLeader !== 'None')) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop.tabLeader));\n }\n if (!isNaN(position)) {\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n }\n writer.writeEndElement();\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n return 'dot';\n case 'Hyphen':\n return 'hyphen';\n case 'Underscore':\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n return 'bar';\n case 'Center':\n return 'center';\n case 'Decimal':\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n return 'num';\n case 'Right':\n return 'right';\n default:\n return 'clear';\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf.listId) || !isNullOrUndefined(lf.listLevelNumber)) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf.listLevelNumber) && lf.listLevelNumber !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf.listLevelNumber.toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf.listId)) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n var listId = (lf.listId + 1).toString();\n if (lf.listId === -1) {\n listId = '';\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, listId);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment, isBidi) {\n if (isBidi) {\n if (txtAlignment === 'Right') {\n txtAlignment = 'Left';\n }\n else if (txtAlignment === 'Left') {\n txtAlignment = 'Right';\n }\n }\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n alignment = 'center';\n break;\n case 'Right':\n alignment = 'right';\n break;\n case 'Justify':\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n if (!isNullOrUndefined(paragraphFormat.beforeSpacing)) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.spaceBeforeAuto)) {\n var value = (paragraphFormat.spaceBeforeAuto) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'beforeAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat.afterSpacing)) {\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.spaceAfterAuto)) {\n var value = (paragraphFormat.spaceAfterAuto) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'afterAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n if (!isNullOrUndefined(paragraphFormat.lineSpacing)) {\n var lineSpacingValue = (paragraphFormat.lineSpacingType === 'AtLeast' || paragraphFormat.lineSpacingType === 'Exactly') ? this.roundToTwoDecimal(paragraphFormat.lineSpacing * this.twentiethOfPoint) : this.roundToTwoDecimal(paragraphFormat.lineSpacing * 240);\n writer.writeAttributeString(undefined, 'line', this.wNamespace, lineSpacingValue.toString());\n }\n if (!isNullOrUndefined(paragraphFormat.lineSpacingType)) {\n var lineSpacingType = 'auto';\n if (paragraphFormat.lineSpacingType === 'AtLeast') {\n lineSpacingType = 'atLeast';\n }\n else if (paragraphFormat.lineSpacingType === 'Exactly') {\n lineSpacingType = 'exact';\n }\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, lineSpacingType);\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat.leftIndent)) {\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.leftIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.rightIndent)) {\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.rightIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n if (paragraphFormat.firstLineIndent < 0) {\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n else {\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n //creates custom xml mapping\n WordExport.prototype.serializeCustomXMLMapping = function (customXML, writer) {\n if (customXML.length > 0) {\n var keys = customXML.keys;\n for (var i = 0; i < keys.length; i++) {\n var customXmlWriter = new XmlWriter();\n customXmlWriter.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var xmlData = this.mCustomXML.get(keys[i]);\n var itemID = keys[i];\n var id = this.getNextRelationShipID();\n var fileIndex = i + 1;\n var itemPath = this.createXMLItem(xmlData, id, fileIndex);\n var itemPropsPath = this.createXMLItemProps(itemID, fileIndex);\n this.serializeRelationShip(writer, id, this.customXmlRelType, '../' + itemPath);\n this.customXMLRelation(customXmlWriter, fileIndex, itemPropsPath);\n customXmlWriter.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(customXmlWriter.buffer, this.customXMLRelPath + fileIndex + '.xml.rels');\n this.mArchive.addItem(zipArchiveItem);\n }\n }\n };\n WordExport.prototype.customXMLRelation = function (writer, fileIndex, itemPropsPath) {\n this.serializeRelationShip(writer, 'rId1', this.wordMLCustomXmlPropsRelType, itemPropsPath);\n };\n WordExport.prototype.createXMLItem = function (xmlData, id, fileIndex) {\n var xmlBlob = new Blob([xmlData], { type: 'text/plain' });\n var itemPath = this.customXMLItemsPath + fileIndex + '.xml';\n var zipArchiveItem = new ZipArchiveItem(xmlBlob, itemPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPath;\n };\n WordExport.prototype.createXMLItemProps = function (itemID, fileIndex) {\n var writer = new XmlWriter();\n var customitemPropsPath = this.customXMLItemsPropspath + fileIndex + '.xml';\n var itemPropsPath = this.itemPropsPath + fileIndex + '.xml';\n writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n writer.writeEndElement();\n this.customXMLProps.push(customitemPropsPath);\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPropsPath;\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = style.type === 'Paragraph' ? 'paragraph' : 'character';\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style.name);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.name);\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style.basedOn)) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.basedOn);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style.next)) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.next);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style.link)) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.link);\n writer.writeEndElement();\n }\n if (style.type === 'Paragraph') {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style.paragraphFormat, undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n this.serializeCharacterFormat(writer, style.characterFormat);\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat.styleName)) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat.styleName);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontFamily)) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n writer.writeAttributeString(undefined, 'ascii', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'hAnsi', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'eastAsia', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'cs', this.wNamespace, characterFormat.fontFamilyBidi);\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat.bold)) {\n this.serializeBoolProperty(writer, 'b', characterFormat.bold);\n }\n if (characterFormat.boldBidi) {\n this.serializeBoolProperty(writer, 'bCs', characterFormat.boldBidi);\n }\n if (!isNullOrUndefined(characterFormat.italic)) {\n this.serializeBoolProperty(writer, 'i', characterFormat.italic);\n }\n if (!isNullOrUndefined(characterFormat.italicBidi)) {\n this.serializeBoolProperty(writer, 'iCs', characterFormat.italicBidi);\n }\n if (characterFormat.bidi) {\n writer.writeStartElement(undefined, 'rtl', this.wNamespace);\n writer.writeEndElement();\n }\n if (characterFormat.allCaps) {\n this.serializeBoolProperty(writer, 'caps', characterFormat.allCaps);\n }\n if (!isNullOrUndefined(characterFormat.strikethrough)) {\n switch (characterFormat.strikethrough) {\n case 'SingleStrike':\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (characterFormat.fontColor === 'empty' || characterFormat.fontColor === '#00000000') {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat.fontColor));\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSize * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSizeBidi)) {\n writer.writeStartElement(undefined, 'szCs', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSizeBidi * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat.highlightColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.revisionIds) && characterFormat.revisionIds.length > 0) {\n this.serializeRevisionStart(writer, characterFormat, undefined);\n this.serializeRevisionEnd(writer, characterFormat, undefined);\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat.underline));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.baselineAlignment)) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat.baselineAlignment) {\n case 'Subscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n case 'Superscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'DotDotDashHeavy':\n return 'dashDotDotHeavy';\n case 'DotDashHeavy':\n return 'dashDotHeavy';\n case 'DashHeavy':\n return 'dashedHeavy';\n case 'DashLong':\n return 'dashLong';\n case 'DashLongHeavy':\n return 'dashLongHeavy';\n case 'DotDash':\n return 'dotDash';\n case 'DotDotDash':\n return 'dotDotDash';\n case 'Dotted':\n return 'dotted';\n case 'DottedHeavy':\n return 'dottedHeavy';\n case 'Double':\n return 'double';\n case 'Single':\n return 'single';\n case 'Thick':\n return 'thick';\n case 'Wavy':\n return 'wave';\n case 'WavyDouble':\n return 'wavyDouble';\n case 'WavyHeavy':\n return 'wavyHeavy';\n case 'Words':\n return 'words';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document.lists.length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document.abstractLists);\n this.serializeListInstances(writer, this.document.lists);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList.abstractListId.toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList.levels.length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList.levels[ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list.listId + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list.abstractListId.toString());\n writer.writeEndElement();\n for (var lvl = 0, cnt = list.levelOverrides.length; lvl < cnt; lvl++) {\n this.serializeLevelOverrides(writer, list.levelOverrides[lvl], lvl);\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel.listLevelPattern));\n writer.writeEndElement();\n // if (listLevel.restartLevel > 0) {\n // writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n // writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n // writer.writeEndElement();\n // }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel.paragraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel.characterFormat);\n writer.writeEndElement();\n };\n //Serialize the levelOverrides\n WordExport.prototype.serializeLevelOverrides = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvlOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'startOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'Arabic':\n patternType = 'decimal';\n break;\n case 'UpRoman':\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n patternType = 'lowerLetter';\n break;\n // case 'Ordinal':\n // patternType = 'ordinal';\n // break;\n // case 'Number':\n // patternType = 'cardinalText';\n // break;\n // case 'OrdinalText':\n // patternType = 'ordinalText';\n // break;\n // case 'LeadingZero':\n // patternType = 'decimalZero';\n // break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n // case 'FarEast':\n // patternType = 'aiueoFullWidth';\n // break;\n // case 'Special':\n // patternType = 'russianLower';\n // break;\n // case 'None':\n // patternType = 'none';\n // break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel.numberFormat));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel.followCharacter === 'Tab') {\n fc = 'tab';\n }\n else if (listLevel.followCharacter === 'Space') {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentProtectionSettings = function (writer) {\n writer.writeStartElement('w', 'documentProtection', this.wNamespace);\n if (this.formatting) {\n writer.writeAttributeString('w', 'formatting', this.wNamespace, '1');\n }\n if (this.protectionType && this.protectionType !== 'NoProtection') {\n var editMode = void 0;\n switch (this.protectionType) {\n case 'ReadOnly':\n editMode = 'readOnly';\n break;\n case 'FormFieldsOnly':\n editMode = 'forms';\n break;\n case 'CommentsOnly':\n editMode = 'comments';\n break;\n case 'RevisionsOnly':\n editMode = 'trackedChanges';\n break;\n }\n writer.writeAttributeString('w', 'edit', this.wNamespace, editMode);\n }\n writer.writeAttributeString('w', 'cryptProviderType', this.wNamespace, 'rsaAES');\n writer.writeAttributeString('w', 'cryptAlgorithmClass', this.wNamespace, 'hash');\n writer.writeAttributeString('w', 'cryptAlgorithmType', this.wNamespace, 'typeAny');\n writer.writeAttributeString('w', 'cryptAlgorithmSid', this.wNamespace, '14');\n writer.writeAttributeString('w', 'cryptSpinCount', this.wNamespace, '100000');\n if (this.enforcement) {\n writer.writeAttributeString('w', 'enforcement', this.wNamespace, '1');\n }\n if (this.hashValue) {\n writer.writeAttributeString('w', 'hash', this.wNamespace, this.hashValue);\n }\n if (this.saltValue) {\n writer.writeAttributeString('w', 'salt', this.wNamespace, this.saltValue);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n this.serializeDocumentProtectionSettings(writer);\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n if (this.trackChanges) {\n writer.writeStartElement(undefined, 'trackRevisions', this.wNamespace);\n writer.writeEndElement();\n }\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n if (!this.formFieldShading) {\n writer.writeStartElement(undefined, 'doNotShadeFormData', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n if (this.dontUseHtmlParagraphAutoSpacing) {\n this.serializeBoolProperty(writer, 'doNotUseHTMLParagraphAutoSpacing', this.dontUseHtmlParagraphAutoSpacing);\n }\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n var compatValue = HelperMethods.getCompatibilityModeValue(this.compatibilityMode);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, compatValue);\n writer.writeEndElement();\n writer.writeEndElement();\n if (this.document.footnotes) {\n //this.serializeFootNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n if (this.document.endnotes) {\n // this.serializeEndNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header.blocks, true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) { // || hasHFHyperlinks ||hasHFAlternateChunks\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer, false);\n if (this.headerFooterSvgImages.containsKey(hfId)) {\n this.serializeSvgImageRelation(this.headerFooterSvgImages.get(hfId), writer);\n }\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer.blocks, true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n if (this.document.endnotes) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.endnoteRelType, 'endnotes.xml');\n }\n if (this.document.footnotes) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.footnoteRelType, 'footnotes.xml');\n }\n if (this.mComments.length > 0) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsRelType, 'comments.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsExRelType, 'commentsExtended.xml');\n }\n }\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n if (this.document.lists.length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n //this.serializeFootnoteEndnoteRelations(writer);\n this.serializeHeaderFooterRelations(writer);\n //this.serializeFootnoteXMLMapping(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer, false);\n this.serializeSvgImageRelation(this.svgImages, writer);\n // serialize custom xml\n this.serializeCustomXMLMapping(this.mCustomXML, writer);\n // serialize chart relations\n this.serializeChartDocumentRelations(this.documentCharts, writer);\n this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // serialize chart relations\n WordExport.prototype.serializeChartDocumentRelations = function (charts, writer) {\n if (charts.length > 0) {\n var keys = charts.keys;\n for (var i = 1; i <= keys.length; i++) {\n this.serializeRelationShip(writer, keys[i - 1], this.chartRelType, 'charts/chart' + i + '.xml');\n }\n }\n };\n WordExport.prototype.serializeChartRelations = function () {\n var writer = new XmlWriter();\n this.resetChartRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var chartColorPath = 'colors' + this.chartCount + '.xml';\n var chartRelationPath = this.chartPath + '/_rels/chart' + this.chartCount + '.xml.rels';\n var chartExcelPath = '../embeddings/Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.packageRelType, chartExcelPath);\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.chartColorStyleRelType, chartColorPath);\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer, isSvg) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n base64ImageString = !isSvg ? mImage.imageString : mImage.metaFileImageString;\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var imageInfo = HelperMethods.formatClippedString(base64ImageString);\n var extension = imageInfo.extension;\n var formatClippedString = imageInfo.formatClippedString;\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = new Blob([this.encodedString(formatClippedString)]);\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n WordExport.prototype.serializeSvgImageRelation = function (svgImages, writer) {\n this.serializeImagesRelations(svgImages, writer, true);\n };\n /**\n * @private\n */\n WordExport.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.getEFNextRelationShipID = function () {\n return (++this.efRelationShipId).toString();\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n this.serializeOverrideContentType(writer, this.commentsPath, this.commentsContentType);\n //comments.xml\n this.serializeOverrideContentType(writer, this.commentsExtendedPath, this.commentsExContentType);\n //charts.xml\n if (this.chartCount > 0) {\n var count = 1;\n this.serializeDefaultContentType(writer, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n while (count <= this.chartCount) {\n this.serializeOverrideContentType(writer, 'word/charts/chart' + count + '.xml', this.chartsContentType);\n this.serializeOverrideContentType(writer, 'word/charts/colors' + count + '.xml', this.chartColorStyleContentType);\n count++;\n }\n }\n // Custom XML mapping\n if (this.customXMLProps.length > 0) {\n for (var i = 0; i < this.customXMLProps.length; i++) {\n this.serializeOverrideContentType(writer, this.customXMLProps[i], this.customXmlContentType);\n }\n }\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n this.SerializeEFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n WordExport.prototype.SerializeEFContentTypes = function (writer) {\n this.serializeEFContentType(writer);\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeEFContentType = function (writer) {\n var contentType;\n var partName;\n partName = this.endnotesPath;\n contentType = this.endnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n partName = this.footnotesPath;\n contentType = this.footnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.resetExcelRelationShipId = function () {\n this.eRelationShipId = 0;\n };\n WordExport.prototype.resetChartRelationShipId = function () {\n this.cRelationShipId = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","/* eslint-disable */\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n /**\n * @private\n */\n this.pageContent = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @param {string} fileName - Specified file name.\n * @return {void}\n */\n TextExport.prototype.save = function (documentHelper, fileName) {\n this.serialize(documentHelper);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * Save text document as Blob.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @return {Promise} - Returns promise object.\n */\n TextExport.prototype.saveAsBlob = function (documentHelper) {\n this.serialize(documentHelper);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (documentHelper) {\n var document = documentHelper.owner.sfdtExportModule.write();\n this.setDocument(document);\n };\n /**\n * @private\n * @param document\n */\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n /**\n * @private\n * @param streamWriter - Stream writer instance.\n * @return {void}\n */\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks, false);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body, isHeaderFooter) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara, isHeaderFooter);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara, isHeaderFooter) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isHeaderFooter || paragraph.inlines.length > 0)\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks, false);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n this.writeHeaderFooter(streamWriter, section.headersFooters.header);\n this.writeHeaderFooter(streamWriter, section.headersFooters.footer);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenFooter);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageFooter);\n };\n TextExport.prototype.writeHeaderFooter = function (streamWriter, headerFooter) {\n if (headerFooter && headerFooter.blocks) {\n this.writeBody(streamWriter, headerFooter.blocks, true);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n if (!isNullOrUndefined(writer)) {\n writer.writeLine('');\n }\n else {\n this.pageContent = this.pageContent + ' ';\n }\n };\n TextExport.prototype.writeText = function (writer, text) {\n if (!isNullOrUndefined(writer)) {\n writer.write(text);\n }\n else {\n this.pageContent += text;\n }\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WCharacterFormat } from '../format/index';\nimport { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableRowWidget, TableCellWidget, ImageElementBox, ContentControl, ListTextElementBox, BookmarkElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, ShapeElementBox, FootnoteElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n function SfdtExport(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.startLine = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.blockContent = false;\n this.startContent = false;\n this.multipleLineContent = false;\n this.nestedContent = false;\n this.editRangeId = -1;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.nestedBlockContent = false;\n this.nestedBlockEnabled = false;\n this.blocks = [];\n this.contentInline = [];\n this.isContentControl = false;\n this.isBlockClosed = true;\n /**\n * @private\n */\n this.isExport = true;\n /**\n * @private\n */\n this.isPartialExport = false;\n this.checkboxOrDropdown = false;\n /**\n * @private\n */\n this.copyWithTrackChange = false;\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(SfdtExport.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtExport.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.startLine = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.document = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.startBlock = undefined;\n this.endBlock = undefined;\n this.isPartialExport = false;\n };\n /**\n * Serialize the data as Syncfusion document text.\n *\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return JSON.stringify(this.write());\n };\n /**\n * @private\n * @param documentHelper - Specifies document helper instance.\n * @returns {Promise}\n */\n SfdtExport.prototype.saveAsBlob = function (documentHelper) {\n var sfdt = new Blob([this.serialize()], { type: 'text/plain' });\n return new Promise(function (resolve, reject) {\n resolve(sfdt);\n });\n };\n SfdtExport.prototype.updateEditRangeId = function () {\n var index = -1;\n for (var i = 0; i < this.documentHelper.editRanges.keys.length; i++) {\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys[i].length; j++) {\n var editRangeStart = this.documentHelper.editRanges.get(keys[i]);\n for (var z = 0; z < editRangeStart.length; z++) {\n index++;\n editRangeStart[z].editRangeId = index;\n editRangeStart[z].editRangeEnd.editRangeId = index;\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable */\n SfdtExport.prototype.write = function (line, startOffset, endLine, endOffset, writeInlineStyles, isExport) {\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n this.Initialize();\n this.updateEditRangeId();\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n this.isExport = false;\n if (!isNullOrUndefined(isExport)) {\n this.isExport = isExport;\n }\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n if (this.isPartialExport) {\n this.startBlock = this.getParentBlock(startPara);\n this.endBlock = this.getParentBlock(endPara);\n }\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document.sections.push(section);\n if (startCell === endCell || isNullOrUndefined(endCell)) {\n this.startLine = line;\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n if (this.endCell.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && startCell.ownerTable.associatedCell.ownerTable === this.endCell.ownerTable &&\n (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n startCell = startCell.ownerTable.associatedCell;\n }\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n var nextBlock = void 0;\n if ((startCell === endCell && !this.isPartialExport) || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section.blocks.push(paragraph);\n var lastBlock = line.paragraph;\n nextBlock = this.writeParagraph(line.paragraph, paragraph, section.blocks, line.indexInOwner, startOffset);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section.blocks);\n if (this.isPartialExport && isNullOrUndefined(nextBlock)) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n }\n // Todo:continue in next section\n }\n else {\n // Specially handled for nested table cases\n // selection start inside table and end in paragraph outside table\n if (isNullOrUndefined(endCell) && startCell.ownerTable.associatedCell) {\n var startTable = startCell.getContainerTable();\n var lastRow = startTable.childWidgets[startTable.childWidgets.length - 1];\n var endCell_1 = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n if (endCell_1.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n while (startCell.ownerTable !== endCell_1.ownerTable) {\n startCell = startCell.ownerTable.associatedCell;\n }\n }\n this.endColumnIndex = endCell_1.columnIndex + endCell_1.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n var table = this.createTable(startCell.ownerTable);\n section.blocks.push(table);\n var lastBlock = startCell.ownerTable;\n nextBlock = this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section.blocks);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section.blocks);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document.sections[this.document.sections.length - 1];\n }\n }\n }\n }\n else {\n this.isExport = true;\n if (this.documentHelper.pages.length > 0) {\n var page = this.documentHelper.pages[0];\n this.writePage(page);\n }\n }\n this.writeStyles(this.documentHelper);\n this.writeLists(this.documentHelper);\n this.writeComments(this.documentHelper);\n this.writeRevisions(this.documentHelper);\n this.writeCustomXml(this.documentHelper);\n this.footnotes(this.documentHelper);\n this.endnotes(this.documentHelper);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.getNextBlock = function (nextBlock, lastBlock) {\n if (isNullOrUndefined(nextBlock) && this.isPartialExport && this.endBlock\n && !this.endBlock.equals(lastBlock)) {\n nextBlock = lastBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (nextBlock && lastBlock.bodyWidget.index !== nextBlock.bodyWidget.index) {\n var section = this.createSection(nextBlock.bodyWidget);\n this.document.sections.push(section);\n }\n else {\n nextBlock = undefined;\n }\n }\n return nextBlock;\n };\n /**\n * @private\n */\n SfdtExport.prototype.Initialize = function () {\n this.lists = [];\n this.document = {};\n this.document.sections = [];\n this.document.characterFormat = this.writeCharacterFormat(this.documentHelper.characterFormat);\n this.document.paragraphFormat = this.writeParagraphFormat(this.documentHelper.paragraphFormat);\n this.document.defaultTabWidth = this.documentHelper.defaultTabWidth;\n this.document.trackChanges = this.owner.enableTrackChanges;\n this.document.enforcement = this.documentHelper.isDocumentProtected;\n this.document.hashValue = this.documentHelper.hashValue;\n this.document.saltValue = this.documentHelper.saltValue;\n this.document.formatting = this.documentHelper.restrictFormatting;\n this.document.protectionType = this.documentHelper.protectionType;\n this.document.dontUseHTMLParagraphAutoSpacing = this.documentHelper.dontUseHtmlParagraphAutoSpacing;\n this.document.formFieldShading = this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading;\n this.document.compatibilityMode = this.documentHelper.compatibilityMode;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writePage = function (page) {\n if (page.bodyWidgets.length > 0) {\n var nextBlock = page.bodyWidgets[0];\n do {\n nextBlock = this.writeBodyWidget(nextBlock, 0);\n } while (!isNullOrUndefined(nextBlock));\n }\n return this.document;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return undefined;\n }\n var section = this.createSection(bodyWidget);\n this.document.sections.push(section);\n this.writeHeaderFooters(this.documentHelper.headersFooters[bodyWidget.index], section);\n var firstBlock = bodyWidget.childWidgets[index];\n do {\n firstBlock = this.writeBlock(firstBlock, 0, section.blocks);\n } while (firstBlock);\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n if (isNullOrUndefined(next) && !isNullOrUndefined(bodyWidget.page.nextPage) && !isNullOrUndefined(bodyWidget.page.nextPage)) {\n next = bodyWidget.page.nextPage.bodyWidgets[0];\n }\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n return next;\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n section.headersFooters.header = this.writeHeaderFooter(hfs[0]);\n section.headersFooters.footer = this.writeHeaderFooter(hfs[1]);\n section.headersFooters.evenHeader = this.writeHeaderFooter(hfs[2]);\n section.headersFooters.evenFooter = this.writeHeaderFooter(hfs[3]);\n section.headersFooters.firstPageHeader = this.writeHeaderFooter(hfs[4]);\n section.headersFooters.firstPageFooter = this.writeHeaderFooter(hfs[5]);\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget) || widget.isEmpty) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter.blocks = [];\n var firstBlock = widget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, headerFooter.blocks);\n } while (firstBlock);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section.sectionFormat = {};\n section.sectionFormat.pageWidth = bodyWidget.sectionFormat.pageWidth;\n section.sectionFormat.pageHeight = bodyWidget.sectionFormat.pageHeight;\n section.sectionFormat.leftMargin = bodyWidget.sectionFormat.leftMargin;\n section.sectionFormat.rightMargin = bodyWidget.sectionFormat.rightMargin;\n section.sectionFormat.topMargin = bodyWidget.sectionFormat.topMargin;\n section.sectionFormat.bottomMargin = bodyWidget.sectionFormat.bottomMargin;\n section.sectionFormat.differentFirstPage = bodyWidget.sectionFormat.differentFirstPage;\n section.sectionFormat.differentOddAndEvenPages = bodyWidget.sectionFormat.differentOddAndEvenPages;\n section.sectionFormat.headerDistance = bodyWidget.sectionFormat.headerDistance;\n section.sectionFormat.footerDistance = bodyWidget.sectionFormat.footerDistance;\n section.sectionFormat.bidi = bodyWidget.sectionFormat.bidi;\n if (bodyWidget.sectionFormat.restartPageNumbering) {\n section.sectionFormat.restartPageNumbering = bodyWidget.sectionFormat.restartPageNumbering;\n section.sectionFormat.pageStartingNumber = bodyWidget.sectionFormat.pageStartingNumber;\n }\n if (!isNullOrUndefined(bodyWidget.page.endnoteWidget || bodyWidget.page.footnoteWidget)) {\n section.sectionFormat.endnoteNumberFormat = bodyWidget.sectionFormat.endnoteNumberFormat;\n section.sectionFormat.footNoteNumberFormat = bodyWidget.sectionFormat.footNoteNumberFormat;\n section.sectionFormat.restartIndexForFootnotes = bodyWidget.sectionFormat.restartIndexForFootnotes;\n section.sectionFormat.restartIndexForEndnotes = bodyWidget.sectionFormat.restartIndexForEndnotes;\n section.sectionFormat.initialFootNoteNumber = bodyWidget.sectionFormat.initialFootNoteNumber;\n section.sectionFormat.initialEndNoteNumber = bodyWidget.sectionFormat.initialEndNoteNumber;\n }\n if (!isNullOrUndefined(bodyWidget.sectionFormat.pageNumberStyle)) {\n section.sectionFormat.pageNumberStyle = bodyWidget.sectionFormat.pageNumberStyle;\n }\n section.blocks = [];\n section.headersFooters = {};\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return undefined;\n }\n if (widget instanceof ParagraphWidget) {\n if (widget.hasOwnProperty('contentControlProperties')) {\n var block = this.blockContentControl(widget);\n this.blockContent = false;\n if (!isNullOrUndefined(block) && (this.isBlockClosed || !this.nestedBlockContent)) {\n this.nestedBlockEnabled = false;\n blocks.push(block);\n this.blocks = [];\n }\n return this.nextBlock;\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n return this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var tableWidget = widget;\n if (tableWidget.hasOwnProperty('contentControlProperties') && tableWidget.contentControlProperties.type !== 'BuildingBlockGallery') {\n var block = this.tableContentControl(tableWidget);\n if (!isNullOrUndefined(block) && this.isBlockClosed) {\n blocks.push(block);\n }\n return this.nextBlock;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n return this.writeTable(tableWidget, table, 0, blocks);\n }\n };\n SfdtExport.prototype.writeParagraphs = function (widget) {\n var blocks = this.blocks;\n var child = widget.childWidgets[0];\n var firstElement = child.children[0];\n var secondElement = child.children[1];\n if (firstElement instanceof ListTextElementBox || secondElement instanceof ListTextElementBox) {\n firstElement = child.children[2];\n secondElement = child.children[3];\n }\n if (this.nestedBlockEnabled) {\n blocks = [];\n }\n if ((firstElement instanceof ContentControl && secondElement instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent)) {\n var nestedBlocks = false;\n if (secondElement instanceof ContentControl) {\n if (secondElement.contentControlWidgetType === 'Block') {\n nestedBlocks = true;\n }\n }\n if ((nestedBlocks || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent && firstElement.type === 0 && secondElement instanceof ContentControl && firstElement.contentControlWidgetType === 'Block'))) {\n this.nestedBlockContent = true;\n this.nestedBlockEnabled = true;\n var block = this.blockContentControl(widget);\n if (!isNullOrUndefined(block)) {\n this.blocks.push(block);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n if (!this.nestedBlockContent && this.nestedBlockEnabled) {\n this.nestedBlockEnabled = false;\n }\n return blocks;\n };\n SfdtExport.prototype.contentControlProperty = function (contentControlPropertie) {\n var contentControlProperties = {};\n var contentControlListItems = [];\n contentControlProperties.lockContentControl = contentControlPropertie.lockContentControl;\n contentControlProperties.lockContents = contentControlPropertie.lockContents;\n contentControlProperties.tag = contentControlPropertie.tag;\n contentControlProperties.color = contentControlPropertie.color;\n contentControlProperties.title = contentControlPropertie.title;\n if (!isNullOrUndefined(contentControlPropertie.appearance)) {\n contentControlProperties.appearance = contentControlPropertie.appearance;\n }\n contentControlProperties.type = contentControlPropertie.type;\n contentControlProperties.hasPlaceHolderText = contentControlPropertie.hasPlaceHolderText;\n contentControlProperties.multiline = contentControlPropertie.multiline;\n contentControlProperties.isTemporary = contentControlPropertie.isTemporary;\n if (!isNullOrUndefined(contentControlPropertie.isChecked)) {\n contentControlProperties.isChecked = contentControlPropertie.isChecked;\n }\n if (!isNullOrUndefined(contentControlPropertie.uncheckedState)) {\n contentControlProperties.uncheckedState = this.tounCheckedState(contentControlPropertie.uncheckedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.checkedState)) {\n contentControlProperties.checkedState = this.toCheckedState(contentControlPropertie.checkedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.dateCalendarType)) {\n contentControlProperties.dateCalendarType = contentControlPropertie.dateCalendarType;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateStorageFormat)) {\n contentControlProperties.dateStorageFormat = contentControlPropertie.dateStorageFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayLocale)) {\n contentControlProperties.dateDisplayLocale = contentControlPropertie.dateDisplayLocale;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayFormat)) {\n contentControlProperties.dateDisplayFormat = contentControlPropertie.dateDisplayFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.xmlMapping)) {\n contentControlProperties.xmlMapping = contentControlPropertie.xmlMapping;\n }\n if (!isNullOrUndefined(contentControlPropertie.characterFormat)) {\n contentControlProperties.characterFormat = this.writeCharacterFormat(contentControlPropertie.characterFormat);\n }\n contentControlProperties.contentControlListItems = contentControlPropertie.contentControlListItems;\n return contentControlProperties;\n };\n SfdtExport.prototype.tounCheckedState = function (state) {\n var unCheckedState = {};\n unCheckedState.font = state.font;\n unCheckedState.value = state.value;\n return unCheckedState;\n };\n SfdtExport.prototype.toCheckedState = function (state) {\n var checkedState = {};\n checkedState.font = state.font;\n checkedState.value = state.value;\n return checkedState;\n };\n SfdtExport.prototype.blockContentControl = function (widget) {\n var block = {};\n if (widget.childWidgets.length === 0) {\n this.nextBlock = widget.nextWidget;\n return undefined;\n }\n block.blocks = this.writeParagraphs(widget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (widget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n this.nestedBlockContent = true;\n return this.blocks = block.blocks;\n }\n else {\n this.isBlockClosed = true;\n }\n }\n if (!isNullOrUndefined(block.blocks)) {\n var child = widget.childWidgets[0];\n var firstChild = child.children[0];\n var secondChild = child.children[1];\n if (firstChild instanceof ListTextElementBox || secondChild instanceof ListTextElementBox) {\n firstChild = child.children[2];\n secondChild = child.children[3];\n }\n if ((firstChild instanceof ContentControl && secondChild instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstChild instanceof ContentControl && !this.nestedBlockContent)) {\n if (!(secondChild instanceof ContentControl)) {\n block.contentControlProperties = this.contentControlProperty(firstChild.contentControlProperties);\n return block;\n }\n else if (secondChild.contentControlWidgetType === 'Block') {\n block.contentControlProperties = this.contentControlProperty(secondChild.contentControlProperties);\n }\n else {\n block.contentControlProperties = this.contentControlProperty(widget.contentControlProperties);\n }\n }\n else {\n block.contentControlProperties = this.contentControlProperty(widget.contentControlProperties);\n }\n return block;\n }\n };\n SfdtExport.prototype.tableContentControl = function (tableWidget) {\n var block = {};\n block.blocks = this.tableContentControls(tableWidget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (tableWidget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n return this.blocks = block.blocks;\n }\n else {\n this.isBlockClosed = true;\n }\n }\n block.contentControlProperties = this.contentControlProperty(tableWidget.contentControlProperties);\n return block;\n };\n SfdtExport.prototype.tableContentControls = function (tableWidget) {\n var blocks = [];\n if (!this.isBlockClosed) {\n blocks = this.blocks;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n this.nextBlock = this.writeTable(tableWidget, table, 0, blocks);\n return blocks;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph.inlines)) {\n return undefined;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n next = paragraphWidget.nextRenderedWidget;\n if (isNullOrUndefined(next) && paragraphWidget.containerWidget instanceof BodyWidget &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage) &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage.bodyWidgets)) {\n next = paragraphWidget.containerWidget.page.nextPage.bodyWidgets[0].childWidgets[0];\n }\n return (next instanceof BlockWidget && paragraphWidget.containerWidget.index === next.containerWidget.index) ? next : undefined;\n };\n SfdtExport.prototype.writeInlines = function (paragraph, line, inlines) {\n this.contentInline = [];\n var lineWidget = line;\n var isformField = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (this.isExport && this.checkboxOrDropdown) {\n if (isformField && element instanceof TextElementBox) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 2) {\n isformField = true;\n }\n }\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (element instanceof FootnoteElementBox) {\n inlines.push(this.writeInlinesFootNote(paragraph, element, line, inlines));\n continue;\n }\n if (element instanceof ContentControl || this.startContent || this.blockContent) {\n this.writeInlinesContentControl(element, line, inlines, i);\n continue;\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n if (this.isExport && element instanceof FieldElementBox && element.fieldType === 1) {\n isformField = false;\n this.checkboxOrDropdown = false;\n }\n }\n };\n SfdtExport.prototype.inlineContentControl = function (element, nextElement, inlines) {\n var inline = {};\n var nestedContentInline = [];\n if (!isNullOrUndefined(inlines)) {\n if (this.nestedContent) {\n inlines = inlines[inlines.length - 1].inlines;\n inline = this.inlineContentControls(element, inlines[inlines.length - 1].inlines);\n var nestedContentinline = this.nestedContentProperty(nextElement, inlines[inlines.length - 1]);\n if (!isNullOrUndefined(nestedContentinline)) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n this.inlineContentControls(element, inlines[inlines.length - 1].inlines);\n }\n }\n else {\n if (this.nestedContent) {\n inline.inlines = this.inlineContentControls(element, undefined, nestedContentInline);\n var nestedContentinline = this.nestedContentProperty(nextElement, inline);\n if (!isNullOrUndefined(nestedContentinline) || this.multipleLineContent) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n inline.inlines = this.inlineContentControls(element, this.contentInline);\n }\n }\n if (nextElement instanceof ContentControl && nextElement.type === 1 && !this.nestedContent) {\n if (this.multipleLineContent) {\n inlines[inlines.length - 1].contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n this.multipleLineContent = false;\n return;\n }\n else {\n inline.contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n }\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.nestedContentProperty = function (nextElement, inline, inlines) {\n if (!isNullOrUndefined(nextElement)) {\n if (nextElement.type === 1) {\n inline.contentControlProperties = this.contentControlProperty(nextElement.contentControlProperties);\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.inlineContentControls = function (element, contentInline, nestedContentInline) {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(nestedContentInline)) {\n nestedContentInline.push(inline);\n return nestedContentInline;\n }\n contentInline.push(inline);\n return contentInline;\n };\n /* eslint-disable */\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n if (element.removedIds.length > 0) {\n for (var i = 0; i < element.removedIds.length; i++) {\n element.revisions[i] = this.documentHelper.revisionsInternal.get(element.removedIds[i]);\n }\n }\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n if (element instanceof FieldElementBox) {\n inline.fieldType = element.fieldType;\n if (element.fieldType === 0) {\n inline.hasFieldEnd = true;\n if (element.formFieldData) {\n inline.formFieldData = {};\n inline.formFieldData.name = element.formFieldData.name;\n inline.formFieldData.enabled = element.formFieldData.enabled;\n inline.formFieldData.helpText = element.formFieldData.helpText;\n inline.formFieldData.statusText = element.formFieldData.statusText;\n if (element.formFieldData instanceof TextFormField) {\n inline.formFieldData.textInput = {};\n inline.formFieldData.textInput.type = element.formFieldData.type;\n inline.formFieldData.textInput.maxLength = element.formFieldData.maxLength;\n inline.formFieldData.textInput.defaultValue = element.formFieldData.defaultValue;\n inline.formFieldData.textInput.format = element.formFieldData.format;\n }\n else if (element.formFieldData instanceof CheckBoxFormField) {\n inline.formFieldData.checkBox = {};\n this.checkboxOrDropdown = true;\n inline.formFieldData.checkBox.sizeType = element.formFieldData.sizeType;\n inline.formFieldData.checkBox.size = element.formFieldData.size;\n inline.formFieldData.checkBox.defaultValue = element.formFieldData.defaultValue;\n inline.formFieldData.checkBox.checked = element.formFieldData.checked;\n }\n else {\n inline.formFieldData.dropDownList = {};\n this.checkboxOrDropdown = true;\n inline.formFieldData.dropDownList.dropDownItems = element.formFieldData.dropdownItems;\n inline.formFieldData.dropDownList.selectedIndex = element.formFieldData.selectedIndex;\n }\n }\n }\n if (element.fieldCodeType && element.fieldCodeType !== '') {\n inline.fieldCodeType = element.fieldCodeType;\n }\n }\n else if (element instanceof ChartElementBox) {\n this.writeChart(element, inline);\n }\n else if (element instanceof ImageElementBox) {\n inline.imageString = element.imageString;\n inline.metaFileImageString = element.metaFileImageString;\n inline.isMetaFile = element.isMetaFile;\n inline.isCompressed = element.isCompressed;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.iscrop = element.isCrop;\n if (element.isCrop) {\n inline.bottom = element.bottom;\n inline.right = element.right;\n inline.left = element.left;\n inline.top = element.top;\n inline.getimagewidth = element.cropWidthScale;\n inline.getimageheight = element.cropHeightScale;\n }\n inline.name = element.name;\n inline.alternativeText = element.alternativeText;\n inline.title = element.title;\n inline.visible = element.visible;\n inline.widthScale = element.widthScale;\n inline.heightScale = element.heightScale;\n inline.verticalPosition = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline.verticalOrigin = element.verticalOrigin;\n inline.verticalAlignment = element.verticalAlignment;\n inline.horizontalPosition = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline.horizontalOrigin = element.horizontalOrigin;\n inline.horizontalAlignment = element.horizontalAlignment;\n inline.allowOverlap = element.allowOverlap;\n inline.textWrappingStyle = element.textWrappingStyle;\n inline.textWrappingType = element.textWrappingType;\n inline.layoutInCell = element.layoutInCell;\n inline.zOrderPosition = element.zOrderPosition;\n }\n else if (element instanceof BookmarkElementBox) {\n inline.bookmarkType = element.bookmarkType;\n inline.name = element.name;\n }\n else if (element instanceof TextElementBox) {\n // replacing the no break hyphen character by '-'\n if (element.text.indexOf(String.fromCharCode(30)) !== -1) {\n inline.text = element.text.replace(/\\u001e/g, '-');\n }\n else if (element.text.indexOf(String.fromCharCode(31)) !== -1) {\n inline.text = element.text.replace(/\\u001f/g, '');\n }\n else if (element.revisions.length !== 0) {\n if (!this.isExport && this.owner.enableTrackChanges && !this.isPartialExport) {\n this.copyWithTrackChange = true;\n for (var x = 0; x < element.revisions.length; x++) {\n var revision = element.revisions[x];\n if (this.selectedRevisionId.indexOf(revision.revisionID) === -1) {\n this.selectedRevisionId.push(revision.revisionID);\n }\n if (element.revisions[x].revisionType === 'Deletion') {\n element.revisions.pop();\n }\n else if (element.revisions[x].revisionType === 'Insertion') {\n element.revisions.pop();\n inline.text = element.text;\n }\n else {\n inline.text = element.text;\n }\n }\n }\n else {\n inline.text = element.text;\n }\n }\n else {\n inline.text = element.text;\n }\n }\n else if (element instanceof EditRangeStartElementBox) {\n inline.user = element.user;\n inline.group = element.group;\n inline.columnFirst = element.columnFirst;\n inline.columnLast = element.columnLast;\n inline.editRangeId = element.editRangeId.toString();\n }\n else if (element instanceof EditRangeEndElementBox) {\n inline.editableRangeStart = {\n 'user': element.editRangeStart.user,\n 'group': element.editRangeStart.group,\n 'columnFirst': element.editRangeStart.columnFirst,\n 'columnLast': element.editRangeStart.columnLast\n };\n inline.editRangeId = element.editRangeId.toString();\n }\n else if (element instanceof CommentCharacterElementBox) {\n if (!this.isExport && element.commentType === 0) {\n this.selectedCommentsId.push(element.commentId);\n }\n inline.commentCharacterType = element.commentType;\n inline.commentId = element.commentId;\n }\n else if (element instanceof ShapeElementBox) {\n this.writeShape(element, inline);\n }\n else {\n inline = undefined;\n }\n if (element.revisions.length > 0) {\n inline.revisionIds = [];\n for (var x = 0; x < element.revisions.length; x++) {\n //revisionIdes[x] = element.revisions[x];\n if (this.selectedRevisionId.indexOf(element.revisions[x].revisionID) === -1) {\n this.selectedRevisionId.push(element.revisions[x].revisionID);\n }\n inline.revisionIds.push(element.revisions[x].revisionID);\n //this.document.revisionIdes.push(inline.revisionIds)\n }\n }\n /*if(element.removedIds.length > 0){\n inline.revisionIds = [];\n for(let x:number = 0;x < element.removedIds.length; x++){\n inline.revisionIds.push(element.removedIds);\n }\n }*/\n return inline;\n };\n SfdtExport.prototype.writeShape = function (element, inline) {\n inline.shapeId = element.shapeId;\n inline.name = element.name;\n inline.alternativeText = element.alternativeText;\n inline.title = element.title;\n inline.visible = element.visible;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.widthScale = element.widthScale;\n inline.heightScale = element.heightScale;\n inline.verticalPosition = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline.verticalOrigin = element.verticalOrigin;\n inline.verticalAlignment = element.verticalAlignment;\n inline.verticalRelativePercent = element.verticalRelativePercent;\n inline.horizontalPosition = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline.horizontalOrigin = element.horizontalOrigin;\n inline.horizontalAlignment = element.horizontalAlignment;\n inline.horizontalRelativePercent = element.horizontalRelativePercent;\n inline.zOrderPosition = element.zOrderPosition;\n inline.allowOverlap = element.allowOverlap;\n inline.textWrappingStyle = element.textWrappingStyle;\n inline.textWrappingType = element.textWrappingType;\n inline.distanceBottom = HelperMethods.convertPixelToPoint(element.distanceBottom);\n inline.distanceLeft = HelperMethods.convertPixelToPoint(element.distanceLeft);\n inline.distanceRight = HelperMethods.convertPixelToPoint(element.distanceRight);\n inline.distanceTop = HelperMethods.convertPixelToPoint(element.distanceTop);\n inline.layoutInCell = element.layoutInCell;\n inline.lockAnchor = element.lockAnchor;\n inline.autoShapeType = element.autoShapeType;\n if (element.fillFormat) {\n inline.fillFormat = {};\n inline.fillFormat.color = element.fillFormat.color;\n inline.fillFormat.fill = element.fillFormat.fill;\n }\n if (element.lineFormat) {\n inline.lineFormat = {};\n inline.lineFormat.lineFormatType = element.lineFormat.lineFormatType;\n inline.lineFormat.color = element.lineFormat.color;\n inline.lineFormat.weight = element.lineFormat.weight;\n inline.lineFormat.lineStyle = element.lineFormat.dashStyle;\n inline.lineFormat.line = element.lineFormat.line;\n }\n if (element.textFrame) {\n inline.textFrame = {};\n inline.textFrame.textVerticalAlignment = element.textFrame.textVerticalAlignment;\n inline.textFrame.leftMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginLeft);\n inline.textFrame.rightMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginRight);\n inline.textFrame.topMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginTop);\n inline.textFrame.bottomMargin = HelperMethods.convertPixelToPoint(element.textFrame.marginBottom);\n inline.textFrame.blocks = [];\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var textFrameBlock = element.textFrame.childWidgets[j];\n this.writeBlock(textFrameBlock, 0, inline.textFrame.blocks);\n }\n }\n };\n SfdtExport.prototype.writeChart = function (element, inline) {\n inline.chartLegend = {};\n inline.chartTitleArea = {};\n inline.chartArea = {};\n inline.plotArea = {};\n inline.chartCategory = [];\n inline.chartSeries = [];\n inline.chartPrimaryCategoryAxis = {};\n inline.chartPrimaryValueAxis = {};\n this.writeChartTitleArea(element.chartTitleArea, inline.chartTitleArea);\n this.writeChartArea(element.chartArea, inline.chartArea);\n this.writeChartArea(element.chartPlotArea, inline.plotArea);\n this.writeChartCategory(element, inline.chartCategory);\n this.createChartSeries(element, inline.chartSeries);\n this.writeChartLegend(element.chartLegend, inline.chartLegend);\n this.writeChartCategoryAxis(element.chartPrimaryCategoryAxis, inline.chartPrimaryCategoryAxis);\n this.writeChartCategoryAxis(element.chartPrimaryValueAxis, inline.chartPrimaryValueAxis);\n if (element.chartDataTable.showSeriesKeys !== undefined) {\n inline.chartDataTable = {};\n this.writeChartDataTable(element.chartDataTable, inline.chartDataTable);\n }\n inline.chartTitle = element.title;\n inline.chartType = element.type;\n inline.gapWidth = element.chartGapWidth;\n inline.overlap = element.chartOverlap;\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n };\n SfdtExport.prototype.writeChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea.fontName = titleArea.chartfontName;\n chartTitleArea.fontSize = titleArea.chartFontSize;\n chartTitleArea.layout = {};\n chartTitleArea.dataFormat = this.writeChartDataFormat(titleArea.dataFormat);\n this.writeChartLayout(titleArea.layout, chartTitleArea.layout);\n };\n SfdtExport.prototype.writeChartDataFormat = function (format) {\n var chartDataFormat = {};\n chartDataFormat.fill = {};\n chartDataFormat.line = {};\n if (!isNullOrUndefined(format.fill.color)) {\n if (format.fill.color.length > 6) {\n chartDataFormat.fill.foreColor = format.fill.color.substring(2);\n }\n else {\n chartDataFormat.fill.foreColor = format.fill.color;\n }\n }\n chartDataFormat.fill.rgb = format.fill.rgb;\n chartDataFormat.line.color = format.line.color;\n chartDataFormat.line.rgb = format.line.rgb;\n return chartDataFormat;\n };\n SfdtExport.prototype.writeChartLayout = function (layout, chartLayout) {\n chartLayout.layoutX = layout.chartLayoutLeft;\n chartLayout.layoutY = layout.chartLayoutTop;\n };\n SfdtExport.prototype.writeChartArea = function (area, chartArea) {\n chartArea.foreColor = area.chartForeColor;\n };\n SfdtExport.prototype.writeChartLegend = function (legend, chartLegend) {\n chartLegend.position = legend.chartLegendPostion;\n chartLegend.chartTitleArea = {};\n this.writeChartTitleArea(legend.chartTitleArea, chartLegend.chartTitleArea);\n };\n SfdtExport.prototype.writeChartCategoryAxis = function (categoryAxis, primaryCategoryAxis) {\n primaryCategoryAxis.chartTitle = categoryAxis.categoryAxisTitle;\n primaryCategoryAxis.chartTitleArea = {};\n this.writeChartTitleArea(categoryAxis.chartTitleArea, primaryCategoryAxis.chartTitleArea);\n primaryCategoryAxis.categoryType = categoryAxis.categoryAxisType;\n primaryCategoryAxis.fontSize = categoryAxis.axisFontSize;\n primaryCategoryAxis.fontName = categoryAxis.axisFontName;\n primaryCategoryAxis.numberFormat = categoryAxis.categoryNumberFormat;\n primaryCategoryAxis.maximumValue = categoryAxis.max;\n primaryCategoryAxis.minimumValue = categoryAxis.min;\n primaryCategoryAxis.majorUnit = categoryAxis.interval;\n primaryCategoryAxis.hasMajorGridLines = categoryAxis.majorGridLines;\n primaryCategoryAxis.hasMinorGridLines = categoryAxis.minorGridLines;\n primaryCategoryAxis.majorTickMark = categoryAxis.majorTick;\n primaryCategoryAxis.minorTickMark = categoryAxis.minorTick;\n primaryCategoryAxis.tickLabelPosition = categoryAxis.tickPosition;\n };\n SfdtExport.prototype.writeChartDataTable = function (chartDataTable, dataTable) {\n dataTable.showSeriesKeys = chartDataTable.showSeriesKeys;\n dataTable.hasHorzBorder = chartDataTable.hasHorzBorder;\n dataTable.hasVertBorder = chartDataTable.hasVertBorder;\n dataTable.hasBorders = chartDataTable.hasBorders;\n };\n SfdtExport.prototype.writeChartCategory = function (element, chartCategory) {\n var data = element.chartCategory;\n chartCategory.chartData = [];\n for (var i = 0; i < data.length; i++) {\n var xData = data[i];\n var categories = this.createChartCategory(xData, element.chartType);\n chartCategory.push(categories);\n }\n };\n SfdtExport.prototype.createChartCategory = function (data, type) {\n var chartCategory = {};\n chartCategory.chartData = [];\n this.writeChartData(data, chartCategory.chartData, type);\n chartCategory.categoryXName = data.categoryXName;\n return chartCategory;\n };\n SfdtExport.prototype.writeChartData = function (element, chartData, type) {\n var data = element.chartData;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var yCategory = this.createChartData(yData, type);\n chartData.push(yCategory);\n }\n };\n SfdtExport.prototype.createChartData = function (data, type) {\n var chartData = {};\n chartData.yValue = data.yValue;\n if (type === 'Bubble') {\n chartData.size = data.size;\n }\n return chartData;\n };\n SfdtExport.prototype.createChartSeries = function (element, chartSeries) {\n var data = element.chartSeries;\n var type = element.chartType;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var series = this.writeChartSeries(yData, type);\n chartSeries.push(series);\n }\n };\n SfdtExport.prototype.writeChartSeries = function (series, type) {\n var isPieType = (type === 'Pie' || type === 'Doughnut');\n var chartSeries = {};\n var errorBar = {};\n var errorBarData = series.errorBar;\n chartSeries.dataPoints = [];\n chartSeries.seriesName = series.seriesName;\n if (isPieType) {\n if (!isNullOrUndefined(series.firstSliceAngle)) {\n chartSeries.firstSliceAngle = series.firstSliceAngle;\n }\n if (type === 'Doughnut') {\n chartSeries.holeSize = series.doughnutHoleSize;\n }\n }\n if (!isNullOrUndefined(series.dataLabels.labelPosition)) {\n var dataLabel = this.writeChartDataLabels(series.dataLabels);\n chartSeries.dataLabel = dataLabel;\n }\n if (!isNullOrUndefined(series.seriesFormat.markerStyle)) {\n var seriesFormat = {};\n var format = series.seriesFormat;\n seriesFormat.markerStyle = format.markerStyle;\n seriesFormat.markerSize = format.numberValue;\n seriesFormat.markerColor = format.markerColor;\n chartSeries.seriesFormat = seriesFormat;\n }\n if (!isNullOrUndefined(errorBarData.type)) {\n errorBar.type = errorBarData.type;\n errorBar.direction = errorBarData.direction;\n errorBar.endStyle = errorBarData.endStyle;\n errorBar.numberValue = errorBarData.numberValue;\n chartSeries.errorBar = errorBarData;\n }\n if (series.trendLines.length > 0) {\n chartSeries.trendLines = [];\n for (var i = 0; i < series.trendLines.length; i++) {\n var trendLine = this.writeChartTrendLines(series.trendLines[i]);\n chartSeries.trendLines.push(trendLine);\n }\n }\n for (var i = 0; i < series.chartDataFormat.length; i++) {\n var format = this.writeChartDataFormat(series.chartDataFormat[i]);\n chartSeries.dataPoints.push(format);\n }\n return chartSeries;\n };\n SfdtExport.prototype.writeChartDataLabels = function (dataLabels) {\n var dataLabel = {};\n dataLabel.position = dataLabels.position;\n dataLabel.fontName = dataLabels.fontName;\n dataLabel.fontColor = HelperMethods.convertArgbToRgb(dataLabels.fontColor);\n dataLabel.fontSize = dataLabels.fontSize;\n dataLabel.isLegendKey = dataLabels.isLegendKey;\n dataLabel.isBubbleSize = dataLabels.isBubbleSize;\n dataLabel.isCategoryName = dataLabels.isCategoryName;\n dataLabel.isSeriesName = dataLabels.isSeriesName;\n dataLabel.isValue = dataLabels.isValue;\n dataLabel.isPercentage = dataLabels.isPercentage;\n dataLabel.isLeaderLines = dataLabels.isLeaderLines;\n return dataLabel;\n };\n SfdtExport.prototype.writeChartTrendLines = function (trendLines) {\n var trendLine = {};\n trendLine.name = trendLines.trendLineName;\n trendLine.type = trendLines.trendLineType;\n trendLine.forward = trendLines.forwardValue;\n trendLine.backward = trendLines.backwardValue;\n trendLine.intercept = trendLines.interceptValue;\n trendLine.isDisplayEquation = trendLines.isDisplayEquation;\n trendLine.isDisplayRSquared = trendLines.isDisplayRSquared;\n return trendLine;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n this.writeLine(child, (this.startLine !== this.endLine && child !== this.startLine) ? 0 : offset, inlines);\n }\n else {\n this.writeInlines(paragraph, child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n this.contentInline = [];\n var isContentStarted = false;\n var contentControl = false;\n var isEnd = line === this.endLine;\n var lineWidget = line;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var element = lineWidget.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n if (element instanceof ContentControl) {\n if (!started) {\n isContentStarted = element.type === 0 ? true : false;\n }\n contentControl = true;\n }\n if (element instanceof TextElementBox && element.hasOwnProperty('contentControlProperties') && started && !contentControl) {\n isContentStarted = true;\n }\n if (element instanceof ContentControl) {\n if (isContentStarted) {\n if (element.type === 1) {\n isContentStarted = false;\n }\n }\n if (contentControl) {\n if (element.type === 1) {\n contentControl = false;\n }\n }\n }\n ended = isEnd && length >= this.endOffset;\n if (!started || isContentStarted) {\n continue;\n }\n if (element instanceof ContentControl || this.startContent || this.blockContent) {\n if (ended) {\n this.startContent = false;\n break;\n }\n this.writeInlinesContentControl(element, line, inlines, j);\n continue;\n }\n inline = this.writeInline(element);\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty('text')) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline.text = inline.text.substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.writeInlinesFootNote = function (paragraph, element, line, inlines) {\n var inline = {};\n inline.footnoteType = element.footnoteType;\n inline.characterFormat = {};\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n inline.blocks = [];\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n this.writeBlock(element.bodyWidget.childWidgets[i], 0, inline.blocks);\n }\n inline.symbolCode = element.symbolCode;\n inline.symbolFontName = element.symbolFontName;\n inline.customMarker = element.customMarker;\n return inline;\n };\n SfdtExport.prototype.writeInlinesContentControl = function (element, lineWidget, inlines, i) {\n if (element instanceof ContentControl) {\n if (element.contentControlWidgetType === 'Block') {\n this.isBlockClosed = false;\n if (this.blockContent && element.type === 0) {\n this.nestedBlockContent = true;\n return true;\n }\n else if (this.nestedBlockContent && element.type === 1) {\n this.nestedBlockContent = false;\n return true;\n }\n this.blockContent = (element.type === 0) ? true : false;\n if (lineWidget.children[i - 1] instanceof ContentControl) {\n if (lineWidget.children[i - 1].contentControlWidgetType === 'Block') {\n this.blockContent = true;\n }\n }\n if (!this.blockContent) {\n this.isBlockClosed = true;\n }\n return true;\n }\n }\n if (element instanceof ContentControl) {\n if (this.startContent && element.type === 0) {\n this.nestedContent = true;\n return true;\n }\n else if (this.startContent && this.nestedContent) {\n var inline = {};\n inline.inlines = this.contentInline;\n if (this.contentInline.length > 0) {\n var nestedContent = this.nestedContentProperty(lineWidget.children[i + 1], inline);\n inlines.push(nestedContent);\n this.contentInline = [];\n }\n if (this.multipleLineContent) {\n inline = inlines[inlines.length - 1];\n this.nestedContentProperty(lineWidget.children[i + 1], inline);\n this.multipleLineContent = false;\n }\n this.nestedContent = false;\n return true;\n }\n this.contentType = element.contentControlWidgetType;\n this.startContent = (element.type === 0) ? true : false;\n return true;\n }\n if (this.startContent && ((this.contentType === 'Inline'))) {\n if (this.multipleLineContent) {\n this.inlineContentControl(element, lineWidget.children[i + 1], inlines);\n this.contentInline = [];\n }\n else {\n var contentinline = this.inlineContentControl(element, lineWidget.children[i + 1]);\n if (!isNullOrUndefined(contentinline)) {\n if (this.nestedContent && this.multipleLineContent) {\n var inline = {};\n inline.inlines = this.contentInline;\n inlines.push(inline);\n this.contentInline = [];\n }\n else {\n inlines.push(contentinline);\n this.contentInline = [];\n return false;\n }\n }\n }\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n var isParaSelected = false;\n if (this.documentHelper.selection && !this.documentHelper.selection.isEmpty && !this.isExport) {\n var endPos = this.documentHelper.selection.end;\n if (!this.documentHelper.selection.isForward) {\n endPos = this.documentHelper.selection.start;\n }\n var lastLine = endPos.paragraph.childWidgets[endPos.paragraph.childWidgets.length - 1];\n isParaSelected = this.documentHelper.selection.isParagraphLastLine(lastLine) && endPos.currentWidget === lastLine\n && endPos.offset === this.documentHelper.selection.getLineLength(lastLine) + 1;\n }\n else {\n isParaSelected = true;\n }\n paragraph.paragraphFormat = this.writeParagraphFormat(isParaSelected ? paragraphWidget.paragraphFormat : new WParagraphFormat(paragraphWidget));\n paragraph.characterFormat = this.writeCharacterFormat(isParaSelected ? paragraphWidget.characterFormat : new WCharacterFormat(paragraphWidget));\n paragraph.inlines = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format);\n characterFormat.boldBidi = isInline ? format.bold : format.getValue('bold');\n characterFormat.italicBidi = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSizeBidi = isInline ? format.fontSize : format.getValue('fontSize');\n characterFormat.fontFamilyBidi = isInline ? format.fontFamily : format.getValue('fontFamily');\n if (format.revisions.length > 0) {\n characterFormat.revisionIds = [];\n for (var x = 0; x < format.revisions.length; x++) {\n characterFormat.revisionIds.push(format.revisions[x].revisionID);\n }\n }\n if (this.writeInlineStyles && !isInline) {\n characterFormat.inlineFormat = this.writeCharacterFormat(format, true);\n }\n return characterFormat;\n };\n SfdtExport.prototype.writeParagraphFormat = function (format, isInline) {\n var paragraphFormat = {};\n paragraphFormat.borders = this.writeParagraphBorders(format.borders);\n paragraphFormat.leftIndent = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat.rightIndent = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat.firstLineIndent = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat.textAlignment = isInline ? format.textAlignment : format.getValue('textAlignment');\n paragraphFormat.beforeSpacing = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat.afterSpacing = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat.spaceBeforeAuto = isInline ? format.spaceBeforeAuto : format.getValue('spaceBeforeAuto');\n paragraphFormat.spaceAfterAuto = isInline ? format.spaceAfterAuto : format.getValue('spaceAfterAuto');\n paragraphFormat.lineSpacing = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat.lineSpacingType = isInline ? format.lineSpacingType : format.getValue('lineSpacingType');\n paragraphFormat.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat.outlineLevel = isInline ? format.outlineLevel : format.getValue('outlineLevel');\n paragraphFormat.listFormat = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat.tabs = this.writeTabs(format.tabs);\n paragraphFormat.bidi = isInline ? format.bidi : format.getValue('bidi');\n paragraphFormat.keepLinesTogether = isInline ? format.keepLinesTogether : format.getValue('keepLinesTogether');\n paragraphFormat.keepWithNext = isInline ? format.keepWithNext : format.getValue('keepWithNext');\n paragraphFormat.contextualSpacing = isInline ? format.contextualSpacing : format.getValue('contextualSpacing');\n paragraphFormat.widowControl = isInline ? format.widowControl : format.getValue('widowControl');\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat.inlineFormat = this.writeParagraphFormat(format, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab.position = tabStop.position;\n tab.deletePosition = tabStop.deletePosition;\n tab.tabJustification = tabStop.tabJustification;\n tab.tabLeader = tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue)) {\n listFormat.listId = listIdValue;\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n var listLevelNumber = format.getValue('listLevelNumber');\n if (!isNullOrUndefined(listLevelNumber)) {\n listFormat.listLevelNumber = listLevelNumber;\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table.rows)) {\n return undefined;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n next = tableWidget.nextRenderedWidget;\n return (next instanceof BlockWidget && next.containerWidget.index === tableWidget.containerWidget.index) ? next : undefined;\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n var next = rowWidget;\n do {\n rowWidget = next;\n next = this.writeRowInternal(next, rows);\n if (rowWidget === next) {\n return true;\n }\n } while (next instanceof TableRowWidget);\n return false;\n };\n SfdtExport.prototype.writeRowInternal = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return rowWidget;\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row.cells)) {\n return rowWidget;\n }\n }\n }\n }\n var next = rowWidget;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n if (!isNullOrUndefined(rowWidget.ownerTable.bodyWidget) && next && ((rowWidget.ownerTable.index !== next.ownerTable.index &&\n rowWidget.ownerTable.bodyWidget.sectionIndex === next.ownerTable.bodyWidget.sectionIndex)\n || rowWidget.ownerTable.bodyWidget.sectionIndex !== next.ownerTable.bodyWidget.sectionIndex)) {\n next = undefined;\n }\n } while (next instanceof TableRowWidget && next.index === rowWidget.index);\n return next;\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n var firstBlock = cellWidget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, cell.blocks);\n } while (firstBlock);\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n table.rows = [];\n table.grid = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table.grid[i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table.tableFormat = this.writeTableFormat(tableWidget.tableFormat);\n table.description = tableWidget.description;\n table.title = tableWidget.title;\n table.columnCount = tableWidget.tableHolder.columns.length;\n this.writeTablePositioning(table, tableWidget);\n return table;\n };\n SfdtExport.prototype.writeTablePositioning = function (table, tableWidget) {\n if (tableWidget.wrapTextAround) {\n table.wrapTextAround = tableWidget.wrapTextAround;\n table.positioning = {};\n table.positioning.allowOverlap = tableWidget.positioning.allowOverlap;\n table.positioning.distanceBottom = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceBottom);\n table.positioning.distanceLeft = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceLeft);\n table.positioning.distanceRight = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceRight);\n table.positioning.distanceTop = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceTop);\n if (!isNullOrUndefined(tableWidget.positioning.verticalAlignment)) {\n table.positioning.verticalAlignment = tableWidget.positioning.verticalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.verticalOrigin)) {\n table.positioning.verticalOrigin = tableWidget.positioning.verticalOrigin;\n }\n table.positioning.verticalPosition = tableWidget.positioning.verticalPosition;\n if (!isNullOrUndefined(tableWidget.positioning.horizontalAlignment)) {\n table.positioning.horizontalAlignment = tableWidget.positioning.horizontalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.horizontalOrigin)) {\n table.positioning.horizontalOrigin = tableWidget.positioning.horizontalOrigin;\n }\n table.positioning.horizontalPosition = tableWidget.positioning.horizontalPosition;\n }\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row.cells = [];\n row.rowFormat = this.writeRowFormat(rowWidget.rowFormat);\n if (rowWidget.hasOwnProperty('contentControlProperties')) {\n row.contentControlProperties = this.contentControlProperty(rowWidget.contentControlProperties);\n }\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell.blocks = [];\n cell.cellFormat = this.writeCellFormat(cellWidget.cellFormat);\n cell.columnIndex = cellWidget.columnIndex;\n if (cellWidget.hasOwnProperty('contentControlProperties')) {\n cell.contentControlProperties = this.contentControlProperty(cellWidget.contentControlProperties);\n }\n return cell;\n };\n SfdtExport.prototype.writeShading = function (wShading) {\n var shading = {};\n shading.backgroundColor = wShading.hasValue('backgroundColor') ? wShading.backgroundColor : undefined;\n shading.foregroundColor = wShading.hasValue('foregroundColor') ? wShading.foregroundColor : undefined;\n shading.textureStyle = wShading.hasValue('textureStyle') ? wShading.textureStyle : undefined;\n return shading;\n };\n SfdtExport.prototype.writeBorder = function (wBorder) {\n var border = {};\n border.color = wBorder.hasValue('color') ? wBorder.color : undefined;\n border.hasNoneStyle = wBorder.hasValue('hasNoneStyle') ? wBorder.hasNoneStyle : undefined;\n border.lineStyle = wBorder.hasValue('lineStyle') ? wBorder.lineStyle : undefined;\n border.lineWidth = wBorder.hasValue('lineWidth') ? wBorder.lineWidth : undefined;\n border.shadow = wBorder.hasValue('shadow') ? wBorder.shadow : undefined;\n border.space = wBorder.hasValue('space') ? wBorder.space : undefined;\n return border;\n };\n SfdtExport.prototype.writeParagraphBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.getBorder('top'));\n borders.left = this.writeBorder(wBorders.getBorder('left'));\n borders.right = this.writeBorder(wBorders.getBorder('right'));\n borders.bottom = this.writeBorder(wBorders.getBorder('bottom'));\n borders.horizontal = this.writeBorder(wBorders.getBorder('horizontal'));\n borders.vertical = this.writeBorder(wBorders.getBorder('vertical'));\n return borders;\n };\n SfdtExport.prototype.writeBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.top);\n borders.left = this.writeBorder(wBorders.left);\n borders.right = this.writeBorder(wBorders.right);\n borders.bottom = this.writeBorder(wBorders.bottom);\n borders.diagonalDown = this.writeBorder(wBorders.diagonalDown);\n borders.diagonalUp = this.writeBorder(wBorders.diagonalUp);\n borders.horizontal = this.writeBorder(wBorders.horizontal);\n borders.vertical = this.writeBorder(wBorders.vertical);\n return borders;\n };\n SfdtExport.prototype.writeCellFormat = function (wCellFormat) {\n var cellFormat = {};\n cellFormat.borders = this.writeBorders(wCellFormat.borders);\n cellFormat.shading = this.writeShading(wCellFormat.shading);\n cellFormat.topMargin = wCellFormat.hasValue('topMargin') ? wCellFormat.topMargin : undefined;\n cellFormat.rightMargin = wCellFormat.hasValue('rightMargin') ? wCellFormat.rightMargin : undefined;\n cellFormat.leftMargin = wCellFormat.hasValue('leftMargin') ? wCellFormat.leftMargin : undefined;\n cellFormat.bottomMargin = wCellFormat.hasValue('bottomMargin') ? wCellFormat.bottomMargin : undefined;\n cellFormat.preferredWidth = wCellFormat.hasValue('preferredWidth') ? wCellFormat.preferredWidth : undefined;\n cellFormat.preferredWidthType = wCellFormat.hasValue('preferredWidthType') ? wCellFormat.preferredWidthType : undefined;\n cellFormat.cellWidth = wCellFormat.hasValue('cellWidth') ? wCellFormat.cellWidth : undefined;\n cellFormat.columnSpan = wCellFormat.columnSpan;\n cellFormat.rowSpan = wCellFormat.rowSpan;\n cellFormat.verticalAlignment = wCellFormat.hasValue('verticalAlignment') ? wCellFormat.verticalAlignment : undefined;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat) {\n var rowFormat = {};\n var revisionIds = [];\n rowFormat.height = wRowFormat.hasValue('height') ? wRowFormat.height : undefined;\n rowFormat.allowBreakAcrossPages = wRowFormat.hasValue('allowBreakAcrossPages') ? wRowFormat.allowBreakAcrossPages : undefined;\n rowFormat.heightType = wRowFormat.hasValue('heightType') ? wRowFormat.heightType : undefined;\n rowFormat.isHeader = wRowFormat.hasValue('isHeader') ? wRowFormat.isHeader : undefined;\n rowFormat.borders = this.writeBorders(wRowFormat.borders);\n rowFormat.gridBefore = wRowFormat.gridBefore;\n rowFormat.gridBeforeWidth = wRowFormat.hasValue('gridBeforeWidth') ? wRowFormat.gridBeforeWidth : undefined;\n rowFormat.gridBeforeWidthType = wRowFormat.hasValue('gridBeforeWidthType') ? wRowFormat.gridBeforeWidthType : undefined;\n rowFormat.gridAfter = wRowFormat.gridAfter;\n rowFormat.gridAfterWidth = wRowFormat.hasValue('gridAfterWidth') ? wRowFormat.gridAfterWidth : undefined;\n rowFormat.gridAfterWidthType = wRowFormat.hasValue('gridAfterWidthType') ? wRowFormat.gridAfterWidthType : undefined;\n rowFormat.leftMargin = wRowFormat.hasValue('leftMargin') ? wRowFormat.leftMargin : undefined;\n rowFormat.topMargin = wRowFormat.hasValue('topMargin') ? wRowFormat.topMargin : undefined;\n rowFormat.rightMargin = wRowFormat.hasValue('rightMargin') ? wRowFormat.rightMargin : undefined;\n rowFormat.bottomMargin = wRowFormat.hasValue('bottomMargin') ? wRowFormat.bottomMargin : undefined;\n rowFormat.leftIndent = wRowFormat.hasValue('leftIndent') ? wRowFormat.leftIndent : undefined;\n for (var j = 0; j < wRowFormat.revisions.length; j++) {\n rowFormat.revisionIds = this.writeRowRevisions(wRowFormat.revisions[j], revisionIds);\n }\n return rowFormat;\n };\n SfdtExport.prototype.writeRowRevisions = function (wrevisions, revisionIds) {\n if (this.selectedRevisionId.indexOf(wrevisions.revisionID) === -1) {\n this.selectedRevisionId.push(wrevisions.revisionID);\n }\n revisionIds.push(wrevisions.revisionID);\n return revisionIds;\n };\n SfdtExport.prototype.writeTableFormat = function (wTableFormat) {\n var tableFormat = {};\n tableFormat.borders = this.writeBorders(wTableFormat.borders);\n tableFormat.shading = this.writeShading(wTableFormat.shading);\n tableFormat.cellSpacing = wTableFormat.hasValue('cellSpacing') ? wTableFormat.cellSpacing : undefined;\n tableFormat.leftIndent = wTableFormat.hasValue('leftIndent') ? wTableFormat.leftIndent : undefined;\n tableFormat.tableAlignment = wTableFormat.hasValue('tableAlignment') ? wTableFormat.tableAlignment : undefined;\n tableFormat.topMargin = wTableFormat.hasValue('topMargin') ? wTableFormat.topMargin : undefined;\n tableFormat.rightMargin = wTableFormat.hasValue('rightMargin') ? wTableFormat.rightMargin : undefined;\n tableFormat.leftMargin = wTableFormat.hasValue('leftMargin') ? wTableFormat.leftMargin : undefined;\n tableFormat.bottomMargin = wTableFormat.hasValue('bottomMargin') ? wTableFormat.bottomMargin : undefined;\n tableFormat.preferredWidth = wTableFormat.hasValue('preferredWidth') ? wTableFormat.preferredWidth : undefined;\n tableFormat.preferredWidthType = wTableFormat.hasValue('preferredWidthType') ? wTableFormat.preferredWidthType : undefined;\n tableFormat.bidi = wTableFormat.hasValue('bidi') ? wTableFormat.bidi : undefined;\n tableFormat.allowAutoFit = wTableFormat.hasValue('allowAutoFit') ? wTableFormat.allowAutoFit : undefined;\n tableFormat.styleName = !isNullOrUndefined(wTableFormat.styleName) ? wTableFormat.styleName : undefined;\n return tableFormat;\n };\n SfdtExport.prototype.footnotes = function (documentHelper) {\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.seprators(documentHelper);\n }\n };\n SfdtExport.prototype.seprators = function (documentHelper) {\n if (documentHelper.footnotes.separator.length > 0) {\n this.document.footnotes = {};\n this.document.footnotes.separator = [];\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.writeBlock(documentHelper.footnotes.separator[i], 0, this.document.footnotes.separator);\n }\n }\n if (documentHelper.footnotes.continuationSeparator.length > 0) {\n this.document.footnotes.continuationSeparator = [];\n for (var i = 0; i < documentHelper.footnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationSeparator[i], 0, this.document.footnotes.continuationSeparator);\n }\n }\n if (documentHelper.footnotes.continuationNotice.length > 0) {\n this.document.footnotes.continuationNotice = [];\n for (var i = 0; i < documentHelper.footnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationNotice[i], 0, this.document.footnotes.continuationNotice);\n }\n }\n };\n SfdtExport.prototype.endnotes = function (documentHelper) {\n for (var i = 0; i < this.documentHelper.endnotes.separator.length; i++) {\n this.endnoteSeparator(documentHelper);\n }\n };\n SfdtExport.prototype.endnoteSeparator = function (documentHelper) {\n if (documentHelper.endnotes.separator.length > 0) {\n this.document.endnotes = {};\n this.document.endnotes.separator = [];\n for (var i = 0; i < documentHelper.endnotes.separator.length; i++) {\n this.writeBlock(documentHelper.endnotes.separator[i], 0, this.document.endnotes.separator);\n }\n }\n if (documentHelper.endnotes.continuationSeparator.length > 0) {\n this.document.endnotes.continuationSeparator = [];\n for (var i = 0; i < documentHelper.endnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationSeparator[i], 0, this.document.endnotes.continuationSeparator);\n }\n }\n if (documentHelper.endnotes.continuationNotice.length > 0) {\n this.document.endnotes.continuationNotice = [];\n for (var i = 0; i < documentHelper.endnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationNotice[i], 0, this.document.endnotes.continuationNotice);\n }\n }\n };\n SfdtExport.prototype.writeStyles = function (documentHelper) {\n var styles = [];\n this.document.styles = [];\n for (var i = 0; i < documentHelper.styles.length; i++) {\n this.document.styles.push(this.writeStyle(documentHelper.styles.getItem(i)));\n }\n };\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle.name = style.name;\n if (style.type === 'Paragraph') {\n wStyle.type = 'Paragraph';\n wStyle.paragraphFormat = this.writeParagraphFormat(style.paragraphFormat);\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (style.type === 'Character') {\n wStyle.type = 'Character';\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle.basedOn = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle.link = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle.next = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeRevisions = function (documentHelper) {\n this.document.revisions = [];\n for (var i = 0; i < documentHelper.owner.revisions.changes.length; i++) {\n if (this.isExport ||\n (!this.isExport && this.selectedRevisionId.indexOf(documentHelper.owner.revisions.changes[i].revisionID) !== -1)) {\n this.document.revisions.push(this.writeRevision(documentHelper.owner.revisions.changes[i]));\n }\n }\n };\n SfdtExport.prototype.writeRevision = function (revisions) {\n var revision = {};\n revision.author = revisions.author;\n revision.date = revisions.date;\n revision.revisionType = revisions.revisionType;\n revision.revisionId = revisions.revisionID;\n return revision;\n };\n SfdtExport.prototype.writeComments = function (documentHelper) {\n this.document.comments = [];\n for (var i = 0; i < documentHelper.comments.length; i++) {\n if (this.isExport ||\n (!this.isExport && this.selectedCommentsId.indexOf(this.documentHelper.comments[i].commentId) !== -1)) {\n this.document.comments.push(this.writeComment(this.documentHelper.comments[i]));\n }\n }\n };\n SfdtExport.prototype.writeCustomXml = function (documentHelper) {\n this.document.customXml = [];\n for (var i = 0; i < documentHelper.customXmlData.length; i++) {\n var customXml = {};\n var key = documentHelper.customXmlData.keys[i];\n customXml.itemID = key;\n var xmlValue = this.documentHelper.customXmlData.get(key);\n customXml.xml = xmlValue;\n this.document.customXml.push(customXml);\n }\n };\n SfdtExport.prototype.writeComment = function (comments) {\n var comment = {};\n comment.commentId = comments.commentId;\n comment.author = comments.author;\n comment.date = comments.date;\n comment.blocks = [];\n comment.blocks.push(this.commentInlines(comments.text));\n comment.done = comments.isResolved;\n comment.replyComments = [];\n for (var i = 0; i < comments.replyComments.length; i++) {\n comment.replyComments.push(this.writeComment(comments.replyComments[i]));\n }\n return comment;\n };\n SfdtExport.prototype.commentInlines = function (ctext) {\n var blocks = {};\n blocks.inlines = [{ text: ctext }];\n return blocks;\n };\n SfdtExport.prototype.writeLists = function (documentHelper) {\n var abstractLists = [];\n this.document.lists = [];\n for (var i = 0; i < documentHelper.lists.length; i++) {\n var list = documentHelper.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document.lists.push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document.abstractLists = [];\n for (var i = 0; i < documentHelper.abstractLists.length; i++) {\n var abstractList = documentHelper.abstractLists[i];\n if (abstractLists.indexOf(abstractList.abstractListId) > -1) {\n this.document.abstractLists.push(this.writeAbstractList(abstractList));\n }\n }\n };\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList.abstractListId = wAbstractList.abstractListId;\n abstractList.levels = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList.levels[i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n list.abstractListId = wList.abstractListId;\n list.levelOverrides = [];\n for (var i = 0; i < wList.levelOverrides.length; i++) {\n list.levelOverrides.push(this.writeLevelOverrides(wList.levelOverrides[i]));\n }\n list.listId = wList.listId;\n return list;\n };\n SfdtExport.prototype.writeLevelOverrides = function (wlevel) {\n var levelOverrides = {};\n levelOverrides.levelNumber = wlevel.levelNumber;\n if (wlevel.overrideListLevel) {\n levelOverrides.overrideListLevel = this.writeListLevel(wlevel.overrideListLevel);\n }\n levelOverrides.startAt = wlevel.startAt;\n return levelOverrides;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel.characterFormat = this.writeCharacterFormat(wListLevel.characterFormat);\n listLevel.paragraphFormat = this.writeParagraphFormat(wListLevel.paragraphFormat);\n listLevel.followCharacter = wListLevel.followCharacter;\n listLevel.listLevelPattern = wListLevel.listLevelPattern;\n listLevel.numberFormat = wListLevel.numberFormat;\n listLevel.restartLevel = wListLevel.restartLevel;\n listLevel.startAt = wListLevel.startAt;\n return listLevel;\n };\n SfdtExport.prototype.getParentBlock = function (widget) {\n if (widget.isInsideTable) {\n widget = this.owner.documentHelper.layout.getParentTable(widget);\n }\n return widget;\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.endLine = undefined;\n this.startLine = undefined;\n this.endOffset = undefined;\n this.documentHelper = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WSectionFormat } from '../format/section-format';\n/**\n * The notes dialog is used to insert footnote.\n */\nvar NotesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function NotesDialog(documentHelper) {\n var _this = this;\n this.list = undefined;\n /**\n * @private\n */\n this.noteNumberFormat = undefined;\n this.sectionFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var format;\n var section;\n if (_this.sectionFormat) {\n section = _this.sectionFormat;\n }\n else {\n section = _this.documentHelper.owner.selection.sectionFormat;\n }\n if (_this.documentHelper.selection.isinFootnote) {\n var footnotesFormat = section.footNoteNumberFormat;\n var startAt = section.initialFootNoteNumber;\n format = _this.reversetype(footnotesFormat);\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n else {\n var endnotesFormat = section.endnoteNumberFormat;\n format = _this.reversetype(endnotesFormat);\n var startAt = section.initialEndNoteNumber;\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFootnoteClick = function () {\n var format = new WSectionFormat(undefined);\n if (!isNullOrUndefined(_this.notesList)) {\n var formats = (_this.notesList.value).toString();\n var renderFormat = _this.types(formats);\n var startValue = _this.startValueTextBox.value;\n if (!isNullOrUndefined(_this.notesList)) {\n if (_this.documentHelper.selection.isinFootnote) {\n format.footNoteNumberFormat = renderFormat;\n format.footNoteNumberFormat = renderFormat;\n format.initialFootNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n else {\n format.endnoteNumberFormat = renderFormat;\n format.endnoteNumberFormat = renderFormat;\n format.initialEndNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.notesList.value = undefined;\n };\n this.documentHelper = documentHelper;\n }\n NotesDialog.prototype.getModuleName = function () {\n return 'FootNotesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n NotesDialog.prototype.notesDialog = function (localValue, isRtl) {\n var idName = this.documentHelper.owner.containerId + '_insert_Footnote';\n this.target = createElement('div', { id: idName, className: 'e-de-insert-footnote' });\n var firstDiv = createElement('div');\n var startatValue = createElement('div');\n this.footCount = createElement('input', {\n attrs: { type: 'text' }, id: this.documentHelper.owner.containerId + 'row'\n });\n startatValue.appendChild(this.footCount);\n var numberFormatDiv = createElement('div', { className: 'e-de-container-row' });\n var formatType = createElement('select', {\n id: this.target.id + '_papersize', styles: 'padding-bottom: 20px;',\n innerHTML: ''\n });\n numberFormatDiv.appendChild(formatType);\n this.notesList = new DropDownList({\n enableRtl: isRtl, placeholder: localValue.getConstant('Start at'),\n floatLabelType: 'Always'\n });\n this.notesList.appendTo(formatType);\n firstDiv.appendChild(numberFormatDiv);\n firstDiv.appendChild(startatValue);\n this.target.appendChild(firstDiv);\n this.startValueTextBox = new NumericTextBox({\n format: '#',\n min: 1,\n max: 99999,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number format'),\n floatLabelType: 'Always'\n });\n this.startValueTextBox.appendTo(this.footCount);\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.notesDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n //let footType: any = this.documentHelper.selection.startInternal.currentWidget.paragraph.containerWidget;\n if (this.documentHelper.selection.isinFootnote) {\n this.documentHelper.dialog.header = localValue.getConstant('Footnote');\n }\n else {\n this.documentHelper.dialog.header = localValue.getConstant('Endnote');\n }\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFootnoteClick,\n buttonModel: { content: localValue.getConstant('Apply'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.startValueTextBox.value = 1;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n if (this.documentHelper.selection.isinEndnote) {\n var alignValue = this.endnoteListValue(this.list);\n this.notesList.index = alignValue;\n }\n };\n NotesDialog.prototype.types = function (type) {\n switch (type) {\n case '1, 2, 3, ...':\n return 'Arabic';\n case 'A, B, C, ...':\n return 'UpperCaseLetter';\n case 'a, b, c, ...':\n return 'LowerCaseLetter';\n case 'I, II, III, ...':\n return 'LowerCaseRoman';\n case 'i, ii, iii, ...':\n return 'UpperCaseRoman';\n default:\n return 'Arabic';\n }\n };\n NotesDialog.prototype.reversetype = function (type) {\n switch (type) {\n case 'Arabic':\n return '1, 2, 3, ...';\n case 'UpperCaseLetter':\n return 'A, B, C, ...';\n case 'LowerCaseLetter':\n return 'a, b, c, ...';\n case 'UpperCaseRoman':\n return 'I, II, III, ...';\n case 'LowerCaseRoman':\n return 'i, ii, iii, ...';\n default:\n return '1, 2, 3, ...';\n }\n };\n // eslint-disable-next-line\n NotesDialog.prototype.endnoteListValue = function (listFocus) {\n var value;\n if (listFocus === 'A, B, C, ...') {\n value = 0;\n }\n else if (listFocus === '1, 2, 3, ...') {\n value = 1;\n }\n else if (listFocus === 'a, b, c, ...') {\n value = 2;\n }\n else {\n value = 3;\n }\n // else {\n // value = 4;\n // }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.destroy = function () {\n if (this.footCount) {\n if (this.footCount.parentElement) {\n this.footCount.parentElement.removeChild(this.footCount);\n }\n this.footCount = undefined;\n }\n if (this.startValueTextBox) {\n this.startValueTextBox.destroy();\n this.startValueTextBox = undefined;\n }\n if (this.notesList) {\n this.notesList.destroy();\n this.notesList = undefined;\n }\n this.footCount = undefined;\n this.documentHelper = undefined;\n };\n return NotesDialog;\n}());\nexport { NotesDialog };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport { Component, Property, NotifyPropertyChanges, Event, ChildProperty, classList, Complex, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { LayoutViewer, PageLayoutViewer, WebLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\nimport { SpellChecker } from './implementation/spell-check/spell-checker';\nimport { SpellCheckDialog } from './implementation/dialogs/spellCheck-dialog';\nimport { DocumentHelper } from './index';\nimport { CheckBoxFormFieldDialog, DropDownFormField, TextFormField, CheckBoxFormField } from './implementation/index';\nimport { TextFormFieldDialog } from './implementation/dialogs/form-field-text-dialog';\nimport { DropDownFormFieldDialog } from './implementation/dialogs/form-field-drop-down-dialog';\nimport { RevisionCollection } from './implementation/track-changes/track-changes';\nimport { NotesDialog } from './implementation/dialogs/notes-dialog';\nimport { FootNoteWidget } from './implementation/viewer/page';\nimport { internalZoomFactorChange, contentChangeEvent, documentChangeEvent, selectionChangeEvent, zoomFactorChangeEvent, beforeFieldFillEvent, afterFieldFillEvent, serviceFailureEvent, viewChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent } from './base/constants';\nimport { Optimized, Regular, HelperMethods } from './index';\n/**\n * The `DocumentEditorSettings` module is used to provide the customize property of Document Editor.\n */\nvar DocumentEditorSettings = /** @class */ (function (_super) {\n __extends(DocumentEditorSettings, _super);\n function DocumentEditorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#FFE97F')\n ], DocumentEditorSettings.prototype, \"searchHighlightColor\", void 0);\n __decorate([\n Property(['Algerian', 'Arial', 'Calibri', 'Cambria', 'Cambria Math', 'Candara', 'Courier New', 'Georgia', 'Impact', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Symbol', 'Times New Roman', 'Verdana', 'Wingdings'])\n ], DocumentEditorSettings.prototype, \"fontFamilies\", void 0);\n __decorate([\n Property({ shadingColor: '#cfcfcf', applyShading: true, selectionColor: '#cccccc', formFillingMode: 'Popup' })\n ], DocumentEditorSettings.prototype, \"formFieldSettings\", void 0);\n __decorate([\n Property({ roomName: '', editableRegionColor: '#22b24b', lockedRegionColor: '#f44336' })\n ], DocumentEditorSettings.prototype, \"collaborativeEditingSettings\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditorSettings.prototype, \"printDevicePixelRatio\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"enableOptimizedTextMeasuring\", void 0);\n __decorate([\n Property(32767)\n ], DocumentEditorSettings.prototype, \"maximumRows\", void 0);\n return DocumentEditorSettings;\n}(ChildProperty));\nexport { DocumentEditorSettings };\n/**\n * Represents the settings and properties of the document that is opened in Document editor component.\n */\nvar DocumentSettings = /** @class */ (function (_super) {\n __extends(DocumentSettings, _super);\n function DocumentSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Word2013')\n ], DocumentSettings.prototype, \"compatibilityMode\", void 0);\n return DocumentSettings;\n}(ChildProperty));\nexport { DocumentSettings };\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initialize the constructor of DocumentEditor\n *\n * @param {DocumentEditorModel} options - Specifies the document editor model.\n * @param {string | HTMLElement} element - Specifies the element.\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.parser = undefined;\n _this.disableHistoryIn = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n _this.createdTriggered = false;\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'OK',\n 'Apply': 'Apply',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Points': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Justify': 'Justify',\n 'Indent from left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default cell margins': 'Default cell margins',\n 'Default cell spacing': 'Default cell spacing',\n 'Allow spacing between cells': 'Allow spacing between cells',\n 'Cell margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n '1, 2, 3, ...': '1, 2, 3, ...',\n 'a, b, c, ...': 'a, b, c, ...',\n 'A, B, C, ...': 'A, B, C, ...',\n 'I, II, III, ...': 'I, II, III, ...',\n 'i, ii, iii, ...': 'i, ii, iii, ...',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'First Page Header': 'First Page Header',\n 'First Page Footer': 'First Page Footer',\n 'Even Page Header': 'Even Page Header',\n 'Even Page Footer': 'Even Page Footer',\n 'Odd Page Header': 'Odd Page Header',\n 'Odd Page Footer': 'Odd Page Footer',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n 'Nothing': 'Nothing',\n 'Tab leader': 'Tab leader',\n 'Show levels': 'Show levels',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from': 'Build table of contents from',\n 'Styles': 'Styles',\n 'Available styles': 'Available styles',\n 'TOC level': 'TOC level',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Number of columns': 'Number of columns',\n 'Number of rows': 'Number of rows',\n 'Text to display': 'Text to display',\n 'ScreenTip text': 'ScreenTip text',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'Indentation': 'Indentation',\n 'Before text': 'Before text',\n 'Special': 'Special',\n 'First line': 'First line',\n 'Hanging': 'Hanging',\n 'After text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'Define new Multilevel list': 'Define new Multilevel list',\n 'List level': 'List level',\n 'Choose level to modify': 'Choose level to modify',\n 'Level': 'Level',\n 'Number format': 'Number format',\n 'Number style for this level': 'Number style for this level',\n 'Enter formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart list after': 'Restart list after',\n 'Position': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab character': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font style': 'Font style',\n 'Underline style': 'Underline style',\n 'Font color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Linked Style': 'Linked(Paragraph and Character)',\n 'Character': 'Character',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all': 'We replaced all',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done': 'All Done',\n 'Result': 'Result',\n 'of': 'of',\n 'instances': 'instances',\n 'with': 'with',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name': 'Bookmark name',\n 'Close': 'Close',\n 'Restart At': 'Restart At',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'Number format tooltip information': 'Single-level number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]
      '\n + 'For example, \"Chapter %1.\" will display numbering like
      Chapter 1. Item
      Chapter 2. Item
      …'\n + '
      Chapter N. Item
      '\n + '
      Multilevel number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
      For example, \"%1.%2.\" will display numbering like
      1.1. Item
      1.2. Item

      1.N. Item',\n 'Format': 'Format',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'InsertFootnote': 'InsertFootnote',\n 'InsertEndnote': 'InsertEndnote',\n 'Footnote': 'Footnote',\n 'Endnote': 'Endnote',\n 'Notes Options': 'Notes Options',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents',\n 'AutoFit': 'AutoFit',\n 'AutoFit to Contents': 'AutoFit to Contents',\n 'AutoFit to Window': 'AutoFit to Window',\n 'Fixed Column Width': 'Fixed Column Width',\n 'Reset': 'Reset',\n 'Match case': 'Match case',\n 'Whole words': 'Whole words',\n 'Add': 'Add',\n 'Go To': 'Go To',\n 'Search for': 'Search for',\n 'Replace with': 'Replace with',\n 'TOC 1': 'TOC 1',\n 'TOC 2': 'TOC 2',\n 'TOC 3': 'TOC 3',\n 'TOC 4': 'TOC 4',\n 'TOC 5': 'TOC 5',\n 'TOC 6': 'TOC 6',\n 'TOC 7': 'TOC 7',\n 'TOC 8': 'TOC 8',\n 'TOC 9': 'TOC 9',\n 'Right-to-left': 'Right-to-left',\n 'Left-to-right': 'Left-to-right',\n 'Direction': 'Direction',\n 'Table direction': 'Table direction',\n 'Indent from right': 'Indent from right',\n /* eslint-disable */\n \"Contextual Spacing\": \"Don't add space between paragraphs of the same style\",\n \"Password Mismatch\": \"The password don't match\",\n 'Restrict Editing': 'Restrict Editing',\n 'Formatting restrictions': 'Formatting restrictions',\n 'Allow formatting': 'Allow formatting',\n 'Editing restrictions': 'Editing restrictions',\n 'Read only': 'Read only',\n 'Exceptions Optional': 'Exceptions (optional)',\n 'Select Part Of Document And User': 'Select parts of the document and choose users who are allowed to freely edit them.',\n 'Everyone': 'Everyone',\n 'More users': 'More users',\n 'Add Users': 'Add Users',\n 'Enforcing Protection': 'Yes, Start Enforcing Protection',\n 'Start Enforcing Protection': 'Start Enforcing Protection',\n 'Enter User': 'Enter User',\n 'Users': 'Users',\n 'Enter new password': 'Enter new password',\n 'Reenter new password to confirm': 'Reenter new password to confirm',\n 'Your permissions': 'Your permissions',\n 'Protected Document': 'This document is protected from unintentional editing.',\n 'FormFieldsOnly': 'You may only fill in forms in this region.',\n 'CommentsOnly': 'You may only insert comments into this region.',\n 'ReadOnlyProtection': 'You may edit in this region.',\n 'Stop Protection': 'Stop Protection',\n 'Password': 'Password',\n 'Spelling Editor': 'Spelling Editor',\n 'Spelling': 'Spelling',\n 'Spell Check': 'Spell Check',\n 'Underline errors': 'Underline errors',\n 'Ignore': 'Ignore',\n 'Ignore All': 'Ignore All',\n 'Add to Dictionary': 'Add to Dictionary',\n 'Change': 'Change',\n 'Change All': 'Change All',\n 'Suggestions': 'Suggestions',\n 'The password is incorrect': 'The password is incorrect',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Highlight the regions I can edit': 'Highlight the regions I can edit',\n 'Show All Regions I Can Edit': 'Show All Regions I Can Edit',\n 'Find Next Region I Can Edit': 'Find Next Region I Can Edit',\n 'Keep source formatting': 'Keep source formatting',\n 'Match destination formatting': 'Match destination formatting',\n 'InsertAsRows': 'Insert as New Rows',\n 'InsertAsColumns': 'Insert as New Columns',\n 'OverwriteCells': 'Overwrite Cells',\n 'NestTable': 'Nest Table',\n 'Text only': 'Text only',\n 'Comments': 'Comments',\n 'Type your comment': 'Type your comment',\n 'Post': 'Post',\n 'Reply': 'Reply',\n 'New Comment': 'New Comment',\n 'Edit': 'Edit',\n 'Resolve': 'Resolve',\n 'Reopen': 'Reopen',\n 'No comments in this document': 'No comments in this document',\n 'more': 'more',\n 'Type your comment here': 'Type your comment here',\n 'Next Comment': 'Next Comment',\n 'Previous Comment': 'Previous Comment',\n 'Un-posted comments': 'Un-posted comments',\n 'Discard Comment': 'Added comments not posted. If you continue, that comment will be discarded.',\n 'No Headings': 'No Heading Found!',\n 'Add Headings': 'This document has no headings. Please add headings and try again.',\n 'More Options': 'More Options',\n 'Click to see this comment': 'Click to see this comment',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'Drop Down Form Field': 'Drop Down Form Field',\n 'Dropdown items': 'Drop-down items',\n 'Items in dropdown list': 'Items in drop-down list',\n 'ADD': 'ADD',\n 'REMOVE': 'REMOVE',\n 'Field settings': 'Field settings',\n 'Tooltip': 'Tooltip',\n 'Dropdown enabled': 'Drop-down enabled',\n 'Check Box Form Field': 'Check Box Form Field',\n 'Check box size': 'Check box size',\n 'Auto': 'Auto',\n 'Default value': 'Default value',\n 'Not checked': 'Not checked',\n 'Checked': 'Checked',\n 'Check box enabled': 'Check box enabled',\n 'Text Form Field': 'Text Form Field',\n 'Type': 'Type',\n 'Default text': 'Default text',\n 'Maximum length': 'Maximum length',\n 'Text format': 'Text format',\n 'Fillin enabled': 'Fill-in enabled',\n 'Default number': 'Default number',\n 'Default date': 'Default date',\n 'Date format': 'Date format',\n 'Merge Track': 'This action wont be marked as change. Do you want to continue?',\n 'UnTrack': 'Cannot be tracked !',\n 'Accept': 'Accept',\n 'Reject': 'Reject',\n 'Previous Changes': 'Previous Changes',\n 'Next Changes': 'Next Changes',\n 'Inserted': 'Inserted',\n 'Deleted': 'Deleted',\n 'Move From': 'Move From',\n 'Move To': 'Move To',\n 'Changes': 'Changes',\n 'Accept all': 'Accept all',\n 'Reject all': 'Reject all',\n 'No changes': 'No changes',\n 'Accept Changes': 'Accept Changes',\n 'Reject Changes': 'Reject Changes',\n 'User': 'User',\n 'View': 'View',\n 'Insertion': 'Insertion',\n 'Deletion': 'Deletion',\n 'All caps': 'All caps',\n 'This region is locked by': 'This region is locked by',\n 'Lock': 'Lock',\n 'Unlock': 'Unlock',\n 'Already locked': 'Selected or part of region is already locked by another user',\n 'Click to View/Edit Footnote': 'Click to View/Edit Footnote',\n 'Click to View/Edit Endnote': 'Click to View/Edit Endnote',\n 'Multiple Comment': 'Please post your comment',\n 'No suggestions': 'No suggestions',\n 'More Suggestion': 'More Suggestion',\n 'Ignore Once': 'Ignore Once',\n 'Keep With Next': 'Keep with next',\n 'Keep Lines Together': 'Keep lines together',\n 'WidowControl': 'Widow/Orphan control',\n 'Indents and Spacing': 'Indents and Spacing',\n 'Line and Page Breaks': 'Line and Page Breaks',\n 'Pagination': 'Pagination',\n 'Single': 'Single',\n 'DashSmallGap': 'DashSmallGap',\n 'DashDot': 'DashDot',\n 'Double': 'Double',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'Inset': 'Inset',\n 'DashLargeGap': 'DashLargeGap',\n 'Dot': 'Dot',\n 'DashDotDot': 'DashDotDot',\n 'Triple': 'Triple',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'DashDotStroked': 'DashDotStroked',\n 'Engrave3D': 'Engrave3D',\n 'Thick': 'Thick',\n 'Outset': 'Outset',\n 'Emboss3D': 'Emboss3D',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'Number of rows must be between 1 and 32767.': 'Number of rows must be between 1 and 32767.',\n 'Number of columns must be between 1 and 63.': 'Number of columns must be between 1 and 63.',\n 'Unlimited': 'Unlimited',\n 'Regular text': 'Regular text',\n 'Date': 'Date',\n 'Uppercase': 'Uppercase',\n 'Lowercase': 'Lowercase',\n 'FirstCapital': 'FirstCapital',\n 'TitleCase': 'Titlecase',\n 'Filling in forms': 'Filling in forms',\n 'px': 'px',\n 'Tracked changes': 'Tracked changes',\n 'TrackChangesOnly': 'You may edit in this region, but all change will be tracked.',\n 'RemovedIgnoreExceptions': 'If you make this change in document protection, Word will ignore all the exceptions in this document.',\n 'RemovedIgnore': 'Do you want to remove the ignored exceptions?',\n 'Information': 'Information',\n 'Yes': 'Yes',\n 'No': 'No'\n };\n _this.initHelper();\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n * @returns {boolean} - Returns true if header and footer is enabled.\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n set: function (value) {\n this.enableHeaderFooterIn = value;\n if (!value && this.selection && this.selection.isWebLayout) {\n this.selection.isWebLayout = false;\n }\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n *\n * @returns {number} - Returns the page count.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer) || this.viewer instanceof WebLayoutViewer) {\n return 1;\n }\n return this.documentHelper.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n *\n * @default undefined\n * @aspType Selection\n * @returns {Selection} - Returns the selection object.\n */\n get: function () {\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n *\n * @aspType Editor\n * @returns {Editor} - Returns the editor object.\n */\n get: function () {\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n *\n * @aspType EditorHistory\n * @returns {EditorHistory} - Returns the editor history object.\n */\n get: function () {\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"search\", {\n /**\n * Gets the search object of the document editor.\n *\n * @aspType Search\n * @returns { Search } - Returns the search object.\n */\n get: function () {\n return this.searchModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n *\n * @aspType ContextMenu\n * @returns {ContextMenu} - Returns the context menu object.\n */\n get: function () {\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellCheckDialog\", {\n /**\n * Gets the spell check dialog object of the document editor.\n *\n * @returns {SpellCheckDialog} - Returns the spell check dialog object.\n */\n get: function () {\n return this.spellCheckDialogModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellChecker\", {\n /**\n * Gets the spell check object of the document editor.\n *\n * @aspType SpellChecker\n * @returns {SpellChecker} - Returns the spell checker object.\n */\n get: function () {\n return this.spellCheckerModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n * @returns {string }- Returns the container id.\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n * @returns {boolean} - Returns true if document is loaded.\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"revisions\", {\n /**\n * Gets the revision collection which contains information about changes made from original document\n *\n * @returns {RevisionCollection} - Returns the revision collection object.\n */\n get: function () {\n if (isNullOrUndefined(this.revisionsInternal)) {\n this.revisionsInternal = new RevisionCollection(this);\n }\n return this.revisionsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n *\n * @default - false\n * @private\n * @returns {boolean} - Returns true if history module is enabled.\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document start.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentStart();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document end.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentEnd();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isReadOnlyMode.\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule)\n || isNullOrUndefined(this.selectionModule) || !isNullOrUndefined(this.editor) && this.editor.restrictEditing;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isSpellCheck\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isSpellCheck.\n */\n get: function () {\n return this.enableSpellCheck && this.spellChecker.enableSpellCheck;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n *\n * @private\n * @returns {boolean} - Returns enableImageResizerMode.\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n }\n else {\n DocumentEditor_1.Inject(Regular);\n }\n //pre render section\n this.findResultsList = [];\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n if (this.refreshing) {\n this.initHelper();\n }\n };\n DocumentEditor.prototype.initHelper = function () {\n this.documentHelper = new DocumentHelper(this);\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n this.viewer = new WebLayoutViewer(this);\n }\n this.parser = new SfdtReader(this.documentHelper);\n };\n DocumentEditor.prototype.render = function () {\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n }\n this.textMeasureHelper = (this.optimizedModule) ? this.optimizedModule : this.regularModule;\n if (isNullOrUndefined(this.textMeasureHelper)) {\n this.textMeasureHelper = new Optimized(this.documentHelper);\n }\n this.documentHelper.initializeComponents();\n this.openBlank();\n this.renderComplete();\n this.createdTriggered = true;\n };\n /**\n * Get component name\n *\n * @private\n * @returns {string} - Returns module name.\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {DocumentEditorModel} model - Specifies the new model.\n * @param {DocumentEditorModel} oldProp - Specifies the old model.\n * @returns {void}\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableTrackChanges':\n if (this.documentHelper.isTrackedOnlyMode && !model.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n break;\n case 'zoomFactor':\n if (this.viewer && oldProp.zoomFactor !== model.zoomFactor) {\n this.documentHelper.zoomFactor = model.zoomFactor;\n }\n break;\n case 'layoutType':\n if (this.selection && this.selection.isWebLayout) {\n break;\n }\n this.viewer.destroy();\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n if (this.enableHeaderAndFooter === true) {\n this.selection.closeHeaderFooter();\n }\n this.viewer = new WebLayoutViewer(this);\n }\n /* eslint-disable */\n var paragraph = this.selection.start.paragraph;\n if (paragraph.containerWidget instanceof FootNoteWidget) {\n this.selection.clearSelectionHighlightInSelectedWidgets();\n this.selection.selectContent(this.documentStart, true);\n }\n this.editor.layoutWholeDocument(true);\n setTimeout(function () {\n _this.fireViewChange();\n }, 200);\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.showComments) {\n this.commentReviewPane.showHidePane(true, 'Comments');\n }\n this.commentReviewPane.enableDisableItems();\n this.trackChangesPane.enableDisableButton(!this.isReadOnly && !this.documentHelper.isDocumentProtected);\n break;\n case 'currentUser':\n case 'userColor':\n if (this.selection && this.documentHelper.isDocumentProtected) {\n this.selection.highlightEditRegion();\n }\n this.viewer.updateScrollBars();\n break;\n case 'pageGap':\n case 'pageOutline':\n this.viewer.updateScrollBars();\n break;\n case 'zIndex':\n if (this.documentHelper.dialog) {\n this.documentHelper.dialog.zIndex = model.zIndex + 10;\n }\n if (this.documentHelper.dialog2) {\n this.documentHelper.dialog2.zIndex = model.zIndex;\n }\n break;\n case 'showComments':\n if (this.viewer && model.showComments !== oldProp.showComments) {\n this.documentHelper.showComments(model.showComments);\n }\n this.viewer.updateScrollBars();\n break;\n case 'enableRtl':\n this.localizeDialogs(model.enableRtl);\n break;\n case 'enableComment':\n if (this.viewer && this.showComments) {\n this.showComments = this.showComments ? this.enableComment : false;\n this.documentHelper.showComments(model.enableComment);\n }\n this.viewer.updateScrollBars();\n break;\n case 'showRevisions':\n if (this.isReadOnly || this.documentHelper.isDocumentProtected) {\n this.documentHelper.showRevisions(false);\n }\n else if (this.viewer) {\n this.documentHelper.showRevisions(model.showRevisions);\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentSettings':\n if (!isNullOrUndefined(model.documentSettings.compatibilityMode)) {\n var oldValue = oldProp.documentSettings.compatibilityMode;\n var newValue = model.documentSettings.compatibilityMode;\n if ((oldValue == \"Word2013\" && newValue != \"Word2013\") || (oldValue != \"Word2013\" && newValue == \"Word2013\")) {\n if (this.documentHelper.compatibilityMode !== newValue) {\n this.documentHelper.compatibilityMode = newValue;\n this.editor.layoutWholeDocument(true);\n }\n }\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentEditorSettings':\n if (!isNullOrUndefined(model.documentEditorSettings.enableOptimizedTextMeasuring)) {\n //Clears previously cached height information.\n this.documentHelper.heightInfoCollection = {};\n if (model.documentEditorSettings.enableOptimizedTextMeasuring) {\n this.textMeasureHelper = this.optimizedModule;\n }\n else {\n this.textMeasureHelper = this.regularModule;\n }\n }\n this.viewer.updateScrollBars();\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n this.resize();\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n this.resize();\n break;\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function (enableRtl) {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n if (!isNullOrUndefined(enableRtl)) {\n this.documentHelper.dialog.enableRtl = enableRtl;\n this.documentHelper.dialog2.enableRtl = enableRtl;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n, enableRtl);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.notesDialog(l10n, enableRtl);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n, enableRtl);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n, enableRtl);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n, enableRtl);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.contextMenuInstance.destroy();\n this.contextMenuModule.initContextMenu(l10n, enableRtl);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n, enableRtl);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n, enableRtl);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n, enableRtl);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n, enableRtl);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n, enableRtl);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n, enableRtl);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n, enableRtl);\n }\n if (this.commentReviewPane && this.commentReviewPane.parentPaneElement) {\n if (this.enableRtl) {\n classList(this.commentReviewPane.parentPaneElement, ['e-rtl'], []);\n }\n else {\n classList(this.commentReviewPane.parentPaneElement, [], ['e-rtl']);\n }\n }\n }\n };\n /**\n * Set the default character format for document editor\n *\n * @param {CharacterFormatProperties} characterFormat - Specifies the character format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = characterFormat;\n };\n /**\n * Set the default paragraph format for document editor\n *\n * @param {ParagraphFormatProperties} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n };\n /**\n * Set the default section format for document editor\n *\n * @param {SectionFormatProperties} sectionFormat - Specifies the section format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = sectionFormat;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n * @returns {string} - Returns the persisted data.\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.documentHelper.clearDocumentItems();\n }\n };\n /**\n * @private\n * @returns {HTMLElement} - Returns the document editor element.\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireContentChange = function () {\n if (this.enableLockAndEdit && this.collaborativeEditingModule) {\n this.collaborativeEditingModule.saveContent();\n }\n var eventArgs = { source: this };\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n if (this.enableLockAndEdit && this.enableEditor) {\n this.editor.enforceProtection('', false, true);\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (!this.documentHelper.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n var eventArgs = { source: this };\n // if (this.createdTriggered) {\n this.trigger(selectionChangeEvent, eventArgs);\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n var eventArgs = { source: this };\n this.trigger(zoomFactorChangeEvent, eventArgs);\n this.notify(internalZoomFactorChange, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireBeformFieldFill = function () {\n var eventArgs = {};\n this.trigger(beforeFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireAfterFormFieldFill = function () {\n var eventArgs = {};\n this.trigger(afterFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @param {ServiceFailureArgs} eventArgs - Specifies the event args.\n * @returns {void}\n */\n DocumentEditor.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.documentHelper.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1,\n source: this\n };\n this.trigger(viewChangeEvent, eventArgs);\n this.notify(internalviewChangeEvent, eventArgs);\n }\n }\n };\n /**\n * @private\n * @param {string} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuSelect = function (item) {\n var eventArgs = { id: item };\n this.trigger(customContextMenuSelectEvent, eventArgs);\n };\n /**\n * @private\n * @param {string[]} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuBeforeOpen = function (item) {\n var eventArgs = { ids: item };\n this.trigger(customContextMenuBeforeOpenEvent, eventArgs);\n };\n /**\n * Shows the Paragraph dialog\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n };\n /**\n * Shows the margin dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n };\n /**\n * Shows the Footnote dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showFootNotesDialog = function () {\n if (this.footNotesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.footNotesDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n *\n * @private\n * @param {WCharacterFormat} characterFormat - Specifies character format.\n * @returns {void}\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n };\n /**\n * Shows the cell option dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n };\n /**\n * Shows insert table dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n };\n /**\n * Shows the table of content dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n };\n /**\n * Shows the style dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n };\n /**\n * Shows the hyperlink dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n };\n /**\n * Shows the bookmark dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n };\n /**\n * Shows the styles dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n };\n /**\n * Shows the List dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n };\n /**\n * Shows the borders and shading dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n };\n /* eslint-disable */\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableLockAndEdit) {\n modules.push({\n member: 'CollaborativeEditing', args: [this]\n });\n }\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.documentHelper]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.documentHelper]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.documentHelper]\n });\n }\n }\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n modules.push({ member: 'Optimized', args: [this.documentHelper] });\n }\n else {\n DocumentEditor_1.Inject(Regular);\n modules.push({ member: 'Regular', args: [this.documentHelper] });\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.documentHelper]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.documentHelper]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.documentHelper]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFootnoteAndEndnoteDialog) {\n modules.push({\n member: 'FootNotesDialog', args: [this.documentHelper]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'StyleDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.documentHelper]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableSpellCheck) {\n modules.push({\n member: 'SpellChecker', args: [this.documentHelper]\n });\n modules.push({\n member: 'SpellCheckDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFormField) {\n modules.push({\n member: 'TextFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'DropDownFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'CheckBoxFormFieldDialog', args: [this]\n });\n }\n }\n return modules;\n };\n /* eslint-enable */\n // Public Implementation Starts\n /**\n * Opens the given Sfdt text.\n *\n * @param {string} sfdtText - Specifies the sfdt text.\n * @returns {void}\n */\n DocumentEditor.prototype.open = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer)) {\n this.showComments = false;\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.lists = [];\n this.documentHelper.abstractLists = [];\n this.documentHelper.styles = new WStyles();\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n if (this.isSpellCheck && !this.spellChecker.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = true;\n this.documentHelper.triggerSpellCheck = true;\n }\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText));\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n }\n }\n if (this.isSpellCheck && !this.spellChecker.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = false;\n this.documentHelper.triggerSpellCheck = false;\n }\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n *\n * @param {number} pageNumber - Specifies the page number.\n * @returns {void}\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.documentHelper.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enableFootnoteAndEndnoteDialog\n = this.enablePageSetupDialog = this.enableStyleDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = this.enableSpellCheck = this.enableComment\n = this.enableFormField = true;\n /* eslint-disable-next-line max-len */\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, NotesDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog, SpellChecker, SpellCheckDialog, CheckBoxFormFieldDialog, TextFormFieldDialog, DropDownFormFieldDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n *\n * @param {number} width - Specifies the width\n * @param {number} height - Specifies the hight\n * @returns {void}\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.documentHelper.updateViewerSize();\n }\n if (this.trackChangesPane.toolbar) {\n this.trackChangesPane.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * Get all form field names.\n *\n * @returns {string[]} - Returns form field names.\n */\n DocumentEditor.prototype.getFormFieldNames = function () {\n var formFieldNames = [];\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (formFields[i].formFieldData.name !== '') {\n formFieldNames.push(formFields[i].formFieldData.name);\n }\n }\n return formFieldNames;\n };\n /**\n * Get form field by name\n *\n * @param {string} name - Form field name.\n * @returns {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} - Returns form field info.\n */\n DocumentEditor.prototype.getFormFieldInfo = function (name) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[i].formFieldData.name === name) && (formFields[i].formFieldData.name !== '')) {\n return formFields[i].formFieldData.getFormFieldInfo();\n }\n }\n return undefined;\n };\n /**\n * Set form field.\n *\n * @param {string} name - Specifies the form field name\n * @param {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} formFieldInfo - Form Field info.\n * @returns {void}\n */\n DocumentEditor.prototype.setFormFieldInfo = function (name, formFieldInfo) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[i].formFieldData.name === name) && (formFields[i].formFieldData.name !== '')) {\n var currentField = formFields[i];\n if (this.selection) {\n this.selection.selectFieldInternal(currentField);\n if (this.editor) {\n this.editor.setFormField(currentField, formFieldInfo);\n }\n }\n return;\n }\n }\n };\n /**\n * Reset form field value to default.\n *\n * @param {string} name - Specifies the form field name\n * @returns {void}\n */\n DocumentEditor.prototype.resetFormFields = function (name) {\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (isNullOrUndefined(name) || name === formFields[i].formFieldData.name) {\n if (formFields[i].formFieldData instanceof TextFormField) {\n this.editor.updateFormField(formFields[i], formFields[i].formFieldData.defaultValue, true);\n }\n else if (formFields[i].formFieldData instanceof CheckBoxFormField) {\n /* eslint-disable-next-line max-len */\n this.editor.toggleCheckBoxFormField(formFields[i], true, formFields[i].formFieldData.defaultValue);\n }\n else if (formFields[i].formFieldData instanceof DropDownFormField) {\n this.editor.updateFormField(formFields[i], 0, true);\n }\n }\n }\n };\n /**\n * Import form field values.\n *\n * @param {FormFieldData[]} formData - Specifies the form field values.\n * @returns {void}\n */\n DocumentEditor.prototype.importFormData = function (formData) {\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formData.length; i++) {\n var formFieldData = formData[i];\n var fieldName = formFieldData.fieldName;\n for (var j = 0; j < formField.length; j++) {\n if (formField[j].formFieldData.name === fieldName) {\n if (formField[j].formFieldData instanceof CheckBoxFormField) {\n this.editor.toggleCheckBoxFormField(formField[j], true, formFieldData.value);\n }\n else if (formField[j].formFieldData instanceof TextFormField) {\n this.editor.updateFormField(formField[j], formFieldData.value);\n }\n else if (formField[j].formFieldData instanceof DropDownFormField) {\n this.editor.updateFormField(formField[j], formFieldData.value);\n }\n }\n }\n }\n };\n /**\n * Export form field values.\n *\n * @returns {FormFieldData[]} - Returns the form field data.\n */\n DocumentEditor.prototype.exportFormData = function () {\n var data = [];\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formField.length; i++) {\n if (formField[i].formFieldData.name !== '') {\n var formData = { fieldName: '', value: '' };\n formData.fieldName = formField[i].formFieldData.name;\n if (formField[i].formFieldData instanceof CheckBoxFormField) {\n formData.value = formField[i].formFieldData.checked;\n }\n else if (formField[i].formFieldData instanceof TextFormField) {\n var resultText = '';\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n resultText = this.editorModule.getFieldResultText(formField[i]);\n }\n else {\n resultText = formField[i].resultText;\n }\n var rex = new RegExp(this.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n formData.value = resultText;\n }\n else if (formField[i].formFieldData instanceof DropDownFormField) {\n formData.value = formField[i].formFieldData.selectedIndex;\n }\n data.push(formData);\n }\n }\n return data;\n };\n /**\n * Updated fields in document.\n * Currently cross reference field only supported.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.updateFields = function () {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var field = this.documentHelper.fields[i];\n var code = this.selection.getFieldCode(field);\n if (code.toLowerCase().trim().indexOf('ref ') === 0) {\n this.selection.updateRefField(field);\n }\n }\n };\n /**\n * Shifts the focus to the document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.documentHelper.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n *\n * @param {PageFitType} pageFitType - Default value of ‘pageFitType’ parameter is 'None'\n * @returns {void}\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Export the specified page as Image.\n *\n * @param {number} pageNumber - Specifies the page number starts from index `1`.\n * @param {number} format - Specifies the image format.\n * @returns {HTMLImageElement} - Returns the html image element.\n */\n DocumentEditor.prototype.exportAsImage = function (pageNumber, format) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n var mimeType = format === 'Png' ? 'image/png' : 'image/jpeg';\n return this.printModule.exportAsImage(this.documentHelper, pageNumber, mimeType);\n }\n return undefined;\n };\n /**\n * Prints the document.\n *\n * @param {Window} printWindow - Default value of 'printWindow' parameter is undefined.\n * @returns {void}\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n if (this.layoutType === 'Continuous') {\n this.documentHelper.isWebPrinting = true;\n this.viewer = new PageLayoutViewer(this);\n this.editor.layoutWholeDocument();\n this.printModule.print(this.documentHelper, printWindow);\n this.viewer = new WebLayoutViewer(this);\n this.editor.layoutWholeDocument();\n this.documentHelper.isWebPrinting = false;\n }\n else {\n this.printModule.print(this.documentHelper, printWindow);\n }\n }\n else {\n throw new Error('Invalid operation. Print is not enabled.');\n }\n };\n /**\n * Serialize the data to JSON string.\n *\n * @returns {string} - Returns the data as JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n throw new Error('Invalid operation. Sfdt export is not enabled.');\n }\n return json;\n };\n /**\n * Saves the document.\n *\n * @param {string} fileName - Specifies the file name.\n * @param {FormatType} formatType - Specifies the format type.\n * @returns {void}\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.documentHelper)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' && this.wordExportModule) {\n if (this.wordExportModule) {\n this.wordExportModule.save(this.documentHelper, fileName);\n }\n }\n else if (formatType === 'Txt' && this.textExportModule) {\n this.textExportModule.save(this.documentHelper, fileName);\n }\n else if (formatType === 'Sfdt' && this.enableSfdtExport && this.sfdtExportModule) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n /**\n * Saves the document as blob.\n *\n * @param {FormatType} formatType - Specifies the format type.\n * @returns {Promise} - Returns the document as blob.\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve) {\n if (formatType === 'Docx' && _this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.documentHelper));\n }\n else if (formatType === 'Txt' && _this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.documentHelper));\n }\n else if (formatType === 'Sfdt' && _this.enableSfdtExport && _this.sfdtExportModule) {\n resolve(_this.sfdtExportModule.saveAsBlob(_this.documentHelper));\n }\n });\n };\n /**\n * Opens a blank document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.openBlank = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n if (this.sectionFormat) {\n this.parser.parseSectionFormat(this.sectionFormat, section.sectionFormat);\n }\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n var sections = [];\n sections.push(section);\n /* eslint-disable-next-line max-len */\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.headersFooters.push(hfs);\n this.documentHelper.onDocumentChanged(sections);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.documentHelper.styles.findByName('Normal');\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n };\n /**\n * Gets the style names based on given style type.\n *\n * @param {StyleType} styleType - Specifies the style type.\n * @returns {string[]} - Returns the style names.\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n *\n * @param {StyleType} styleType - Specifies the style type.\n * @returns {Object[]} - Returns the Specifies styles.\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyles(styleType);\n }\n return [];\n };\n /* eslint-enable */\n /**\n * Gets the bookmarks.\n *\n * @returns {string[]} - Returns the bookmark collection.\n */\n DocumentEditor.prototype.getBookmarks = function () {\n var bookmarks = [];\n if (this.viewer) {\n bookmarks = this.documentHelper.getBookmarks(true);\n }\n return bookmarks;\n };\n /**\n * Shows the dialog.\n *\n * @param {DialogType} dialogType - Specifies the dialog type.\n * @returns {void}\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n case 'SpellCheck':\n this.showSpellCheckDialog();\n break;\n }\n };\n /**\n * Shows the options pane.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n };\n /**\n * Shows the restrict editing pane.\n *\n * @param {boolean} show Specifies to show or hide restrict editing pane.\n * @returns {void}\n */\n DocumentEditor.prototype.showRestrictEditingPane = function (show) {\n show = isNullOrUndefined(show) ? true : show;\n if (this.documentHelper && this.documentHelper.restrictEditingPane) {\n this.documentHelper.restrictEditingPane.showHideRestrictPane(show);\n }\n };\n /**\n * Shows the spell check dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showSpellCheckDialog = function () {\n if (this.spellCheckDialogModule && this.spellChecker) {\n var element = this.spellChecker.retriveText();\n if (!isNullOrUndefined(element)) {\n this.spellCheckDialogModule.show(element.text, element.element);\n }\n }\n };\n /**\n * Destroys all managed resources used by this object.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.destroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element = undefined;\n }\n this.findResultsList = [];\n this.findResultsList = undefined;\n this.documentHelper = undefined;\n };\n DocumentEditor.prototype.clearSpellCheck = function () {\n if (!isNullOrUndefined(this.spellChecker)) {\n if (!isNullOrUndefined(this.spellChecker.errorWordCollection)) {\n this.spellChecker.errorWordCollection.clear();\n }\n if (!isNullOrUndefined(this.spellChecker.uniqueWordsCollection)) {\n this.spellChecker.uniqueWordsCollection.clear();\n }\n }\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (this.commentReviewPane) {\n this.commentReviewPane.destroy();\n this.commentReviewPane = undefined;\n }\n if (this.trackChangesPane) {\n this.trackChangesPane.destroy();\n this.trackChangesPane = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.destroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.destroy();\n this.footNotesDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n if (this.spellCheckerModule) {\n this.spellCheckerModule.destroy();\n this.spellCheckerModule = undefined;\n }\n };\n var DocumentEditor_1;\n __decorate([\n Property('KeepSourceFormatting')\n ], DocumentEditor.prototype, \"defaultPasteOption\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditor.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditor.prototype, \"userColor\", void 0);\n __decorate([\n Property(20)\n ], DocumentEditor.prototype, \"pageGap\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"documentName\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditor.prototype, \"width\", void 0);\n __decorate([\n Property('200px')\n ], DocumentEditor.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditor.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFootnoteAndEndnoteDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableComment\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"enableFormField\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"acceptTab\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"useCtrlClickToFollowHyperlink\", void 0);\n __decorate([\n Property('#000000')\n ], DocumentEditor.prototype, \"pageOutline\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableCursorOnReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditor.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditor.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditor.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property([])\n ], DocumentEditor.prototype, \"headers\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showComments\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showRevisions\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"keyDown\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"searchResultsChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentBegin\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentEnd\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFileOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"afterFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeXmlHttpRequestSend\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n}(Component));\nexport { DocumentEditor };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor.\n */\nvar ServerActionSettings = /** @class */ (function (_super) {\n __extends(ServerActionSettings, _super);\n function ServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SystemClipboard')\n ], ServerActionSettings.prototype, \"systemClipboard\", void 0);\n __decorate([\n Property('SpellCheck')\n ], ServerActionSettings.prototype, \"spellCheck\", void 0);\n __decorate([\n Property('RestrictEditing')\n ], ServerActionSettings.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property('CanLock')\n ], ServerActionSettings.prototype, \"canLock\", void 0);\n __decorate([\n Property('GetPendingActions')\n ], ServerActionSettings.prototype, \"getPendingActions\", void 0);\n return ServerActionSettings;\n}(ChildProperty));\nexport { ServerActionSettings };\n/**\n * Form field settings.\n */\nvar FormFieldSettings = /** @class */ (function (_super) {\n __extends(FormFieldSettings, _super);\n function FormFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#cfcfcf')\n ], FormFieldSettings.prototype, \"shadingColor\", void 0);\n __decorate([\n Property(true)\n ], FormFieldSettings.prototype, \"applyShading\", void 0);\n __decorate([\n Property('#cccccc')\n ], FormFieldSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Popup')\n ], FormFieldSettings.prototype, \"formFillingMode\", void 0);\n __decorate([\n Property([])\n ], FormFieldSettings.prototype, \"formattingExceptions\", void 0);\n return FormFieldSettings;\n}(ChildProperty));\nexport { FormFieldSettings };\n/**\n * Collaborative editing settings.\n */\nvar CollaborativeEditingSettings = /** @class */ (function (_super) {\n __extends(CollaborativeEditingSettings, _super);\n function CollaborativeEditingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CollaborativeEditingSettings.prototype, \"roomName\", void 0);\n __decorate([\n Property('#22b24b')\n ], CollaborativeEditingSettings.prototype, \"editableRegionColor\", void 0);\n __decorate([\n Property('#f44336')\n ], CollaborativeEditingSettings.prototype, \"lockedRegionColor\", void 0);\n __decorate([\n Property(3000)\n ], CollaborativeEditingSettings.prototype, \"saveTimeout\", void 0);\n return CollaborativeEditingSettings;\n}(ChildProperty));\nexport { CollaborativeEditingSettings };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor Container.\n */\nvar ContainerServerActionSettings = /** @class */ (function (_super) {\n __extends(ContainerServerActionSettings, _super);\n function ContainerServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Import')\n ], ContainerServerActionSettings.prototype, \"import\", void 0);\n return ContainerServerActionSettings;\n}(ServerActionSettings));\nexport { ContainerServerActionSettings };\n","import { createElement, isNullOrUndefined, EventHandler, classList, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar as EJ2Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { showSpinner, hideSpinner, DialogUtility } from '@syncfusion/ej2-popups';\nimport { XmlHttpRequestHandler, beforePaneSwitchEvent, toolbarClickEvent, beforeFileOpenEvent } from '../../document-editor/base/index';\nimport { beforeXmlHttpRequestSend } from './../../index';\nvar TOOLBAR_ID = '_toolbar';\nvar NEW_ID = '_new';\nvar OPEN_ID = '_open';\nvar UNDO_ID = '_undo';\nvar REDO_ID = '_redo';\nvar INSERT_IMAGE_ID = '_image';\nvar INSERT_IMAGE_LOCAL_ID = '_image_local';\nvar INSERT_IMAGE_ONLINE_ID = '_image_url';\nvar INSERT_TABLE_ID = '_table';\nvar INSERT_LINK_ID = '_link';\nvar BOOKMARK_ID = '_bookmark';\nvar COMMENT_ID = '_comment';\nvar TRACK_ID = '_track';\nvar TABLE_OF_CONTENT_ID = '_toc';\nvar HEADER_ID = '_header';\nvar FOOTER_ID = '_footer';\nvar PAGE_SET_UP_ID = '_page_setup';\nvar PAGE_NUMBER_ID = '_page_number';\nvar BREAK_ID = '_break';\nvar FIND_ID = '_find';\nvar CLIPBOARD_ID = '_use_local_clipboard';\nvar RESTRICT_EDITING_ID = '_restrict_edit';\nvar PAGE_BREAK = '_page_break';\nvar SECTION_BREAK = '_section_break';\nvar READ_ONLY = '_read_only';\nvar PROTECTIONS = '_protections';\nvar FORM_FIELDS_ID = '_form_fields';\nvar UPDATE_FIELDS_ID = '_update_fields';\nvar TEXT_FORM = '_text_form';\nvar CHECKBOX = '_checkbox';\nvar DROPDOWN = '_dropdown';\nvar FOOTNOTE_ID = '_footnote';\nvar ENDNOTE_ID = '_endnote';\n/**\n * Toolbar Module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * @private\n * @param {DocumentEditorContainer} container - DocumentEditorContainer object.\n */\n function Toolbar(container) {\n /**\n * @private\n */\n this.isCommentEditing = false;\n this.container = container;\n this.importHandler = new XmlHttpRequestHandler();\n }\n Object.defineProperty(Toolbar.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number} itemIndex - Index of the toolbar items that need to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the toolbar item should be enabled or disabled. By default, `isEnable` is set to true.\n * @returns {void}\n */\n Toolbar.prototype.enableItems = function (itemIndex, isEnable) {\n this.toolbar.enableItems(itemIndex, isEnable);\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.initToolBar = function (items) {\n this.toolbarItems = items;\n this.renderToolBar();\n this.wireEvent();\n };\n Toolbar.prototype.renderToolBar = function () {\n if (isNullOrUndefined(this.container)) {\n return;\n }\n var toolbarContainer = this.container.toolbarContainer;\n var toolbarWrapper = createElement('div', { className: 'e-de-tlbr-wrapper' });\n var toolbarTarget = createElement('div', { className: 'e-de-toolbar' });\n this.initToolbarItems();\n toolbarWrapper.appendChild(toolbarTarget);\n toolbarContainer.appendChild(toolbarWrapper);\n // Show hide pane button initialization\n var propertiesPaneDiv = createElement('div', { className: 'e-de-ctnr-properties-pane-btn' });\n this.buttonElement = createElement('button', { attrs: { type: 'button' } });\n propertiesPaneDiv.appendChild(this.buttonElement);\n var cssClassName = 'e-tbar-btn e-tbtn-txt e-control e-btn e-de-showhide-btn';\n var iconCss = 'e-icons e-de-ctnr-showhide';\n if (this.container.enableRtl) {\n cssClassName += '-rtl';\n iconCss = 'e-icons e-de-ctnr-showhide e-de-flip';\n }\n this.propertiesPaneButton = new Button({\n cssClass: cssClassName,\n iconCss: iconCss\n });\n var locale = this.container.localObj;\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n this.propertiesPaneButton.appendTo(this.buttonElement);\n EventHandler.add(this.buttonElement, 'click', this.showHidePropertiesPane, this);\n toolbarContainer.appendChild(propertiesPaneDiv);\n this.toolbar.appendTo(toolbarTarget);\n this.initToolbarDropdown(toolbarTarget);\n };\n Toolbar.prototype.initToolbarDropdown = function (toolbarTarget) {\n var _this = this;\n if (this.container) {\n var locale = this.container.localObj;\n var id_1 = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Image') >= 0) {\n this.imgDropDwn = new DropDownButton({\n items: [\n {\n text: locale.getConstant('Upload from computer'), iconCss: 'e-icons e-de-ctnr-upload',\n id: id_1 + INSERT_IMAGE_LOCAL_ID\n }\n ],\n //,{ text: locale.getConstant('By URL'), iconCss: 'e-icons e-de-ctnr-link', id: id + INSERT_IMAGE_ONLINE_ID }],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.imgDropDwn.appendTo('#' + id_1 + INSERT_IMAGE_ID);\n }\n if (this.toolbarItems.indexOf('Break') >= 0) {\n this.breakDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Page Break'), iconCss: 'e-icons e-de-ctnr-page-break', id: id_1 + PAGE_BREAK },\n { text: locale.getConstant('Section Break'), iconCss: 'e-icons e-de-ctnr-section-break', id: id_1 + SECTION_BREAK }\n ],\n cssClass: 'e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.breakDropDwn.appendTo('#' + id_1 + BREAK_ID);\n }\n this.filePicker = createElement('input', {\n attrs: { type: 'file', accept: '.doc,.docx,.rtf,.txt,.htm,.html,.sfdt' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.filePicker);\n }\n this.imagePicker = createElement('input', {\n attrs: { type: 'file', accept: '.jpg,.jpeg,.png,.bmp,.svg' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.imagePicker);\n }\n if (this.toolbarItems.indexOf('LocalClipboard') >= 0) {\n this.toggleButton(id_1 + CLIPBOARD_ID, this.container.enableLocalPaste);\n }\n if (this.toolbarItems.indexOf('TrackChanges') >= 0) {\n this.toggleButton(id_1 + TRACK_ID, this.container.enableTrackChanges);\n }\n if (this.toolbarItems.indexOf('RestrictEditing') >= 0) {\n this.toggleButton(id_1 + RESTRICT_EDITING_ID, this.container.restrictEditing);\n var restrictIconCss = '';\n if (this.container.restrictEditing) {\n restrictIconCss = ' e-de-selected-item';\n }\n this.restrictDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Read only'), id: id_1 + READ_ONLY, iconCss: 'e-icons' + restrictIconCss },\n { text: locale.getConstant('Protections'), id: id_1 + PROTECTIONS, iconCss: 'e-icons' }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this),\n beforeItemRender: function (args) {\n _this.onBeforeRenderRestrictDropdown(args, id_1);\n }\n });\n this.restrictDropDwn.appendTo('#' + id_1 + RESTRICT_EDITING_ID);\n }\n if (this.toolbarItems.indexOf('FormFields') >= 0) {\n this.formFieldDropDown = new DropDownButton({\n items: [\n { text: locale.getConstant('Text Form'), iconCss: 'e-icons e-de-textform', id: id_1 + TEXT_FORM },\n { text: locale.getConstant('Check Box'), iconCss: 'e-icons e-de-checkbox-form', id: id_1 + CHECKBOX },\n { text: locale.getConstant('DropDown'), iconCss: 'e-icons e-de-dropdownform', id: id_1 + DROPDOWN }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.formFieldDropDown.appendTo('#' + id_1 + FORM_FIELDS_ID);\n }\n }\n };\n Toolbar.prototype.onBeforeRenderRestrictDropdown = function (args, id) {\n var selectedIcon = args.element.getElementsByClassName('e-menu-icon')[0];\n if (!isNullOrUndefined(selectedIcon)) {\n if (args.item.id === id + READ_ONLY) {\n this.toggleRestrictIcon(selectedIcon, this.container.restrictEditing);\n }\n if (args.item.id === id + PROTECTIONS) {\n var restrictPane = document.getElementsByClassName('e-de-restrict-pane')[0];\n if (!isNullOrUndefined(restrictPane)) {\n var toggleProtection = !(restrictPane.style.display === 'none');\n this.toggleRestrictIcon(selectedIcon, toggleProtection);\n }\n }\n }\n };\n Toolbar.prototype.toggleRestrictIcon = function (icon, toggle) {\n if (toggle) {\n icon.classList.add('e-de-selected-item');\n }\n else {\n icon.classList.remove('e-de-selected-item');\n }\n };\n Toolbar.prototype.showHidePropertiesPane = function () {\n var paneDiv = document.getElementsByClassName('e-de-ctnr-properties-pane-btn')[0];\n var locale = this.container.localObj;\n if (this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = true;\n paneDiv.classList.remove('e-de-pane-disable-clr');\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n classList(paneDiv, ['e-de-pane-enable-clr'], []);\n this.container.trigger(beforePaneSwitchEvent, { type: 'PropertiesPane' });\n }\n else if (this.container.previousContext.indexOf('Header') >= 0\n || this.container.previousContext.indexOf('Footer') >= 0) {\n this.container.showHeaderProperties = !this.container.showHeaderProperties;\n }\n else {\n this.container.showPropertiesPane = false;\n paneDiv.classList.remove('e-de-pane-enable-clr');\n this.buttonElement.title = locale.getConstant('Show properties pane');\n classList(paneDiv, ['e-de-pane-disable-clr'], []);\n }\n this.enableDisablePropertyPaneButton(this.container.showPropertiesPane);\n this.container.showPropertiesPaneOnSelection();\n this.documentEditor.focusIn();\n };\n Toolbar.prototype.onWrapText = function (text) {\n var content = '';\n var index = text.lastIndexOf(' ');\n if (index !== -1) {\n content = text.slice(0, index);\n text.slice(index);\n content += '
      ' + text.slice(index) + '
      ';\n }\n else {\n content = text;\n }\n return content;\n };\n Toolbar.prototype.wireEvent = function () {\n this.propertiesPaneButton.on('click', this.togglePropertiesPane.bind(this));\n EventHandler.add(this.filePicker, 'change', this.onFileChange, this);\n EventHandler.add(this.imagePicker, 'change', this.onImageChange, this);\n };\n Toolbar.prototype.initToolbarItems = function () {\n this.toolbar = new EJ2Toolbar({\n enableRtl: this.container.enableRtl,\n clicked: this.clickHandler.bind(this),\n items: this.getToolbarItems()\n });\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.reInitToolbarItems = function (items) {\n var _this = this;\n for (var i = 0; i < items.length; i++) {\n switch (items[i]) {\n case 'RestrictEditing':\n if (!isNullOrUndefined(this.restrictDropDwn)) {\n this.restrictDropDwn.destroy();\n }\n break;\n case 'Break':\n if (!isNullOrUndefined(this.breakDropDwn)) {\n this.breakDropDwn.destroy();\n }\n break;\n case 'Image':\n if (!isNullOrUndefined(this.imgDropDwn)) {\n this.imgDropDwn.destroy();\n }\n break;\n case 'FormFields':\n if (!isNullOrUndefined(this.formFieldDropDown)) {\n this.formFieldDropDown.destroy();\n }\n break;\n }\n }\n this.toolbarItems = items;\n var toolbarTarget = this.container.toolbarContainer;\n this.toolbar.items = this.getToolbarItems();\n /* eslint-disable @typescript-eslint/indent */\n this.toolbarTimer = setTimeout(function () {\n if (_this.toolbarTimer) {\n clearTimeout(_this.toolbarTimer);\n }\n _this.initToolbarDropdown(toolbarTarget);\n if (items.indexOf('Open') >= 0) {\n EventHandler.add(_this.filePicker, 'change', _this.onFileChange, _this);\n }\n if (items.indexOf('Image') >= 0) {\n EventHandler.add(_this.imagePicker, 'change', _this.onImageChange, _this);\n }\n }, 200);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.getToolbarItems = function () {\n var locale = this.container.localObj;\n var id = this.container.element.id + TOOLBAR_ID;\n var toolbarItems = [];\n var className;\n var tItem = this.toolbarItems;\n for (var i = 0; i < this.toolbarItems.length; i++) {\n if (i === 0) {\n className = 'e-de-toolbar-btn-start';\n }\n else if ((tItem[i + 1] === 'Separator') && (tItem[i - 1] === 'Separator')) {\n className = 'e-de-toolbar-btn';\n }\n else if (tItem[i + 1] === 'Separator') {\n className = 'e-de-toolbar-btn-last';\n }\n else if (tItem[i - 1] === 'Separator') {\n className = 'e-de-toolbar-btn-first';\n }\n else if (i === (this.toolbarItems.length - 1)) {\n className = 'e-de-toolbar-btn-end';\n }\n else {\n className = 'e-de-toolbar-btn-middle';\n }\n switch (tItem[i]) {\n case 'Separator':\n toolbarItems.push({\n type: 'Separator', cssClass: 'e-de-separator'\n });\n break;\n case 'New':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-new', tooltipText: locale.getConstant('Create a new document'),\n id: id + NEW_ID, text: locale.getConstant('New'), cssClass: className\n });\n break;\n case 'Open':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-open', tooltipText: locale.getConstant('Open a document'), id: id + OPEN_ID,\n text: locale.getConstant('Open'), cssClass: className\n });\n break;\n case 'Undo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-undo', tooltipText: locale.getConstant('Undo Tooltip'),\n id: id + UNDO_ID, text: locale.getConstant('Undo'), cssClass: className\n });\n break;\n case 'Redo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-redo', tooltipText: locale.getConstant('Redo Tooltip'),\n id: id + REDO_ID, text: locale.getConstant('Redo'), cssClass: className\n });\n break;\n case 'Comments':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-cmt-add',\n tooltipText: locale.getConstant('Show comments'),\n id: id + COMMENT_ID, text: locale.getConstant('Comments'), cssClass: className\n });\n break;\n case 'TrackChanges':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-track',\n tooltipText: locale.getConstant('Track Changes'),\n id: id + TRACK_ID, text: this.onWrapText(locale.getConstant('TrackChanges')), cssClass: className\n });\n break;\n case 'Image':\n toolbarItems.push({\n template: '',\n id: id + INSERT_IMAGE_ID\n });\n break;\n case 'Table':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-table', tooltipText: locale.getConstant('Insert a table into the document'),\n id: id + INSERT_TABLE_ID, text: locale.getConstant('Table'), cssClass: className\n });\n break;\n case 'Hyperlink':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-link',\n tooltipText: locale.getConstant('Create Hyperlink'),\n id: id + INSERT_LINK_ID, text: locale.getConstant('Link'), cssClass: className\n });\n break;\n case 'Bookmark':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-bookmark',\n tooltipText: locale.getConstant('Insert a bookmark in a specific place in this document'),\n id: id + BOOKMARK_ID, text: locale.getConstant('Bookmark'), cssClass: className\n });\n break;\n case 'TableOfContents':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-tableofcontent',\n tooltipText: locale.getConstant('Provide an overview of your document by adding a table of contents'),\n id: id + TABLE_OF_CONTENT_ID, text: this.onWrapText(locale.getConstant('Table of Contents')),\n cssClass: className\n });\n break;\n case 'Header':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-header', tooltipText: locale.getConstant('Add or edit the header'),\n id: id + HEADER_ID, text: locale.getConstant('Header'), cssClass: className\n });\n break;\n case 'Footer':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-footer', tooltipText: locale.getConstant('Add or edit the footer'),\n id: id + FOOTER_ID, text: locale.getConstant('Footer'), cssClass: className\n });\n break;\n case 'PageSetup':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-pagesetup', tooltipText: locale.getConstant('Open the page setup dialog'),\n id: id + PAGE_SET_UP_ID, text: this.onWrapText(locale.getConstant('Page Setup')),\n cssClass: className\n });\n break;\n case 'PageNumber':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-pagenumber', tooltipText: locale.getConstant('Add page numbers'),\n id: id + PAGE_NUMBER_ID, text: this.onWrapText(locale.getConstant('Page Number')),\n cssClass: className\n });\n break;\n case 'Break':\n toolbarItems.push({\n template: '',\n id: id + BREAK_ID\n });\n break;\n case 'Find':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-find', tooltipText: locale.getConstant('Find Text'),\n id: id + FIND_ID, text: locale.getConstant('Find'), cssClass: className\n });\n break;\n case 'LocalClipboard':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-paste',\n tooltipText: locale.getConstant('Toggle between the internal clipboard and system clipboard'),\n id: id + CLIPBOARD_ID, text: this.onWrapText(locale.getConstant('Local Clipboard')),\n cssClass: className\n });\n break;\n case 'RestrictEditing':\n toolbarItems.push({\n template: ''\n });\n break;\n case 'FormFields':\n toolbarItems.push({\n template: '',\n id: id + FORM_FIELDS_ID\n });\n break;\n case 'UpdateFields':\n toolbarItems.push({\n prefixIcon: 'e-de-update-field', tooltipText: locale.getConstant('Update cross reference fields'),\n id: id + UPDATE_FIELDS_ID, text: this.onWrapText(locale.getConstant('Update Fields')),\n cssClass: className + ' e-de-formfields'\n });\n break;\n case 'InsertFootnote':\n toolbarItems.push({\n prefixIcon: 'e-de-footnote', tooltipText: locale.getConstant('Footnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Footnote')), id: id + FOOTNOTE_ID,\n cssClass: className\n });\n break;\n case 'InsertEndnote':\n toolbarItems.push({\n prefixIcon: 'e-de-endnote', tooltipText: locale.getConstant('Endnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Endnote')), id: id + ENDNOTE_ID,\n cssClass: className\n });\n break;\n default:\n //Here we need to process the items\n toolbarItems.push(tItem[i]);\n break;\n }\n }\n return toolbarItems;\n };\n Toolbar.prototype.clickHandler = function (args) {\n var id = this.container.element.id + TOOLBAR_ID;\n switch (args.item.id) {\n case id + NEW_ID:\n this.container.documentEditor.openBlank();\n break;\n case id + OPEN_ID:\n this.filePicker.value = '';\n this.filePicker.click();\n break;\n case id + UNDO_ID:\n this.container.documentEditor.editorHistory.undo();\n break;\n case id + REDO_ID:\n this.container.documentEditor.editorHistory.redo();\n break;\n case id + INSERT_TABLE_ID:\n this.container.documentEditor.showDialog('Table');\n break;\n case id + INSERT_LINK_ID:\n this.container.documentEditor.showDialog('Hyperlink');\n break;\n case id + BOOKMARK_ID:\n this.container.documentEditor.showDialog('Bookmark');\n break;\n case id + COMMENT_ID:\n this.documentEditor.editor.isUserInsert = true;\n this.documentEditor.editor.insertComment('');\n this.documentEditor.editor.isUserInsert = false;\n break;\n case id + TRACK_ID:\n this.toggleTrackChangesInternal(args.item.id);\n break;\n case id + HEADER_ID:\n this.container.documentEditor.selection.goToHeader();\n this.container.statusBar.toggleWebLayout();\n break;\n case id + TABLE_OF_CONTENT_ID:\n this.onToc();\n break;\n case id + FOOTER_ID:\n this.container.documentEditor.selection.goToFooter();\n this.container.statusBar.toggleWebLayout();\n break;\n case id + PAGE_SET_UP_ID:\n this.container.documentEditor.showDialog('PageSetup');\n break;\n case id + PAGE_NUMBER_ID:\n this.container.documentEditor.editor.insertPageNumber();\n break;\n case id + FIND_ID:\n this.container.documentEditor.showOptionsPane();\n break;\n case id + CLIPBOARD_ID:\n this.toggleLocalPaste(args.item.id);\n break;\n case id + UPDATE_FIELDS_ID:\n this.documentEditor.updateFields();\n break;\n case id + FOOTNOTE_ID:\n this.documentEditor.editor.insertFootnote();\n break;\n case id + ENDNOTE_ID:\n this.documentEditor.editor.insertEndnote();\n break;\n default:\n this.container.trigger(toolbarClickEvent, args);\n break;\n }\n if (args.item.id !== id + FIND_ID && args.item.id !== id + INSERT_IMAGE_ID) {\n this.container.documentEditor.focusIn();\n }\n };\n Toolbar.prototype.toggleLocalPaste = function (id) {\n this.container.enableLocalPaste = !this.container.enableLocalPaste;\n this.toggleButton(id, this.container.enableLocalPaste);\n };\n Toolbar.prototype.toggleEditing = function () {\n this.container.restrictEditing = !this.container.restrictEditing;\n this.container.showPropertiesPane = !this.container.restrictEditing;\n };\n /**\n * @private\n * @param {boolean} enable - Enable/Disable restrictEditing changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleRestrictEditing = function (enable) {\n var restrictEditingId = this.container.element.id + TOOLBAR_ID + RESTRICT_EDITING_ID;\n var element = document.getElementById(restrictEditingId);\n if (element) {\n this.toggleButton(restrictEditingId, enable);\n }\n };\n Toolbar.prototype.toggleButton = function (id, toggle) {\n var element = document.getElementById(id);\n if (toggle) {\n classList(element, ['e-btn-toggle'], []);\n }\n else {\n classList(element, [], ['e-btn-toggle']);\n }\n };\n Toolbar.prototype.toggleTrackChangesInternal = function (id, enable) {\n if (!isNullOrUndefined(enable)) {\n this.container.enableTrackChanges = !enable;\n }\n this.container.enableTrackChanges = !this.container.enableTrackChanges;\n this.toggleButton(id, this.container.enableTrackChanges);\n };\n Toolbar.prototype.togglePropertiesPane = function () {\n this.container.showPropertiesPane = !this.container.showPropertiesPane;\n };\n Toolbar.prototype.onDropDownButtonSelect = function (args) {\n var _this = this;\n var parentId = this.container.element.id + TOOLBAR_ID;\n var id = args.item.id;\n if (id === parentId + PAGE_BREAK) {\n this.container.documentEditor.editorModule.insertPageBreak();\n }\n else if (id === parentId + SECTION_BREAK) {\n this.container.documentEditor.editorModule.insertSectionBreak();\n }\n else if (id === parentId + INSERT_IMAGE_LOCAL_ID) {\n this.imagePicker.value = '';\n this.imagePicker.click();\n }\n else if (id === parentId + INSERT_IMAGE_ONLINE_ID) {\n // Need to implement image dialog;\n }\n else if (id === parentId + READ_ONLY) {\n this.toggleEditing();\n }\n else if (id === parentId + PROTECTIONS) {\n this.documentEditor.documentHelper.restrictEditingPane.showHideRestrictPane(true);\n }\n else if (id === parentId + CHECKBOX) {\n this.documentEditor.editor.insertFormField('CheckBox');\n }\n else if (id === parentId + DROPDOWN) {\n this.documentEditor.editor.insertFormField('DropDown');\n }\n else if (id === parentId + TEXT_FORM) {\n this.documentEditor.editor.insertFormField('Text');\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Toolbar.prototype.onFileChange = function () {\n var _this = this;\n var file = this.filePicker.files[0];\n var filesize = file.size;\n var check;\n var eventArgs = { fileSize: filesize, isCanceled: check };\n this.documentEditor.trigger(beforeFileOpenEvent, eventArgs);\n if (eventArgs.isCanceled) {\n return;\n }\n if (file) {\n if (file.name.substr(file.name.lastIndexOf('.')) === '.sfdt') {\n var fileReader_1 = new FileReader();\n fileReader_1.onload = function () {\n _this.container.documentEditor.open(fileReader_1.result);\n };\n fileReader_1.readAsText(file);\n }\n else {\n this.convertToSfdt(file);\n }\n this.container.documentEditor.documentName = file.name.substr(0, file.name.lastIndexOf('.'));\n }\n };\n Toolbar.prototype.convertToSfdt = function (file) {\n showSpinner(this.container.containerTarget);\n this.importHandler.url = this.container.serviceUrl + this.container.serverActionSettings.import;\n this.importHandler.onSuccess = this.successHandler.bind(this);\n this.importHandler.onFailure = this.failureHandler.bind(this);\n this.importHandler.onError = this.failureHandler.bind(this);\n this.importHandler.customHeaders = this.container.headers;\n var httprequestEventArgs = { serverActionType: 'Import', headers: this.container.headers, timeout: 0, cancel: false, withCredentials: false };\n this.container.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n var formData = new FormData();\n formData.append('files', file);\n if (httprequestEventArgs.cancel) {\n hideSpinner(this.container.containerTarget);\n }\n else {\n this.importHandler.send(formData, httprequestEventArgs);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.failureHandler = function (args) {\n if (args.name === 'onError') {\n DialogUtility.alert({\n content: this.container.localObj.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true,\n position: { X: 'Center', Y: 'Center' }\n });\n }\n else {\n alert('Failed to load the file');\n this.documentEditor.fireServiceFailure(args);\n }\n hideSpinner(this.container.containerTarget);\n };\n Toolbar.prototype.successHandler = function (result) {\n this.container.documentEditor.open(result.data);\n hideSpinner(this.container.containerTarget);\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.onImageChange = function () {\n var _this = this;\n var file = this.imagePicker.files[0];\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.insertImage(fileReader.result);\n };\n fileReader.readAsDataURL(file);\n };\n Toolbar.prototype.insertImage = function (data) {\n var image = document.createElement('img');\n var container = this.container;\n image.addEventListener('load', function () {\n container.documentEditor.editor.insertImageInternal(data, true, this.width, this.height);\n });\n image.src = data;\n };\n Toolbar.prototype.enableDisableFormField = function (enable) {\n var ele = document.getElementById('container_toolbar_form_fields');\n if (!isNullOrUndefined(ele)) {\n this.toolbar.enableItems(ele.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable insert comment toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableInsertComment = function (enable) {\n this.isCommentEditing = !enable;\n var id = this.container.element.id + TOOLBAR_ID;\n var commentId = id + COMMENT_ID;\n var element = document.getElementById(commentId);\n if (!this.container.enableComment && element) {\n this.toolbar.removeItems(element.parentElement);\n }\n else if (element) {\n if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n this.documentEditor.documentHelper.isDocumentProtected)) {\n enable = this.documentEditor.documentHelper.isCommentOnlyMode || !this.documentEditor.isReadOnlyMode;\n }\n this.toolbar.enableItems(element.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable track changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleTrackChanges = function (enable) {\n var trackId = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n var element = document.getElementById(trackId);\n if (element) {\n this.toggleTrackChangesInternal(trackId, enable);\n }\n };\n // /**\n // * @private\n // */\n // public enableDisableTrackChanges(enable: boolean): void {\n // let id: string = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n // if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n // this.documentEditor.documentHelper.isDocumentProtected)) {\n // enable = false;\n // }\n // this.toggleTrackChanges(id, enable);\n // }\n /**\n * @private\n * @param {boolean} enable - Enable/Diable toolbar items.\n * @param {boolean} isProtectedContent - Define whether document is protected.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableToolBarItem = function (enable, isProtectedContent) {\n var id = this.container.element.id + TOOLBAR_ID;\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var itemId = item.id;\n if (itemId !== id + NEW_ID && itemId !== id + OPEN_ID && itemId !== id + FIND_ID &&\n itemId !== id + CLIPBOARD_ID && itemId !== id + RESTRICT_EDITING_ID\n && item.type !== 'Separator') {\n if (enable && this.isCommentEditing && itemId === id + COMMENT_ID) {\n continue;\n }\n if (itemId !== id + UNDO_ID && itemId !== id + REDO_ID && itemId !== id + INSERT_TABLE_ID &&\n itemId !== id + INSERT_LINK_ID && itemId !== id + BOOKMARK_ID && itemId !== id + COMMENT_ID &&\n itemId !== id + HEADER_ID && itemId !== id + TABLE_OF_CONTENT_ID && itemId !== id + FOOTER_ID &&\n itemId !== id + PAGE_SET_UP_ID && itemId !== id + PAGE_NUMBER_ID && itemId !== id + INSERT_IMAGE_ID\n && itemId !== id + FORM_FIELDS_ID && itemId !== id + BREAK_ID && itemId !== id + TRACK_ID\n && itemId !== id + FOOTNOTE_ID && itemId !== id + ENDNOTE_ID && itemId !== id + UPDATE_FIELDS_ID) {\n continue;\n }\n if (isProtectedContent && this.documentEditor.documentHelper.isFormFillProtectedMode && itemId === id + UPDATE_FIELDS_ID) {\n continue;\n }\n var element = document.getElementById(item.id);\n if (!isNullOrUndefined(element) && !isNullOrUndefined(element.parentElement)) {\n this.toolbar.enableItems(element.parentElement, enable);\n }\n }\n }\n if (!isNullOrUndefined(this.documentEditor)) {\n this.enableDisableFormField(!this.documentEditor.enableHeaderAndFooter && enable && !this.documentEditor.isReadOnlyMode);\n }\n if (this.documentEditor.selection.isinFootnote || this.documentEditor.selection.isinEndnote || this.documentEditor.enableHeaderAndFooter) {\n if (this.containsItem(id + ENDNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + ENDNOTE_ID).parentElement, false);\n }\n if (this.containsItem(id + FOOTNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + FOOTNOTE_ID).parentElement, false);\n }\n }\n if (!isProtectedContent || this.container.showPropertiesPane) {\n if (isProtectedContent) {\n enable = this.container.showPropertiesPane;\n }\n classList(this.propertiesPaneButton.element.parentElement, !enable ? ['e-de-overlay'] : [], !enable ? [] : ['e-de-overlay']);\n }\n var protectionType = this.documentEditor.documentHelper.protectionType;\n if (enable || (this.documentEditor.documentHelper.isDocumentProtected &&\n (protectionType === 'FormFieldsOnly' || protectionType === 'CommentsOnly'))) {\n this.enableDisableUndoRedo();\n }\n if (this.documentEditor.documentHelper.isTrackedOnlyMode) {\n this.toolbar.enableItems(document.getElementById(id + TRACK_ID).parentElement, false);\n }\n };\n Toolbar.prototype.containsItem = function (id) {\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.id === id) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Toolbar.prototype.enableDisableUndoRedo = function () {\n var id = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Undo') >= 0) {\n var undoElement = document.getElementById(id + UNDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(undoElement)) {\n this.toolbar.enableItems(undoElement.parentElement, this.container.documentEditor.editorHistory.canUndo());\n }\n }\n if (this.toolbarItems.indexOf('Redo') >= 0) {\n var redoElement = document.getElementById(id + REDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(redoElement)) {\n this.toolbar.enableItems(redoElement.parentElement, this.container.documentEditor.editorHistory.canRedo());\n }\n }\n };\n Toolbar.prototype.onToc = function () {\n if (this.container.previousContext === 'TableOfContents' && this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = false;\n this.documentEditor.focusIn();\n return;\n }\n if (this.container.headerFooterProperties.element.style.display === 'block') {\n this.documentEditor.selection.closeHeaderFooter();\n }\n this.enableDisablePropertyPaneButton(false);\n this.container.showProperties('toc');\n };\n /**\n * @private\n * @param {boolean} isShow - show/hide property pane.\n * @returns {void}\n */\n Toolbar.prototype.enableDisablePropertyPaneButton = function (isShow) {\n if (isShow) {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-enabled'], ['e-pane-disabled']);\n }\n else {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-disabled'], ['e-pane-enabled']);\n }\n };\n /**\n * @private\n * @returns { void }\n */\n Toolbar.prototype.destroy = function () {\n if (this.restrictDropDwn) {\n this.restrictDropDwn.destroy();\n this.restrictDropDwn = undefined;\n }\n if (this.imgDropDwn) {\n this.imgDropDwn.destroy();\n this.imgDropDwn = undefined;\n }\n if (this.breakDropDwn) {\n this.breakDropDwn.destroy();\n this.breakDropDwn = undefined;\n }\n if (this.formFieldDropDown) {\n this.formFieldDropDown.destroy();\n this.formFieldDropDown = undefined;\n }\n if (this.toolbar) {\n this.toolbar.destroy();\n this.toolbar = undefined;\n }\n if (this.propertiesPaneButton) {\n this.propertiesPaneButton.destroy();\n }\n this.propertiesPaneButton = undefined;\n this.container = undefined;\n this.toolbarItems = [];\n this.toolbarItems = undefined;\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","/**\n * Represents document editor header and footer.\n */\nimport { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * @private\n */\nvar HeaderFooterProperties = /** @class */ (function () {\n function HeaderFooterProperties(container, isRtl) {\n this.isHeaderTopApply = false;\n this.isFooterTopApply = false;\n this.container = container;\n this.isRtl = isRtl;\n this.initHeaderFooterPane();\n this.wireEvents();\n }\n Object.defineProperty(HeaderFooterProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeaderFooterProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable header footer pane.\n * @returns {void}\n */\n HeaderFooterProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n HeaderFooterProperties.prototype.initHeaderFooterPane = function () {\n this.initializeHeaderFooter();\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n HeaderFooterProperties.prototype.showHeaderFooterPane = function (isShow) {\n if (isShow) {\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n HeaderFooterProperties.prototype.initializeHeaderFooter = function () {\n var _this = this;\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var elementId = 'header_footer_properties';\n this.element = createElement('div', { id: this.documentEditor.element.id + elementId, className: 'e-de-prop-pane' });\n var headerDiv = this.createDivTemplate('_header_footer', this.element, 'padding-bottom:0');\n classList(headerDiv, ['e-de-cntr-pane-padding'], []);\n var headerLabel = createElement('label', { className: 'e-de-prop-header-label' });\n headerLabel.innerHTML = localObj.getConstant('Header And Footer');\n var closeButtonFloat;\n //let optionsLabelDivPadding: string;\n //let positionLabelDivPadding: string;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //optionsLabelDivPadding = 'padding-left: 14px';\n //positionLabelDivPadding = 'padding-left: 14px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //optionsLabelDivPadding = 'padding-right: 14px';\n //positionLabelDivPadding = 'padding-right: 14px;';\n }\n var closeIcon = createElement('span', {\n id: '_header_footer_close',\n className: 'e-de-ctnr-close e-de-close-icon e-icons',\n styles: 'display:inline-block;cursor:pointer;' + closeButtonFloat\n });\n closeIcon.addEventListener('click', function () {\n _this.onClose();\n });\n headerDiv.appendChild(headerLabel);\n headerDiv.appendChild(closeIcon);\n var optionsLabelDiv = this.createDivTemplate(elementId + '_options', this.element);\n classList(optionsLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var optionsLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n optionsLabel.innerHTML = localObj.getConstant('Options');\n optionsLabelDiv.appendChild(optionsLabel);\n var optionsDiv = this.createDivTemplate(elementId + '_optionsDiv', optionsLabelDiv);\n var firstPageDiv = this.createDivTemplate(elementId + '_firstPageDiv', optionsDiv);\n classList(firstPageDiv, ['e-de-hdr-ftr-frst-div'], []);\n var firstPage = createElement('input', { id: 'firstPage', className: 'e-de-prop-sub-label' });\n firstPageDiv.appendChild(firstPage);\n this.firstPage = new CheckBox({ label: localObj.getConstant('Different First Page'), change: this.changeFirstPageOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.firstPage.appendTo(firstPage);\n firstPageDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for first page'));\n var oddOrEvenDiv = this.createDivTemplate(elementId + '_oddOrEvenDiv', optionsDiv);\n var oddOrEven = createElement('input', { id: 'oddOrEven', className: 'e-de-sub-prop-label' });\n oddOrEvenDiv.appendChild(oddOrEven);\n this.oddOrEven = new CheckBox({ label: localObj.getConstant('Different Odd And Even Pages'), change: this.changeoddOrEvenOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.oddOrEven.appendTo(oddOrEven);\n oddOrEvenDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for odd and even pages'));\n // let autoFieldLabelDiv: HTMLElement = this.createDivTemplate(element + '_autoFieldLabelDiv', div, 'padding-top:10px;padding-left: 10px;');\n // let autoFieldLabel: HTMLElement = createElement('label', { className: 'e-de-header-prop-label', styles: 'height:20px;' });\n // autoFieldLabel.innerHTML = 'Insert Autofield';\n // autoFieldLabelDiv.appendChild(autoFieldLabel);\n // let autofieldDiv: HTMLElement = this.createDivTemplate(element + '_autofieldDiv', autoFieldLabelDiv, 'display:inline-flex;');\n // let pageNumberDiv: HTMLElement = this.createDivTemplate(element + '_pageNumberDiv', autofieldDiv, 'margin-right:8px;');\n // let pageNumber: HTMLInputElement = createElement('input', { id: 'pageNumber' }) as HTMLInputElement;\n // pageNumberDiv.appendChild(pageNumber);\n // this.pageNumber = new CheckBox({ label: 'Page Number', change: this.changePageNumber });\n // this.pageNumber.appendTo(pageNumber);\n // let pageCountDiv: HTMLElement = this.createDivTemplate(element + '_pageCountDiv', autofieldDiv);\n // let pageCount: HTMLInputElement = createElement('input', { id: 'pageCount' }) as HTMLInputElement;\n // pageCountDiv.appendChild(pageCount);\n // this.pageCount = new CheckBox({ label: 'Page Count', change: this.changePageCount });\n // this.pageCount.appendTo(pageCount);\n // let autoFieldLine: HTMLElement = createElement('div', { className: 'e-de-prop-separator-line', styles: 'margin-top:7px;' });\n // autoFieldLabelDiv.appendChild(autoFieldLine);\n var positionLabelDiv = this.createDivTemplate(elementId + '_positionLabelDiv', this.element);\n classList(positionLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var positionLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n positionLabel.innerHTML = localObj.getConstant('Position');\n positionLabelDiv.appendChild(positionLabel);\n var positionDiv = this.createDivTemplate(elementId + '_positionDiv', positionLabelDiv);\n //let width: string;\n //let headerFooterDivMargin: string;\n //if (!this.isRtl) {\n //width = 'width: 128px;';\n //headerFooterDivMargin = 'margin-right:8px;';\n //} else {\n //width = 'width: 150px;';\n //headerFooterDivMargin = 'margin-left:8px;';\n //}\n var headerTopDiv = this.createDivTemplate(elementId + '_headerTopDiv', positionDiv);\n classList(headerTopDiv, ['e-de-hdr-ftr-top-div'], []);\n var headerTopLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n headerTopLabel.innerHTML = localObj.getConstant('Header from Top');\n headerTopDiv.appendChild(headerTopLabel);\n var headerFromTop = createElement('input', { id: this.documentEditor.element.id + '_headerFromTop', className: 'e-de-prop-sub-label' });\n headerTopDiv.appendChild(headerFromTop);\n this.headerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.headerFromTop.appendTo(headerFromTop);\n this.headerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from top of the page to top of the header'));\n var footerBottomDiv = this.createDivTemplate(elementId + '_footerBottomDiv', positionDiv);\n var footerBottomLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n footerBottomLabel.innerHTML = localObj.getConstant('Footer from Bottom');\n footerBottomDiv.appendChild(footerBottomLabel);\n var footerFromTop = createElement('input', { id: this.documentEditor.element.id + '_footerFromTop', className: 'e-de-prop-sub-label' });\n footerBottomDiv.appendChild(footerFromTop);\n this.footerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.footerFromTop.appendTo(footerFromTop);\n this.footerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from bottom of the page to bottom of the footer'));\n };\n HeaderFooterProperties.prototype.createDivTemplate = function (id, parentDiv, style) {\n var divElement;\n if (style) {\n divElement = createElement('div', { id: id, styles: style });\n }\n else {\n divElement = createElement('div', { id: id });\n }\n parentDiv.appendChild(divElement);\n return divElement;\n };\n HeaderFooterProperties.prototype.wireEvents = function () {\n var _this = this;\n this.headerFromTop.element.addEventListener('click', function () {\n _this.isHeaderTopApply = true;\n });\n this.footerFromTop.element.addEventListener('click', function () {\n _this.isFooterTopApply = true;\n });\n this.headerFromTop.element.addEventListener('keydown', this.onHeaderValue.bind(this));\n this.footerFromTop.element.addEventListener('keydown', this.onFooterValue.bind(this));\n this.headerFromTop.element.addEventListener('blur', function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n });\n this.footerFromTop.element.addEventListener('blur', function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n });\n };\n HeaderFooterProperties.prototype.onClose = function () {\n this.container.showHeaderProperties = true;\n this.container.documentEditor.selection.closeHeaderFooter();\n };\n HeaderFooterProperties.prototype.changeFirstPageOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selection.sectionFormat.differentFirstPage = this.firstPage.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeoddOrEvenOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selection.sectionFormat.differentOddAndEvenPages = this.oddOrEven.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeHeaderValue = function () {\n if (!this.isHeaderTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var headerTop = this.headerFromTop.value;\n if (headerTop > this.headerFromTop.max) {\n headerTop = this.headerFromTop.max;\n }\n this.documentEditor.selection.sectionFormat.headerDistance = headerTop;\n }\n };\n HeaderFooterProperties.prototype.onHeaderValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.onFooterValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.changeFooterValue = function () {\n if (!this.isFooterTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var footerTop = this.footerFromTop.value;\n if (footerTop > this.footerFromTop.max) {\n footerTop = this.footerFromTop.max;\n }\n this.documentEditor.selection.sectionFormat.footerDistance = footerTop;\n }\n };\n HeaderFooterProperties.prototype.onSelectionChange = function () {\n this.headerFromTop.value = this.documentEditor.selection.sectionFormat.headerDistance;\n this.footerFromTop.value = this.documentEditor.selection.sectionFormat.footerDistance;\n if (this.documentEditor.selection.sectionFormat.differentFirstPage) {\n this.firstPage.checked = true;\n }\n else {\n this.firstPage.checked = false;\n }\n if (this.documentEditor.selection.sectionFormat.differentOddAndEvenPages) {\n this.oddOrEven.checked = true;\n }\n else {\n this.oddOrEven.checked = false;\n }\n };\n HeaderFooterProperties.prototype.destroy = function () {\n if (this.firstPage) {\n this.firstPage.destroy();\n }\n this.firstPage = undefined;\n if (this.oddOrEven) {\n this.oddOrEven.destroy();\n }\n this.oddOrEven = undefined;\n if (this.headerFromTop) {\n this.headerFromTop.destroy();\n this.headerFromTop = undefined;\n }\n if (this.footerFromTop) {\n this.footerFromTop.destroy();\n this.footerFromTop = undefined;\n }\n this.container = undefined;\n };\n return HeaderFooterProperties;\n}());\nexport { HeaderFooterProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * Image Property pane\n *\n * @private\n */\nvar ImageProperties = /** @class */ (function () {\n function ImageProperties(container, isRtl) {\n this.isWidthApply = false;\n this.isHeightApply = false;\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isMaintainAspectRatio = false;\n this.isRtl = isRtl;\n this.initializeImageProperties();\n }\n Object.defineProperty(ImageProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable image properties pane.\n * @returns {void}\n */\n ImageProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n ImageProperties.prototype.initializeImageProperties = function () {\n this.element = createElement('div', { id: this.elementId + '_imageProperties', className: 'e-de-prop-pane' });\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n this.initImageProp();\n this.wireEvents();\n };\n ImageProperties.prototype.initImageProp = function () {\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var imageDiv = createElement('div', { id: this.elementId + '_imageDiv', className: 'e-de-cntr-pane-padding', styles: 'border:0px' });\n this.element.appendChild(imageDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = localObj.getConstant('Image');\n imageDiv.appendChild(label);\n var outerDiv = createElement('div');\n imageDiv.appendChild(outerDiv);\n this.widthElement = this.createImagePropertiesDiv('_widthDiv', outerDiv, '_widthInput', localObj.getConstant('W'), localObj.getConstant('Width'));\n this.widthNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.widthNumericBox.appendTo(this.widthElement);\n this.heightElement = this.createImagePropertiesDiv('_heightDiv', outerDiv, '_heightInput', localObj.getConstant('H'), localObj.getConstant('Height'));\n this.heightNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.heightNumericBox.appendTo(this.heightElement);\n var aspectRatioDiv = createElement('div', { id: this.elementId + '_aspectRatioDiv' });\n aspectRatioDiv.setAttribute('title', localObj.getConstant('Aspect ratio'));\n outerDiv.appendChild(aspectRatioDiv);\n var aspectRatio = createElement('input', { id: this.elementId + '_aspectRatio', className: 'e-de-ctnr-prop-label' });\n aspectRatioDiv.appendChild(aspectRatio);\n this.aspectRatioBtn = new CheckBox({ label: localObj.getConstant('Aspect ratio'), enableRtl: this.isRtl }, aspectRatio);\n };\n /* eslint-disable-next-line max-len */\n ImageProperties.prototype.createImagePropertiesDiv = function (id, outerDiv, inputId, spanContent, tooltip) {\n var divElement = createElement('div', { id: this.elementId + id, styles: 'position: relative;width: 100%;', className: 'e-de-ctnr-segment' });\n divElement.setAttribute('title', tooltip);\n outerDiv.appendChild(divElement);\n var inputElement = createElement('input', { id: this.elementId + inputId, className: 'e-textbox', styles: 'width:100%;' });\n divElement.appendChild(inputElement);\n var spanElement = createElement('span', { className: 'e-de-img-prty-span' });\n spanElement.textContent = spanContent;\n divElement.appendChild(spanElement);\n return inputElement;\n };\n ImageProperties.prototype.wireEvents = function () {\n var _this = this;\n this.aspectRatioBtn.element.addEventListener('change', this.onAspectRatioBtnClick.bind(this));\n this.widthNumericBox.element.addEventListener('click', function () {\n _this.isWidthApply = true;\n });\n this.heightNumericBox.element.addEventListener('click', function () {\n _this.isHeightApply = true;\n });\n this.widthNumericBox.element.addEventListener('keydown', this.onImageWidth.bind(this));\n this.heightNumericBox.element.addEventListener('keydown', this.onImageHeight.bind(this));\n this.widthNumericBox.element.addEventListener('blur', function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n });\n this.heightNumericBox.element.addEventListener('blur', function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n });\n };\n ImageProperties.prototype.onImageWidth = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.onImageHeight = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.applyImageWidth = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n if (height > this.heightNumericBox.max) {\n height = this.heightNumericBox.max;\n }\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n var ratio = width / this.documentEditor.selection.imageFormat.width;\n var height = this.heightNumericBox.value * ratio;\n this.heightNumericBox.value = height;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.applyImageHeight = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var height = this.heightNumericBox.value;\n var ratio = height / this.documentEditor.selection.imageFormat.height;\n var width = this.widthNumericBox.value * ratio;\n this.widthNumericBox.value = width;\n if (!(width === null || height === null)) {\n this.documentEditor.selection.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.onAspectRatioBtnClick = function () {\n if (this.isMaintainAspectRatio) {\n this.isMaintainAspectRatio = false;\n }\n else {\n this.isMaintainAspectRatio = true;\n }\n };\n ImageProperties.prototype.showImageProperties = function (isShow) {\n if (this.element.style.display === 'block') {\n this.updateImageProperties();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n ImageProperties.prototype.updateImageProperties = function () {\n this.widthNumericBox.value = this.documentEditor.selection.imageFormat.width;\n this.heightNumericBox.value = this.documentEditor.selection.imageFormat.height;\n };\n ImageProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.widthNumericBox) {\n this.widthNumericBox.destroy();\n }\n this.widthNumericBox = undefined;\n if (this.heightNumericBox) {\n this.heightNumericBox.destroy();\n }\n this.heightNumericBox = undefined;\n if (this.aspectRatioBtn) {\n this.aspectRatioBtn.destroy();\n }\n this.aspectRatioBtn = undefined;\n };\n return ImageProperties;\n}());\nexport { ImageProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * TOC Properties pane\n *\n * @private\n */\nvar TocProperties = /** @class */ (function () {\n function TocProperties(container, isRtl) {\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isRtl = isRtl;\n this.initializeTocPane();\n }\n Object.defineProperty(TocProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TocProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable table of content pane.\n * @returns {void}\n */\n TocProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TocProperties.prototype.initializeTocPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.element = createElement('div', { id: this.elementId + '_tocProperties', className: 'e-de-prop-pane' });\n var container = createElement('div', { className: 'e-de-cntr-pane-padding e-de-prop-separator-line' });\n this.tocHeaderDiv(container);\n this.initTemplates(container);\n container = createElement('div', { className: 'e-de-cntr-pane-padding' });\n this.tocOptionsDiv(container);\n this.contentStylesDropdown(container);\n this.checkboxContent(container);\n this.buttonDiv(container);\n this.wireEvents();\n this.updateTocProperties();\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n TocProperties.prototype.updateTocProperties = function () {\n this.rightalignPageNumber.checked = true;\n this.showPageNumber.checked = true;\n this.hyperlink.checked = true;\n };\n TocProperties.prototype.wireEvents = function () {\n var _this = this;\n this.cancelBtn.element.addEventListener('click', function () {\n _this.onClose();\n });\n this.updateBtn.element.addEventListener('click', this.onInsertToc.bind(this));\n this.closeButton.addEventListener('click', function () {\n _this.onClose();\n });\n };\n TocProperties.prototype.onClose = function () {\n if (this.container.showPropertiesPane\n && this.container.previousContext !== 'TableOfContents') {\n this.container.showPropertiesPaneOnSelection();\n }\n else {\n this.showTocPane(false);\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.container.showPropertiesPane = false;\n }\n };\n TocProperties.prototype.tocHeaderDiv = function (container) {\n var closeButtonFloat;\n //let headerDivMargin: string;\n var closeButtonMargin;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //headerDivMargin = 'margin-left:5.5px;';\n closeButtonMargin = 'margin-right:7px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //headerDivMargin = 'margin-right:5.5px;';\n closeButtonMargin = 'margin-left:7px;';\n }\n var headerDiv = createElement('div', {\n id: this.elementId + 'toc_id',\n styles: 'display: block;'\n });\n container.appendChild(headerDiv);\n this.element.appendChild(container);\n var title = createElement('label', {\n className: 'e-de-ctnr-prop-label'\n });\n title.textContent = this.localObj.getConstant('Table of Contents');\n headerDiv.appendChild(title);\n this.closeButton = createElement('span', {\n className: 'e-de-ctnr-close e-icons',\n styles: 'cursor: pointer;display:inline-block;color: #4A4A4A;' + closeButtonFloat + closeButtonMargin\n });\n headerDiv.appendChild(this.closeButton);\n };\n TocProperties.prototype.initTemplates = function (container) {\n this.template1(container);\n // let div: HTMLElement = createElement('div', { styles: 'display:block;border-top: 1px solid #E0E0E0;' }); this.element.appendChild(div);\n };\n TocProperties.prototype.template1 = function (container) {\n this.template1Div = createElement('div', {\n className: 'e-de-toc-template1'\n });\n if (this.isRtl) {\n this.template1Div.classList.add('e-de-rtl');\n }\n container.appendChild(this.template1Div);\n var templateContent1 = createElement('div', {\n className: 'e-de-toc-template1-content1'\n });\n templateContent1.textContent = this.localObj.getConstant('HEADING - - - - 1');\n this.template1Div.appendChild(templateContent1);\n var templateContent2 = createElement('div', {\n className: 'e-de-toc-template1-content2'\n });\n templateContent2.textContent = this.localObj.getConstant('HEADING - - - - 2');\n this.template1Div.appendChild(templateContent2);\n var templateContent3 = createElement('div', {\n className: 'e-de-toc-template1-content3'\n });\n templateContent3.textContent = this.localObj.getConstant('HEADING - - - - 3');\n this.template1Div.appendChild(templateContent3);\n };\n TocProperties.prototype.tocOptionsDiv = function (container) {\n var optionsDiv = createElement('div');\n container.appendChild(optionsDiv);\n this.element.appendChild(container);\n if (this.isRtl) {\n optionsDiv.classList.add('e-de-rtl');\n }\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = this.localObj.getConstant('Options');\n optionsDiv.appendChild(label);\n };\n /* eslint-disable-next-line max-len */\n TocProperties.prototype.createDropDownButton = function (id, parentDiv, iconCss, content, selectedIndex) {\n var buttonElement = createElement('input', { id: id });\n parentDiv.appendChild(buttonElement);\n var dropDownBtn = new DropDownList({ index: selectedIndex, dataSource: content, popupHeight: '150px', cssClass: 'e-de-prop-font-button' }, buttonElement);\n return dropDownBtn;\n };\n /* eslint-disable */\n TocProperties.prototype.contentStylesDropdown = function (container) {\n var _this = this;\n var contentStyleElementMargin;\n if (!this.isRtl) {\n contentStyleElementMargin = 'margin-left:5.5px;';\n }\n else {\n contentStyleElementMargin = 'margin-right:5.5px;';\n }\n var contentStyleElement = createElement('div', { id: 'contentstyle_div' });\n contentStyleElement.setAttribute('title', this.localObj.getConstant('Number of heading or outline levels to be shown in table of contents'));\n container.appendChild(contentStyleElement);\n // let items: ItemModel[] = [{ text: '___________', id: 'solid' }];\n // this.borderStyle = this.createDropDownButton(\n // this.elementId + '_borderStyleDiv',\n // 'width:120px;height:28px;margin-top:8px', contentStyleElement, 'e-de-icon-stroke-size', 'Solid', items\n // );\n var labelMargin;\n if (!this.isRtl) {\n labelMargin = 'margin-right:8px;';\n }\n else {\n labelMargin = 'margin-left:8px';\n }\n var label = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n label.textContent = this.localObj.getConstant('Levels');\n contentStyleElement.appendChild(label);\n container.appendChild(contentStyleElement);\n var dataSource = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.borderLevelStyle = this.createDropDownButton(this.elementId + '_borderLevelDiv', contentStyleElement, '', dataSource, 2);\n this.borderLevelStyle.change = function (args) {\n _this.borderLevelStyle.value = args.item.value;\n };\n container.appendChild(contentStyleElement);\n };\n TocProperties.prototype.checkboxContent = function (container) {\n var checkboxElementMargin;\n if (!this.isRtl) {\n checkboxElementMargin = 'margin-left:5.5px;';\n }\n else {\n checkboxElementMargin = 'margin-right:5.5px;';\n }\n var checkboxElement = createElement('div', { id: 'toc_checkboxDiv', styles: 'margin-bottom:36px;' });\n container.appendChild(checkboxElement);\n var showPageNumberDiv = createElement('div', { className: 'e-de-toc-checkbox1' });\n showPageNumberDiv.setAttribute('title', this.localObj.getConstant('Show page numbers in table of contents'));\n checkboxElement.appendChild(showPageNumberDiv);\n var showpagenumberCheckboxElement = createElement('input', { id: 'showpagenumber', styles: 'width:12px;height:12px;margin-bottom:8px', className: 'e-de-prop-sub-label' });\n showPageNumberDiv.appendChild(showpagenumberCheckboxElement);\n this.showPageNumber = new CheckBox({\n label: this.localObj.getConstant('Show page numbers'),\n enableRtl: this.isRtl\n });\n this.showPageNumber.appendTo(showpagenumberCheckboxElement);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-checkbox2' });\n rightAlignDiv.setAttribute('title', this.localObj.getConstant('Right align page numbers in table of contents'));\n checkboxElement.appendChild(rightAlignDiv);\n var rightalignpagenumberCheckboxElement = createElement('input', { id: 'rightalignpagenumber', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n rightAlignDiv.appendChild(rightalignpagenumberCheckboxElement);\n this.rightalignPageNumber = new CheckBox({\n label: this.localObj.getConstant('Right align page numbers'),\n enableRtl: this.isRtl\n });\n this.rightalignPageNumber.appendTo(rightalignpagenumberCheckboxElement);\n var hyperlinkDiv = createElement('div', { className: 'e-de-toc-checkbox3' });\n hyperlinkDiv.setAttribute('title', this.localObj.getConstant('Use hyperlinks instead of page numbers'));\n checkboxElement.appendChild(hyperlinkDiv);\n var hyperlinkCheckboxElement = createElement('input', { id: 'hyperlinkdiv', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n hyperlinkDiv.appendChild(hyperlinkCheckboxElement);\n this.hyperlink = new CheckBox({\n label: this.localObj.getConstant('Use hyperlinks'),\n enableRtl: this.isRtl\n });\n this.hyperlink.appendTo(hyperlinkCheckboxElement);\n };\n TocProperties.prototype.buttonDiv = function (container) {\n var footerElementFloat;\n if (!this.isRtl) {\n footerElementFloat = 'float:right';\n }\n else {\n footerElementFloat = 'float:left';\n }\n var footerElement = createElement('div', { id: 'footerDiv', styles: footerElementFloat });\n container.appendChild(footerElement);\n var updatebuttoncontentStyleElement = createElement('button', {\n id: 'footerupdatebuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(updatebuttoncontentStyleElement);\n this.updateBtn = new Button({\n content: this.localObj.getConstant('Update'), cssClass: 'btn-update', isPrimary: true\n });\n this.updateBtn.appendTo(updatebuttoncontentStyleElement);\n var cancelbuttoncontentStyleElement = createElement('button', {\n id: 'footercancelbuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(cancelbuttoncontentStyleElement);\n this.cancelBtn = new Button({\n content: this.localObj.getConstant('Cancel'), cssClass: this.isRtl ? 'e-de-btn-cancel-rtl' : 'e-de-btn-cancel'\n });\n this.cancelBtn.appendTo(cancelbuttoncontentStyleElement);\n };\n TocProperties.prototype.showTocPane = function (isShow, previousContextType) {\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.updateBtn.content = this.documentEditor.selection.contextType === 'TableOfContents' ? this.localObj.getConstant('Update') : this.localObj.getConstant('Insert');\n this.prevContext = this.documentEditor.selection.contextType;\n this.documentEditor.resize();\n if (isShow) {\n this.updateBtn.element.focus();\n }\n };\n TocProperties.prototype.onInsertToc = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: parseInt(this.borderLevelStyle.value, 0),\n includeHyperlink: this.hyperlink.checked,\n includePageNumber: this.showPageNumber.checked,\n rightAlign: this.rightalignPageNumber.checked\n };\n if (tocSettings.rightAlign) {\n tocSettings.tabLeader = 'Dot';\n }\n this.documentEditor.editor.insertTableOfContents(tocSettings);\n };\n TocProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.showPageNumber) {\n this.showPageNumber.destroy();\n this.showPageNumber = undefined;\n }\n if (this.rightalignPageNumber) {\n this.rightalignPageNumber.destroy();\n this.rightalignPageNumber = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderLevelStyle) {\n this.borderLevelStyle.destroy();\n this.borderLevelStyle = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n }\n this.hyperlink = undefined;\n if (this.updateBtn) {\n this.updateBtn.destroy();\n }\n this.updateBtn = undefined;\n if (this.cancelBtn) {\n this.cancelBtn.destroy();\n }\n this.cancelBtn = undefined;\n };\n return TocProperties;\n}());\nexport { TocProperties };\n","/* eslint-disable */\nimport { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { Query } from '@syncfusion/ej2-data';\n/**\n * Text Properties\n *\n * @private\n */\nvar Text = /** @class */ (function () {\n /**\n * Initialize text properties.\n *\n * @param {DocumentEditorContainer} container - DocumentEditorContainer instance.\n * @param {boolean} isRtl - Specifies the RTL layout.\n */\n function Text(container, isRtl) {\n var _this = this;\n this.isRetrieving = false;\n this.appliedHighlightColor = 'rgb(255, 255, 0)';\n this.createChangecase = function (container) {\n var items = [{\n text: _this.localObj.getConstant('UPPERCASE'), id: 'uppercase'\n }];\n _this.changeCaseDropdown = new DropDownButton({\n items: items,\n iconCss: 'e-icons e-de-ctnr-change-case',\n enableRtl: _this.isRtl\n });\n var changeCaseContainer = createElement('div', {\n id: container.id + '_changeCase', className: 'e-de-ctnr-group-btn'\n });\n var buttonElement = createElement('button', {\n id: changeCaseContainer.id + '_dropdownBtn',\n attrs: { type: 'button' }\n });\n changeCaseContainer.appendChild(buttonElement);\n container.appendChild(changeCaseContainer);\n _this.changeCaseDropdown.appendTo(buttonElement);\n };\n this.changeCase = function (args) {\n if (_this.isRetrieving) {\n return;\n }\n var text = args.item.id;\n switch (text) {\n case 'uppercase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editor) {\n _this.documentEditor.editor.changeCase('Uppercase');\n }\n break;\n default:\n break;\n }\n };\n this.container = container;\n this.isRtl = isRtl;\n }\n Object.defineProperty(Text.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Text.prototype.initializeTextPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var textDiv = this.createDiv(element + '_text', wholeDiv);\n classList(textDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var fontDiv = this.createDiv(element + '_sizeStyle', textDiv, 'display:inline-flex;');\n classList(fontDiv, ['e-de-ctnr-segment'], []);\n if (isRtl) {\n classList(fontDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var fontFamilyDiv = this.createDiv(element + '_fontFamilyDiv', fontDiv);\n var fontFamily = createElement('input', {\n id: element + '_fontFamily', className: 'e-prop-font-style'\n });\n fontFamilyDiv.appendChild(fontFamily);\n classList(fontFamilyDiv, ['e-de-panel-left-width'], []);\n this.createDropDownListForFamily(fontFamily);\n var fontSizeDiv = this.createDiv(element + '_fontSizeDiv', fontDiv);\n var divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var fontSize = createElement('input', {\n id: element + '_fontSize', innerHTML: 'type:number', className: 'e-prop-font-style'\n });\n fontSizeDiv.appendChild(fontSize);\n classList(fontSizeDiv, ['e-de-panel-right-width'], []);\n this.createDropDownListForSize(fontSize);\n var propertiesDiv = createElement('div', {\n id: element + '_properties', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n textDiv.appendChild(propertiesDiv);\n var leftDiv = createElement('div', {\n id: element + '_leftDiv', className: divClassName, styles: 'display:inline-flex;'\n });\n propertiesDiv.appendChild(leftDiv);\n this.bold = this.createButtonTemplate(element + '_bold', 'e-de-ctnr-bold e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Bold Tooltip');\n this.italic = this.createButtonTemplate(element + '_italic', 'e-de-ctnr-italic e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Italic Tooltip');\n this.underline = this.createButtonTemplate(element + '_underline', 'e-de-ctnr-underline e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Underline Tooltip');\n this.strikethrough = this.createButtonTemplate(element + '_strikethrough', 'e-de-ctnr-strikethrough e-icons', leftDiv, 'e-de-prop-font-last-button', '40.5', 'Strikethrough');\n divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var rightDiv = createElement('div', { id: element + '_rightDiv', className: divClassName, styles: 'display:inline-flex;' });\n propertiesDiv.appendChild(rightDiv);\n this.superscript = this.createButtonTemplate(element + '_superscript', 'e-de-ctnr-superscript e-icons', rightDiv, 'e-de-prop-font-button', '38.5', 'Superscript Tooltip');\n this.subscript = this.createButtonTemplate(element + '_subscript', 'e-de-ctnr-subscript e-icons', rightDiv, 'e-de-prop-font-last-button', '38.5', 'Subscript Tooltip');\n var colorDiv = createElement('div', {\n id: element + '_colorDiv', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var leftDiv2 = createElement('div', { id: element + '_color', className: 'e-de-font-clr-picker e-de-ctnr-group-btn', styles: 'display:inline-flex;' });\n if (isRtl) {\n classList(leftDiv2, ['e-rtl'], []);\n }\n colorDiv.appendChild(leftDiv2);\n textDiv.appendChild(colorDiv);\n this.fontColor = this.createFontColorPicker(element + '_textColor', 40.5, leftDiv2, this.localObj.getConstant('Font color'));\n classList(leftDiv2.firstElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-fontcolor', 'e-icons'], ['e-caret']);\n this.initializeHighlightColorElement();\n this.highlightColor = this.createHighlightColorSplitButton(element + '_highlightColor', 34.5, leftDiv2, this.localObj.getConstant('Text highlight color'));\n classList(this.highlightColor.element.nextElementSibling.firstElementChild, ['e-de-ctnr-highlight', 'e-icons'], ['e-caret']);\n this.highlightColorInputElement = this.highlightColor.element.firstChild;\n this.clearFormat = this.createButtonTemplate(element + '_clearFormat', 'e-de-ctnr-clearall e-icons', leftDiv2, 'e-de-prop-font-last-button', '40.5', 'Clear all formatting');\n var rightDiv2 = createElement('div', {\n id: element + '_rightDiv2', className: divClassName.replace('e-btn-group', ''), styles: 'display:inline-flex;'\n });\n if (isRtl) {\n classList(rightDiv2, ['e-rtl'], []);\n }\n rightDiv2.setAttribute('title', this.container.localObj.getConstant('Change case Tooltip'));\n textDiv.appendChild(rightDiv2);\n this.createChangecase(rightDiv2);\n };\n Text.prototype.createHighlightColorSplitButton = function (id, width, divElement, toolTipText) {\n var _this = this;\n var buttonElement = createElement('button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.padding = '1px';\n // buttonElement.style.height = 30 + 'px';\n divElement.appendChild(buttonElement);\n var hgltSplitObj = new SplitButton({\n cssClass: 'e-de-btn-hghlclr',\n iconCss: 'e-de-ctnr-hglt-color',\n /* eslint-disable-next-line max-len */\n target: this.highlightColorElement, close: this.closePopup.bind(this), beforeOpen: this.openPopup.bind(this), enableRtl: this.isRtl\n });\n hgltSplitObj.appendTo(buttonElement);\n hgltSplitObj.click = function () {\n _this.applyHighlightColor(_this.highlightColorInputElement.style.backgroundColor);\n };\n hgltSplitObj.element.firstChild.style.backgroundColor = 'rgb(255, 255, 0)';\n hgltSplitObj.element.parentElement.setAttribute('title', toolTipText);\n return hgltSplitObj;\n };\n Text.prototype.openPopup = function () {\n this.highlightColorElement.style.display = 'block';\n };\n Text.prototype.closePopup = function () {\n this.highlightColorElement.style.display = 'none';\n };\n Text.prototype.initializeHighlightColorElement = function () {\n this.highlightColorElement = createElement('div', {\n styles: 'display:none;width:157px',\n className: 'e-de-cntr-highlight-pane'\n });\n var yellowDiv = this.createHightlighColorPickerDiv('#ffff00', 'yellowDiv');\n var brightGreenDiv = this.createHightlighColorPickerDiv('#00ff00', 'brightGreenDiv');\n var turquoiseDiv = this.createHightlighColorPickerDiv('#00ffff', 'turquoiseDiv');\n var hotPinkDiv = this.createHightlighColorPickerDiv('#ff00ff', 'hotPinkDiv');\n var blueDiv = this.createHightlighColorPickerDiv('#0000ff', 'blueDiv');\n var redDiv = this.createHightlighColorPickerDiv('#ff0000', 'redDiv');\n var darkBlueDiv = this.createHightlighColorPickerDiv('#000080', 'darkBlueDiv');\n var tealDiv = this.createHightlighColorPickerDiv('#008080', 'tealDiv');\n var greenDiv = this.createHightlighColorPickerDiv('#008000', 'greenDiv');\n var violetDiv = this.createHightlighColorPickerDiv('#800080', 'violetDiv');\n var darkRedDiv = this.createHightlighColorPickerDiv('#800000', 'darkRedDiv');\n var darkYellowDiv = this.createHightlighColorPickerDiv('#808000', 'darkYellowDiv');\n var gray50Div = this.createHightlighColorPickerDiv('#808080', 'gray50Div');\n var gray25Div = this.createHightlighColorPickerDiv('#c0c0c0', 'gray25Div');\n var blackDiv = this.createHightlighColorPickerDiv('#000000', 'blackDiv');\n var nocolor = createElement('div', { className: 'e-hglt-no-color' });\n this.highlightColorElement.appendChild(nocolor);\n var nocolorDiv = createElement('div', { styles: 'width:24px;height:24px;background-color:#ffffff;margin:3px;', id: 'noColorDiv' });\n nocolor.appendChild(nocolorDiv);\n var nocolorDivValue = createElement('div', { innerHTML: this.localObj.getConstant('No color'), className: 'e-de-ctnr-hglt-no-color' });\n nocolorDiv.appendChild(nocolorDivValue);\n yellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n brightGreenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n turquoiseDiv.addEventListener('click', this.onHighLightColor.bind(this));\n hotPinkDiv.addEventListener('click', this.onHighLightColor.bind(this));\n blueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n redDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkBlueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n tealDiv.addEventListener('click', this.onHighLightColor.bind(this));\n greenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n violetDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkRedDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkYellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n gray50Div.addEventListener('click', this.onHighLightColor.bind(this));\n gray25Div.addEventListener('click', this.onHighLightColor.bind(this));\n blackDiv.addEventListener('click', this.onHighLightColor.bind(this));\n nocolor.addEventListener('click', this.onHighLightColor.bind(this));\n };\n Text.prototype.createHightlighColorPickerDiv = function (backgroundColor, id) {\n var colorDiv = createElement('div', { className: 'e-de-ctnr-hglt-btn', id: id });\n colorDiv.style.backgroundColor = backgroundColor;\n this.highlightColorElement.appendChild(colorDiv);\n return colorDiv;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Text.prototype.onHighLightColor = function (event) {\n if (this.documentEditor.selection) {\n this.applyHighlightColor(event.currentTarget.style.backgroundColor);\n this.highlightColor.toggle();\n }\n };\n Text.prototype.applyHighlightColorAsBackground = function (color) {\n this.removeSelectedColorDiv();\n if (color === 'NoColor') {\n this.highlightColorElement.querySelector('#noColorDiv').classList.add('e-color-selected');\n }\n else if (color === 'Yellow') {\n this.highlightColorElement.querySelector('#yellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'BrightGreen') {\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Turquoise') {\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.add('e-color-selected');\n }\n else if (color === 'Pink') {\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.add('e-color-selected');\n }\n else if (color === 'Red') {\n this.highlightColorElement.querySelector('#redDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkBlue') {\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.add('e-color-selected');\n }\n else if (color === 'Teal') {\n this.highlightColorElement.querySelector('#tealDiv').classList.add('e-color-selected');\n }\n else if (color === 'Green') {\n this.highlightColorElement.querySelector('#greenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Violet') {\n this.highlightColorElement.querySelector('#violetDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkRed') {\n this.highlightColorElement.querySelector('#darkRedDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkYellow') {\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'Gray50') {\n this.highlightColorElement.querySelector('#gray50Div').classList.add('e-color-selected');\n }\n else if (color === 'Gray25') {\n this.highlightColorElement.querySelector('#gray25Div').classList.add('e-color-selected');\n }\n else if (color === 'Black') {\n this.highlightColorElement.querySelector('#blackDiv').classList.add('e-color-selected');\n }\n else if (color === 'Blue') {\n this.highlightColorElement.querySelector('#blueDiv').classList.add('e-color-selected');\n }\n };\n Text.prototype.removeSelectedColorDiv = function () {\n this.highlightColorElement.querySelector('#noColorDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#yellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#redDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#tealDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#greenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#violetDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkRedDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray50Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray25Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#blackDiv').classList.remove('e-color-selected');\n };\n Text.prototype.applyHighlightColor = function (color) {\n this.appliedHighlightColor = color;\n var hgltColor = this.getHighLightColor(color);\n if (hgltColor === 'NoColor') {\n this.documentEditor.selection.characterFormat.highlightColor = null;\n }\n this.documentEditor.selection.characterFormat.highlightColor = hgltColor;\n };\n Text.prototype.getHighLightColor = function (color) {\n switch (color) {\n case 'rgb(255, 255, 0)':\n return 'Yellow';\n case 'rgb(0, 255, 0)':\n return 'BrightGreen';\n case 'rgb(0, 255, 255)':\n return 'Turquoise';\n case 'rgb(255, 0, 255)':\n return 'Pink';\n case 'rgb(0, 0, 255)':\n return 'Blue';\n case 'rgb(255, 0, 0)':\n return 'Red';\n case 'rgb(0, 0, 128)':\n return 'DarkBlue';\n case 'rgb(0, 128, 128)':\n return 'Teal';\n case 'rgb(0, 128, 0)':\n return 'Green';\n case 'rgb(128, 0, 128)':\n return 'Violet';\n case 'rgb(128, 0, 0)':\n return 'DarkRed';\n case 'rgb(128, 128, 0)':\n return 'DarkYellow';\n case 'rgb(128, 128, 128)':\n return 'Gray50';\n case 'rgb(192, 192, 192)':\n return 'Gray25';\n case 'rgb(0, 0, 0)':\n return 'Black';\n default:\n return 'NoColor';\n }\n };\n Text.prototype.createDiv = function (id, parentDiv, style) {\n var div;\n if (style) {\n div = createElement('div', { id: id, styles: style });\n }\n else {\n div = createElement('div', { id: id });\n }\n parentDiv.appendChild(div);\n return div;\n };\n /* eslint-disable-next-line max-len */\n Text.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var button = createElement('Button', { id: id, attrs: { type: 'button' } });\n // button.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(button);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl\n });\n btn.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant(toolTipText));\n switch (toolTipText) {\n case 'Bold Tooltip':\n this.boldBtn = btn;\n break;\n case 'Italic Tooltip':\n this.italicBtn = btn;\n break;\n case 'Underline Tooltip':\n this.underlineBtn = btn;\n break;\n case 'Strikethrough':\n this.strikethroughBtn = btn;\n break;\n case 'Superscript Tooltip':\n this.superscriptBtn = btn;\n break;\n case 'Subscript Tooltip':\n this.subscriptBtn = btn;\n break;\n default:\n this.clearFormatBtn = btn;\n }\n return button;\n };\n Text.prototype.createFontColorPicker = function (id, width, divElement, toolTipText) {\n var inputElement = createElement('input', { id: id, attrs: { 'type': 'color' } });\n inputElement.style.width = width + 'px';\n divElement.appendChild(inputElement);\n this.fontColorInputElement = new ColorPicker({ value: '#000000', showButtons: true, enableRtl: this.isRtl, locale: this.container.locale }, inputElement);\n this.fontColorInputElement.element.parentElement.setAttribute('title', toolTipText);\n return inputElement;\n };\n Text.prototype.createDropDownListForSize = function (fontSelectElement) {\n var _this = this;\n var fontSize = ['8', '9', '10', '11', '12', '14', '16', '18', '20', '22', '24', '26', '28', '36', '48', '72', '96'];\n this.fontSize = new ComboBox({\n dataSource: fontSize, popupHeight: '180px',\n popupWidth: '80px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl\n });\n this.fontSize.focus = function () {\n _this.isRetrieving = false;\n _this.fontSize.element.select();\n };\n this.fontSize.value = this.documentEditor.selection.characterFormat.fontSize.toString();\n this.fontSize.appendTo(fontSelectElement);\n this.fontSize.element.parentElement.setAttribute('title', this.localObj.getConstant('Font Size'));\n };\n Text.prototype.createDropDownListForFamily = function (fontSelectElement) {\n var _this = this;\n /* eslint-disable */\n var fontStyle;\n var isStringTemplate = false;\n var itemTemplate = '';\n if (!this.container.enableCsp) {\n itemTemplate = '${FontName}';\n isStringTemplate = true;\n }\n this.fontFamily = new ComboBox({\n dataSource: fontStyle,\n query: new Query().select(['FontName']),\n fields: { text: 'FontName', value: 'FontValue' },\n popupHeight: '150px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl,\n itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontSelectElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.container.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'FontValue': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () {\n _this.isRetrieving = false;\n _this.fontFamily.element.select();\n };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n };\n /* eslint-enable */\n Text.prototype.wireEvent = function () {\n var _this = this;\n this.fontFamily.addEventListener('change', function () {\n _this.changeFontFamily();\n });\n this.fontSize.addEventListener('change', function () {\n _this.changeFontSize();\n });\n this.bold.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.boldAction();\n });\n this.italic.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.italicAction();\n });\n this.underline.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.underlineAction();\n });\n this.strikethrough.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.strikethroughAction();\n });\n this.superscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.superscriptAction();\n });\n this.subscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.subscriptAction();\n });\n this.fontColorInputElement.addEventListener('change', function (args) {\n _this.isRetrieving = false;\n _this.changeFontColor(args);\n });\n this.clearFormat.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.clearFormatAction();\n });\n this.changeCaseDropdown.addEventListener('select', function (args) {\n _this.isRetrieving = false;\n _this.changeCase(args);\n });\n };\n Text.prototype.unwireEvents = function () {\n this.fontFamily.change = undefined;\n this.fontSize.change = undefined;\n this.bold.click = undefined;\n this.italic.click = undefined;\n this.underline.click = undefined;\n this.strikethrough.click = undefined;\n this.superscript.click = undefined;\n this.subscript.click = undefined;\n this.fontColorInputElement.change = undefined;\n this.highlightColorElement.click = undefined;\n this.highlightColor.click = undefined;\n this.clearFormat.click = undefined;\n this.changeCaseDropdown.select = undefined;\n };\n Text.prototype.boldAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleBold();\n }\n };\n Text.prototype.italicAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleItalic();\n }\n };\n Text.prototype.underlineAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleUnderline('Single');\n }\n };\n Text.prototype.strikethroughAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleStrikethrough();\n }\n };\n Text.prototype.clearFormatAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.clearFormatting();\n }\n };\n Text.prototype.subscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleSubscript();\n }\n };\n Text.prototype.superscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleSuperscript();\n }\n };\n Text.prototype.changeFontColor = function (arg) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection) {\n this.documentEditor.selection.characterFormat.fontColor = arg.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Text.prototype.changeFontFamily = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection && this.fontFamily.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selection.characterFormat.fontFamily = _this.fontFamily.value;\n }, 10);\n }\n };\n Text.prototype.changeFontSize = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selection && this.fontSize.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selection.characterFormat.fontSize = _this.fontSize.value;\n }, 10);\n }\n };\n Text.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.selection) {\n //#region character format\n if (this.documentEditor.selection.characterFormat.fontFamily) {\n this.fontFamily.value = this.documentEditor.selection.characterFormat.fontFamily;\n this.fontFamily.dataBind();\n }\n else {\n this.fontFamily.value = '';\n }\n if (this.documentEditor.selection.characterFormat.fontSize) {\n this.fontSize.value = this.documentEditor.selection.characterFormat.fontSize.toString();\n this.fontSize.dataBind();\n }\n else {\n this.fontSize.value = '';\n }\n if (this.documentEditor.selection.characterFormat.bold) {\n if (!this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.italic) {\n if (!this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.underline\n && this.documentEditor.selection.characterFormat.underline !== 'None') {\n if (!this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.strikethrough\n && this.documentEditor.selection.characterFormat.strikethrough !== 'None') {\n if (!this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.baselineAlignment\n && this.documentEditor.selection.characterFormat.baselineAlignment === 'Subscript') {\n if (!this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.baselineAlignment\n && this.documentEditor.selection.characterFormat.baselineAlignment === 'Superscript') {\n if (!this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.add('e-btn-toggle');\n }\n }\n else {\n if (this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.remove('e-btn-toggle');\n }\n }\n if (this.documentEditor.selection.characterFormat.fontColor) {\n var fontColor = this.documentEditor.selection.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n this.fontColorInputElement.value = fontColor;\n }\n if (this.documentEditor.selection.characterFormat.highlightColor) {\n this.highlightColorInputElement.style.backgroundColor = this.appliedHighlightColor;\n this.applyHighlightColorAsBackground(this.documentEditor.selection.characterFormat.highlightColor);\n }\n //#endregion\n }\n };\n Text.prototype.destroy = function () {\n if (this.highlightColor) {\n this.highlightColor.destroy();\n this.highlightColor = undefined;\n }\n if (this.fontColorInputElement) {\n this.fontColorInputElement.destroy();\n this.fontColorInputElement = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.changeCaseDropdown) {\n this.changeCaseDropdown.destroy();\n this.changeCaseDropdown = undefined;\n }\n if (this.boldBtn) {\n this.boldBtn.destroy();\n this.boldBtn = undefined;\n }\n if (this.italicBtn) {\n this.italicBtn.destroy();\n this.italicBtn = undefined;\n }\n if (this.underlineBtn) {\n this.underlineBtn.destroy();\n this.underlineBtn = undefined;\n }\n if (this.strikethroughBtn) {\n this.strikethroughBtn.destroy();\n this.strikethroughBtn = undefined;\n }\n if (this.subscriptBtn) {\n this.subscriptBtn.destroy();\n this.subscriptBtn = undefined;\n }\n if (this.superscriptBtn) {\n this.superscriptBtn.destroy();\n this.superscriptBtn = undefined;\n }\n if (this.clearFormatBtn) {\n this.clearFormatBtn.destroy();\n this.clearFormatBtn = undefined;\n }\n this.container = undefined;\n };\n return Text;\n}());\nexport { Text };\n","import { createElement, isNullOrUndefined, classList, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { Query } from '@syncfusion/ej2-data';\n/**\n * Paragraph Properties\n *\n * @private\n */\nvar Paragraph = /** @class */ (function () {\n function Paragraph(container) {\n this.isRetrieving = false;\n this.appliedBulletStyle = 'dot';\n this.appliedNumberingStyle = 'arabic';\n this.appliedLineSpacing = '';\n this.splitButtonClass = 'e-de-prop-splitbutton';\n this.container = container;\n }\n Object.defineProperty(Paragraph.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Paragraph.prototype.initializeParagraphPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.splitButtonClass = 'e-rtl ' + this.splitButtonClass;\n }\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var paragraphDiv = this.createDivElement(element + '_paragraph', wholeDiv, '');\n classList(paragraphDiv, ['e-de-cntr-pane-padding'], []);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.innerHTML = this.localObj.getConstant('Paragraph');\n paragraphDiv.appendChild(label);\n var styleDiv = this.createDivElement(element + '_styleDiv', paragraphDiv);\n styleDiv.classList.add('e-de-ctnr-segment', 'e-de-ctnr-style-div');\n var styleSelect = createElement('input', { id: element + '_style', styles: 'width:248px;letter-spacing: 0.05px;' });\n styleDiv.appendChild(styleSelect);\n this.createStyleDropDownList(styleSelect);\n var indentWholeDiv = this.createDivElement(element + '_indentWholeDiv', paragraphDiv);\n indentWholeDiv.style.display = 'flex';\n indentWholeDiv.classList.add('e-de-ctnr-segment');\n if (isRtl) {\n classList(indentWholeDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var indentDiv = this.createDivElement(element + '_indentDiv', indentWholeDiv, 'display:flex;');\n var indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n }\n indentDiv.className = indentClassName;\n this.leftAlignment = this.createButtonTemplate(element + '_leftIndent', 'e-de-ctnr-alignleft e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align left Tooltip');\n this.centerAlignment = this.createButtonTemplate(element + '_centerIndent', 'e-de-ctnr-aligncenter e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Center Tooltip');\n this.rightAlignment = this.createButtonTemplate(element + '_rightIndent', 'e-de-ctnr-alignright e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align right Tooltip');\n this.justify = this.createButtonTemplate(element + '_justify', 'e-de-ctnr-justify e-icons', indentDiv, 'e-de-prop-indent-last-button', '40.5', 'Justify Tooltip');\n var increaseIndentIconCss = 'e-de-ctnr-increaseindent e-icons';\n var decreaseIndentIconCss = 'e-de-ctnr-decreaseindent e-icons';\n var incDecIndentDiv = this.createDivElement(element + '_indentDiv', indentWholeDiv, 'display:flex;');\n indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n increaseIndentIconCss += ' e-de-flip';\n decreaseIndentIconCss += ' e-de-flip';\n }\n incDecIndentDiv.className = indentClassName;\n this.decreaseIndent = this.createButtonTemplate(element + '_decreaseIndent', decreaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-button', '37', 'Decrease indent');\n this.increaseIndent = this.createButtonTemplate(element + '_increaseIndent', increaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-last-button', '37', 'Increase indent');\n var listDiv = this.createDivElement(element + '_listDiv', paragraphDiv, 'display:flex;');\n var paraDiv = this.createDivElement(element + '_paraDiv', paragraphDiv, 'display:flex');\n classList(listDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n if (isRtl) {\n classList(listDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n }\n var lineHeight = createElement('button', { id: element + '_lineHeight', attrs: { type: 'button' } });\n listDiv.appendChild(lineHeight);\n this.lineSpacing = this.createLineSpacingDropdown(lineHeight);\n var listDropDown = this.createDivElement(element + '_listDropDiv', listDiv);\n listDropDown.className = 'de-split-button';\n var bulletButton = createElement('button', { id: element + '_bullet', attrs: { type: 'button' } });\n listDropDown.appendChild(bulletButton);\n var numberingList = createElement('button', { id: element + '_numberingList', attrs: { type: 'button' } });\n listDropDown.appendChild(numberingList);\n var bulletIconCss = 'e-de-ctnr-bullets e-icons';\n var numberIconCss = 'e-de-ctnr-numbering e-icons';\n if (isRtl) {\n bulletIconCss += ' e-de-flip';\n numberIconCss += ' e-de-flip';\n }\n this.createBulletListDropButton(bulletIconCss, bulletButton);\n this.createNumberListDropButton(numberIconCss, numberingList);\n this.borders = this.createButtonTemplate(element + '_borders', 'e-de-ctnr-borders e-icons', paraDiv, 'e-de-ctnr-group-btn', '37', 'Borders');\n };\n Paragraph.prototype.createSeparator = function (parentDiv) {\n var separator = createElement('div', { className: 'e-de-prop-vline' });\n parentDiv.appendChild(separator);\n };\n Paragraph.prototype.createDivElement = function (id, parentDiv, style) {\n var element;\n if (style) {\n element = createElement('div', { id: id, styles: style });\n }\n else {\n element = createElement('div', { id: id });\n }\n parentDiv.appendChild(element);\n return element;\n };\n /* eslint-disable-next-line max-len */\n Paragraph.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var buttonElement = createElement('Button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', this.localObj.getConstant(toolTipText));\n switch (toolTipText) {\n case 'Align left Tooltip':\n this.leftAlignmentBtn = btn;\n break;\n case 'Align right Tooltip':\n this.rightAlignmentBtn = btn;\n break;\n case 'Justify Tooltip':\n this.justifyBtn = btn;\n break;\n case 'Decrease indent':\n this.decreaseIndentBtn = btn;\n break;\n case 'Increase indent':\n this.increaseIndentBtn = btn;\n break;\n case 'Borders':\n this.bordersBtn = btn;\n break;\n default:\n this.centerAlignmentBtn = btn;\n }\n return buttonElement;\n };\n Paragraph.prototype.createLineSpacingDropdown = function (button) {\n var _this = this;\n var items = [{\n text: this.localObj.getConstant('Single')\n }, {\n text: '1.15'\n }, {\n text: '1.5'\n }, {\n text: this.localObj.getConstant('Double')\n }];\n var dropdown = new DropDownButton({\n items: items,\n iconCss: 'e-de-ctnr-linespacing e-icons',\n enableRtl: this.isRtl,\n select: this.lineSpacingAction.bind(this),\n cssClass: this.splitButtonClass,\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === _this.appliedLineSpacing) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-item e-icons e-de-linespacing');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n }\n });\n dropdown.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant('Line spacing'));\n return dropdown;\n };\n Paragraph.prototype.createNumberListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'target', styles: 'width: 211px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneNumberTag = this.createNumberNoneListTag(ulTag);\n this.noneNumberTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.numberList = this.createNumberListTag(ulTag, '1.', '2.', '3.');\n this.numberList.addEventListener('click', this.numberedNumberDotClick.bind(this));\n this.lowLetter = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.');\n this.lowLetter.addEventListener('click', this.numberedLowLetterClick.bind(this));\n this.upLetter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.');\n this.upLetter.addEventListener('click', this.numberedUpLetterClick.bind(this));\n this.lowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.');\n this.lowRoman.addEventListener('click', this.numberedLowRomanClick.bind(this));\n this.upRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.');\n this.upRoman.addEventListener('click', this.numberedUpRomanClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n var levelPattern = 'None';\n if (!isNullOrUndefined(_this.documentEditor.selection.paragraphFormat)) {\n if (isNullOrUndefined(_this.documentEditor.selection.paragraphFormat.listId) || _this.documentEditor.selection.paragraphFormat.listId == -1) {\n levelPattern = 'None';\n }\n else {\n var list = _this.documentEditor.documentHelper.getListById(_this.documentEditor.selection.paragraphFormat.listId);\n var abstractList = _this.documentEditor.documentHelper.getAbstractListById(list.abstractListId);\n var level = abstractList.levels[_this.documentEditor.selection.paragraphFormat.listLevelNumber];\n levelPattern = level.listLevelPattern;\n }\n }\n _this.updateSelectedNumberedListType(levelPattern);\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.numberedListBtn = new SplitButton(menuOptions);\n this.numberedListBtn.click = function () {\n _this.applyLastAppliedNumbering();\n };\n this.numberedListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Numbering'));\n };\n Paragraph.prototype.updateSelectedBulletListType = function (listText) {\n switch (listText) {\n case String.fromCharCode(61623):\n this.dotBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61551) + String.fromCharCode(32):\n this.circleBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61607):\n this.squareBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61558):\n this.flowerBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61656):\n this.arrowBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61692):\n this.tickBullet.classList.add('de-list-item-selected');\n break;\n default:\n this.noneBulletTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.updateSelectedNumberedListType = function (listText) {\n switch (listText) {\n case 'Arabic':\n this.numberList.classList.add('de-list-item-selected');\n break;\n case 'UpRoman':\n this.upRoman.classList.add('de-list-item-selected');\n break;\n case 'UpLetter':\n this.upLetter.classList.add('de-list-item-selected');\n break;\n case 'LowLetter':\n this.lowLetter.classList.add('de-list-item-selected');\n break;\n case 'LowRoman':\n this.lowRoman.classList.add('de-list-item-selected');\n break;\n default:\n this.noneNumberTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.removeSelectedList = function () {\n var className = 'de-list-item-selected';\n this.noneNumberTag.classList.remove(className);\n this.numberList.classList.remove(className);\n this.lowLetter.classList.remove(className);\n this.upLetter.classList.remove(className);\n this.lowRoman.classList.remove(className);\n this.upRoman.classList.remove(className);\n this.noneBulletTag.classList.remove(className);\n this.dotBullet.classList.remove(className);\n this.circleBullet.classList.remove(className);\n this.squareBullet.classList.remove(className);\n this.flowerBullet.classList.remove(className);\n this.arrowBullet.classList.remove(className);\n this.tickBullet.classList.remove(className);\n };\n /**\n * @private\n */\n Paragraph.prototype.applyLastAppliedNumbering = function () {\n switch (this.appliedNumberingStyle) {\n case 'arabic':\n this.numberedNumberDotClick();\n break;\n case 'lowletter':\n this.numberedLowLetterClick();\n break;\n case 'upletter':\n this.numberedUpLetterClick();\n break;\n case 'lowroman':\n this.numberedLowRomanClick();\n break;\n case 'uproman':\n this.numberedUpRomanClick();\n break;\n }\n };\n Paragraph.prototype.applyLastAppliedBullet = function () {\n switch (this.appliedBulletStyle) {\n case 'dot':\n this.bulletDotClick();\n break;\n case 'circle':\n this.bulletCircleClick();\n break;\n case 'square':\n this.bulletSquareClick();\n break;\n case 'arrow':\n this.bulletArrowClick();\n break;\n case 'tick':\n this.bulletTickClick();\n break;\n case 'flower':\n this.bulletFlowerClick();\n break;\n }\n };\n Paragraph.prototype.createBulletListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'bullet_list', styles: 'width: 196px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneBulletTag = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-none e-icons e-de-ctnr-list', true);\n this.noneBulletTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.dotBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-dot e-icons e-de-ctnr-list', false);\n this.dotBullet.addEventListener('click', this.bulletDotClick.bind(this));\n this.circleBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-circle e-icons e-de-ctnr-list', false);\n this.circleBullet.addEventListener('click', this.bulletCircleClick.bind(this));\n this.squareBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-square e-icons e-de-ctnr-list', false);\n this.squareBullet.addEventListener('click', this.bulletSquareClick.bind(this));\n this.flowerBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-flower e-icons e-de-ctnr-list', false);\n this.flowerBullet.addEventListener('click', this.bulletFlowerClick.bind(this));\n this.arrowBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-arrow e-icons e-de-ctnr-list', false);\n this.arrowBullet.addEventListener('click', this.bulletArrowClick.bind(this));\n this.tickBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-tick e-icons e-de-ctnr-list', false);\n this.tickBullet.addEventListener('click', this.bulletTickClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n _this.updateSelectedBulletListType(_this.documentEditor.selection.paragraphFormat.listText);\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.bulletListBtn = new SplitButton(menuOptions);\n this.bulletListBtn.click = function () {\n _this.applyLastAppliedBullet();\n };\n this.bulletListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Bullets'));\n };\n Paragraph.prototype.createNumberListTag = function (ulTag, text1, text2, text3) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + text1 + '
      ' + text2 + '';\n innerHTML += '
      ' + text3 + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + this.localObj.getConstant('None') + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu', styles: 'position:relative;left:11px;top:13px',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createBulletListTag = function (ulTag, iconCss, isNone) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-bullet-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var liInnerDiv = createElement('div', { className: 'e-de-bullet-list-header-presetmenu' });\n var spanDiv = createElement('div', { styles: isNone ? 'font-size:8px;text-align: center;top: 8px;line-height:normal' : '' });\n liInnerDiv.appendChild(spanDiv);\n var span = createElement('span', { className: !isNone ? iconCss : '' });\n spanDiv.appendChild(span);\n if (isNone) {\n liInnerDiv.style.display = 'inline-table';\n span.textContent = this.localObj.getConstant('None');\n }\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createStyleDropDownList = function (selectElement) {\n this.style = new DropDownList({\n dataSource: [{ StyleName: 'Normal', Class: 'e-icons e-edit-font' }],\n cssClass: 'e-de-prop-dropdown',\n popupHeight: '240px',\n enableRtl: this.isRtl,\n query: new Query().select(['StyleName', 'Style']),\n fields: { text: 'StyleName', value: 'StyleName' },\n change: this.selectStyleValue.bind(this)\n });\n if (!this.container.enableCsp) {\n this.style.open = this.updateOptions.bind(this);\n this.style.itemTemplate = '${StyleName}';\n this.style.footerTemplate = ''\n + this.localObj.getConstant('Manage Styles') + '...' + '';\n this.style.isStringTemplate = true;\n }\n this.style.appendTo(selectElement);\n selectElement.parentElement.setAttribute('title', this.localObj.getConstant('Styles'));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.updateOptions = function (args) {\n this.updateStyleNames();\n args.popup.element.getElementsByClassName('e-de-ctnr-dropdown-ftr')[0].addEventListener('click', this.createStyle.bind(this));\n };\n Paragraph.prototype.updateStyleNames = function () {\n this.styleName = !isNullOrUndefined(this.style.itemData) ? this.style.itemData.StyleName : undefined;\n this.style.dataSource = this.constructStyleDropItems(this.documentEditor.getStyles('Paragraph'));\n this.style.dataBind();\n this.onSelectionChange();\n };\n Paragraph.prototype.createStyle = function () {\n this.style.hidePopup();\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.showDialog('Styles');\n }\n };\n Paragraph.prototype.constructStyleDropItems = function (styles) {\n var collection = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var styleObj = styles_1[_i];\n var obj = {};\n var styleName = this.localObj.getConstant(styleObj.name);\n obj.StyleName = styleName === '' ? styleObj.name : styleName;\n obj.Style = this.parseStyle(styleObj.style);\n collection.push(obj);\n }\n return collection;\n };\n Paragraph.prototype.parseStyle = function (style) {\n var domStyle = '';\n var styleObj = JSON.parse(style);\n var textDecoration = '';\n if (!isNullOrUndefined(styleObj.characterFormat.baselineAlignment) && styleObj.characterFormat.baselineAlignment !== 'Normal') {\n var vAlign = '';\n switch (styleObj.characterFormat.baselineAlignment) {\n case 'Superscript':\n vAlign = 'super';\n break;\n case 'Subscript':\n vAlign = 'sub';\n break;\n }\n if (vAlign.length > 1) {\n domStyle += 'vertical-align:' + vAlign + ';';\n }\n }\n if (!isNullOrUndefined(styleObj.characterFormat.underline) && styleObj.characterFormat.underline !== 'None') {\n textDecoration += 'underline ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.strikethrough) && styleObj.characterFormat.strikethrough !== 'None') {\n textDecoration += 'line-through ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontSize)) {\n domStyle += 'font-size:' + styleObj.characterFormat.fontSize + 'px;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontFamily)) {\n domStyle += 'font-family:' + styleObj.characterFormat.fontFamily + ';';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.bold) && styleObj.characterFormat.bold) {\n domStyle += 'font-weight:bold;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.italic) && styleObj.characterFormat.italic) {\n domStyle += 'font-style:italic;';\n }\n // if (!isNullOrUndefined(styleObj.characterFormat.fontColor)) {\n // domStyle += 'color: ' + styleObj.characterFormat.fontColor + ';';\n // }\n if (textDecoration.length > 1) {\n domStyle += 'text-decoration:' + textDecoration + ';';\n }\n return domStyle;\n };\n Paragraph.prototype.wireEvent = function () {\n var _this = this;\n this.leftAlignment.addEventListener('click', function () {\n _this.leftAlignmentAction();\n });\n this.rightAlignment.addEventListener('click', function () {\n _this.rightAlignmentAction();\n });\n this.centerAlignment.addEventListener('click', function () {\n _this.centerAlignmentAction();\n });\n this.justify.addEventListener('click', function () {\n _this.justifyAction();\n });\n this.increaseIndent.addEventListener('click', function () {\n _this.increaseIndentAction();\n });\n this.decreaseIndent.addEventListener('click', function () {\n _this.decreaseIndentAction();\n });\n this.lineSpacing.addEventListener('select', function (args) {\n _this.lineSpacingAction(args);\n });\n this.borders.addEventListener('click', function () {\n _this.documentEditor.showBordersAndShadingDialog();\n });\n };\n Paragraph.prototype.unwireEvents = function () {\n this.leftAlignment.click = undefined;\n this.rightAlignment.click = undefined;\n this.centerAlignment.click = undefined;\n this.justify.click = undefined;\n this.increaseIndent.click = undefined;\n this.decreaseIndent.click = undefined;\n this.lineSpacing.select = undefined;\n this.style.select = undefined;\n };\n Paragraph.prototype.leftAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Left');\n }\n };\n Paragraph.prototype.lineSpacingAction = function (args) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n var text = args.item.text;\n switch (text) {\n case this.localObj.getConstant('Single'):\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1;\n break;\n case '1.15':\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1.15;\n break;\n case '1.5':\n this.documentEditor.selection.paragraphFormat.lineSpacing = 1.5;\n break;\n case this.localObj.getConstant('Double'):\n this.documentEditor.selection.paragraphFormat.lineSpacing = 2;\n break;\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Paragraph.prototype.setLineSpacing = function () {\n var lineSpacing = this.documentEditor.selection.paragraphFormat.lineSpacing;\n if (lineSpacing === 1) {\n this.appliedLineSpacing = this.localObj.getConstant('Single');\n }\n else if (lineSpacing === 1.15) {\n this.appliedLineSpacing = '1.15';\n }\n else if (lineSpacing === 1.5) {\n this.appliedLineSpacing = '1.5';\n }\n else if (lineSpacing === 2) {\n this.appliedLineSpacing = this.localObj.getConstant('Double');\n }\n else {\n this.appliedLineSpacing = '';\n }\n };\n Paragraph.prototype.selectStyleValue = function (args) {\n var _this = this;\n if (this.isRetrieving || !args.isInteracted) {\n return;\n }\n setTimeout(function () {\n _this.applyStyleValue(args);\n }, 10);\n };\n Paragraph.prototype.applyStyleValue = function (args) {\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n if (this.localObj.getConstant('Heading 1') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 1';\n }\n else if (this.localObj.getConstant('Heading 2') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 2';\n }\n else if (this.localObj.getConstant('Heading 3') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 3';\n }\n else if (this.localObj.getConstant('Heading 4') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 4';\n }\n else if (this.localObj.getConstant('Heading 5') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 5';\n }\n else if (this.localObj.getConstant('Heading 6') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Heading 6';\n }\n else if (this.localObj.getConstant('Normal') === args.itemData.StyleName) {\n args.itemData.StyleName = 'Normal';\n }\n this.documentEditor.editor.applyStyle(args.itemData.StyleName, true);\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.rightAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Right');\n }\n };\n Paragraph.prototype.centerAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Center');\n }\n };\n Paragraph.prototype.justifyAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.toggleTextAlignment('Justify');\n }\n };\n Paragraph.prototype.increaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.increaseIndent();\n }\n };\n Paragraph.prototype.decreaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editor) {\n this.documentEditor.editor.decreaseIndent();\n }\n };\n Paragraph.prototype.numberedNoneClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.documentEditor.editor.clearList();\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedNumberDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'arabic';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'Arabic');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'uproman';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'UpRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'upletter';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'UpLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'lowletter';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'LowLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedNumberingStyle = 'lowroman';\n this.documentEditor.editor.applyNumbering(this.getLevelFormatNumber(), 'LowRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.documentEditor.selection.paragraphFormat.listLevelNumber <= 0) ? 0 : this.documentEditor.selection.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n Paragraph.prototype.bulletDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'dot';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61623), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletCircleClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'circle';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61551) + String.fromCharCode(32), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletSquareClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'square';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61607), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletFlowerClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'flower';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61558), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletArrowClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'arrow';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61656), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletTickClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editor) {\n this.appliedBulletStyle = 'tick';\n this.documentEditor.editor.applyBullet(String.fromCharCode(61692), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.editor) {\n //#region paragraph format\n var style = this.documentEditor.selection.paragraphFormat.styleName;\n if (style) {\n var localeValue = this.localObj.getConstant(style);\n this.style.value = (isNullOrUndefined(localeValue) || localeValue == '') ? style : localeValue;\n this.style.dataBind();\n }\n else {\n this.style.value = null;\n }\n classList(this.leftAlignment, [], ['e-btn-toggle']);\n classList(this.rightAlignment, [], ['e-btn-toggle']);\n classList(this.centerAlignment, [], ['e-btn-toggle']);\n classList(this.justify, [], ['e-btn-toggle']);\n if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Left') {\n classList(this.leftAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Right') {\n classList(this.rightAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Center') {\n classList(this.centerAlignment, ['e-btn-toggle'], []);\n }\n else if (this.documentEditor.selection.paragraphFormat.textAlignment === 'Justify') {\n classList(this.justify, ['e-btn-toggle'], []);\n }\n //#endregion\n }\n this.setLineSpacing();\n this.isRetrieving = false;\n };\n Paragraph.prototype.destroy = function () {\n this.container = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.destroy();\n this.lineSpacing = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.bulletListBtn) {\n this.bulletListBtn.destroy();\n this.bulletListBtn = undefined;\n }\n if (this.numberedListBtn) {\n this.numberedListBtn.destroy();\n this.numberedListBtn = undefined;\n }\n if (this.leftAlignmentBtn) {\n this.leftAlignmentBtn.destroy();\n this.leftAlignmentBtn = undefined;\n }\n if (this.rightAlignmentBtn) {\n this.rightAlignmentBtn.destroy();\n this.rightAlignmentBtn = undefined;\n }\n if (this.centerAlignmentBtn) {\n this.centerAlignmentBtn.destroy();\n this.centerAlignmentBtn = undefined;\n }\n if (this.justifyBtn) {\n this.justifyBtn.destroy();\n this.justifyBtn = undefined;\n }\n if (this.decreaseIndentBtn) {\n this.decreaseIndentBtn.destroy();\n this.decreaseIndentBtn = undefined;\n }\n if (this.increaseIndentBtn) {\n this.increaseIndentBtn.destroy();\n this.increaseIndentBtn = undefined;\n }\n if (this.bordersBtn) {\n this.bordersBtn.destroy();\n this.bordersBtn = undefined;\n }\n };\n return Paragraph;\n}());\nexport { Paragraph };\n","import { createElement, classList } from '@syncfusion/ej2-base';\nimport { Text } from './text-properties';\nimport { Paragraph } from './paragraph-properties';\n/**\n * Text Properties pane\n *\n * @private\n */\nvar TextProperties = /** @class */ (function () {\n /**\n * Initialize the Text properties pane.\n *\n * @param {DocumentEditorContainer} container DocumentEditorContainer instance.\n * @param {string} id Identifier element reference.\n * @param {boolean} isTableProperties Specified if text properties is inside the text properties.\n * @param {boolean} isRtl Specifies the RTL layout.\n */\n function TextProperties(container, id, isTableProperties, isRtl) {\n this.isInitial = true;\n this.container = container;\n this.text = new Text(container, isRtl);\n this.paragraph = new Paragraph(container);\n this.initializeTextProperties(id, isTableProperties, isRtl);\n this.wireEvents();\n }\n Object.defineProperty(TextProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TextProperties.prototype.updateStyles = function () {\n this.paragraph.updateStyleNames();\n };\n Object.defineProperty(TextProperties.prototype, \"appliedHighlightColor\", {\n get: function () {\n return this.text.appliedHighlightColor;\n },\n set: function (value) {\n this.text.appliedHighlightColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedBulletStyle\", {\n get: function () {\n return this.paragraph.appliedBulletStyle;\n },\n set: function (value) {\n this.paragraph.appliedBulletStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedNumberingStyle\", {\n get: function () {\n return this.paragraph.appliedNumberingStyle;\n },\n set: function (value) {\n this.paragraph.appliedNumberingStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.showTextProperties = function (isShow) {\n if (isShow) {\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n TextProperties.prototype.initializeTextProperties = function (id, isTableProperties, isRtl) {\n this.element = createElement('div', { className: 'e-de-prop-pane e-de-scrollbar-hide' });\n this.text.initializeTextPropertiesDiv(this.element, isRtl);\n this.paragraph.initializeParagraphPropertiesDiv(this.element, isRtl);\n this.paragraph.updateStyleNames();\n if (!isTableProperties) {\n this.container.propertiesPaneContainer.appendChild(this.element);\n }\n };\n TextProperties.prototype.generateUniqueID = function () {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n };\n TextProperties.prototype.wireEvents = function () {\n this.text.wireEvent();\n this.paragraph.wireEvent();\n };\n TextProperties.prototype.onSelectionChange = function () {\n this.text.onSelectionChange();\n this.paragraph.onSelectionChange();\n };\n TextProperties.prototype.destroy = function () {\n if (this.text) {\n this.text.destroy();\n this.text = undefined;\n }\n if (this.paragraph) {\n this.paragraph.destroy();\n this.paragraph = undefined;\n }\n this.container = undefined;\n };\n return TextProperties;\n}());\nexport { TextProperties };\n","import { createElement, classList, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { TextProperties } from './text-properties-pane';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { NumericTextBox, ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * Represents table properties\n *\n * @private\n */\nvar TableProperties = /** @class */ (function () {\n /* eslint-disable-next-line max-len */\n function TableProperties(container, imageProperty, isRtl) {\n this.isTopMarginApply = false;\n this.isRightMarginApply = false;\n this.isBottomMarginApply = false;\n this.isLeftMarginApply = false;\n this.borderColor = '#000000';\n this.groupButtonClass = 'e-de-ctnr-group-btn e-btn-group';\n this.container = container;\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.groupButtonClass = 'e-rtl ' + this.groupButtonClass;\n }\n this.tableTextProperties = new TextProperties(container, 'textProperties', true, this.isRtl);\n this.imageProperty = imageProperty;\n this.elementId = this.documentEditor.element.id;\n this.initializeTablePropPane();\n this.prevContext = this.documentEditor.selection.contextType;\n }\n Object.defineProperty(TableProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TableProperties.prototype.initializeTablePropPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.tableProperties = createElement('div', { className: 'e-de-scrollbar-hide', styles: 'overflow: auto' });\n this.initFillColorDiv();\n this.initBorderStylesDiv();\n this.initCellDiv();\n this.initInsertOrDelCell();\n this.initCellMargin();\n this.initAlignText();\n this.addTablePropertyTab();\n // wire fnt property\n this.wireEvent();\n };\n /**\n * @private\n * @param {boolean} enable - enable/disable table properties pane.\n * @returns {void}\n */\n TableProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TableProperties.prototype.addTablePropertyTab = function () {\n var tableHeader = createElement('div', { innerHTML: this.localObj.getConstant('Table') });\n var textHeader = createElement('div', { innerHTML: this.localObj.getConstant('Text') });\n this.parentElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-prop-pane' });\n this.element = createElement('div', { id: this.elementId + '_propertyTabDiv', className: 'e-de-property-tab' });\n /* eslint-disable-next-line max-len */\n var items = [{ header: { text: textHeader }, content: this.tableTextProperties.element }, { header: { text: tableHeader }, content: this.tableProperties }];\n this.propertiesTab = new Tab({ items: items, animation: { previous: { effect: 'None' }, next: { effect: 'None' } }, selected: this.onTabSelection.bind(this) });\n this.propertiesTab.isStringTemplate = true;\n this.propertiesTab.appendTo(this.element);\n this.parentElement.appendChild(this.element);\n this.container.propertiesPaneContainer.appendChild(this.parentElement);\n };\n TableProperties.prototype.onTabSelection = function () {\n this.documentEditor.resize();\n this.documentEditor.focusIn();\n };\n TableProperties.prototype.wireEvent = function () {\n var _this = this;\n this.shadingBtn.addEventListener('change', this.changeBackgroundColor.bind(this));\n this.borderBtn.addEventListener('change', function (args) {\n setTimeout(function () {\n _this.borderColor = args.currentValue.hex;\n _this.tableOutlineBorder.element.focus();\n }, 10);\n });\n this.tableOutlineBorder.element.addEventListener('click', this.onOutlineBorder.bind(this));\n this.tableAllBorder.element.addEventListener('click', this.onAllBorder.bind(this));\n this.tableCenterBorder.element.addEventListener('click', this.onInsideBorder.bind(this));\n this.tableLeftBorder.element.addEventListener('click', this.onLeftBorder.bind(this));\n this.tableCenterVerticalBorder.element.addEventListener('click', this.onVerticalBorder.bind(this));\n this.tableRightBorder.element.addEventListener('click', this.onRightBorder.bind(this));\n this.tableTopBorder.element.addEventListener('click', this.onTopBorder.bind(this));\n this.tableCenterHorizontalBorder.element.addEventListener('click', this.onHorizontalBorder.bind(this));\n this.tableBottomBorder.element.addEventListener('click', this.onBottomBorder.bind(this));\n this.insertRowAbove.element.addEventListener('click', this.onInsertRowAbove.bind(this));\n this.insertRowBelow.element.addEventListener('click', this.onInsertRowBelow.bind(this));\n this.insertColumnLeft.element.addEventListener('click', this.onInsertColumnLeft.bind(this));\n this.insertColumnRight.element.addEventListener('click', this.onInsertColumnRight.bind(this));\n this.deleteRow.element.addEventListener('click', this.onDeleteRow.bind(this));\n this.deleteColumn.element.addEventListener('click', this.onDeleteColumn.bind(this));\n this.horizontalMerge.element.addEventListener('click', this.onMergeCell.bind(this));\n this.alignTop.element.addEventListener('click', this.applyAlignTop.bind(this));\n this.alignBottom.element.addEventListener('click', this.applyAlignBottom.bind(this));\n this.alignCenterHorizontal.element.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n this.topMargin.element.addEventListener('click', function () {\n _this.isTopMarginApply = true;\n });\n this.rightMargin.element.addEventListener('click', function () {\n _this.isRightMarginApply = true;\n });\n this.leftMargin.element.addEventListener('click', function () {\n _this.isLeftMarginApply = true;\n });\n this.bottomMargin.element.addEventListener('click', function () {\n _this.isBottomMarginApply = true;\n });\n this.topMargin.element.addEventListener('keydown', this.onTopMargin.bind(this));\n this.rightMargin.element.addEventListener('keydown', this.onRightMargin.bind(this));\n this.leftMargin.element.addEventListener('keydown', this.onLeftMargin.bind(this));\n this.bottomMargin.element.addEventListener('keydown', this.onBottomMargin.bind(this));\n this.topMargin.element.addEventListener('blur', function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n });\n this.rightMargin.element.addEventListener('blur', function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n });\n this.leftMargin.element.addEventListener('blur', function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n });\n this.bottomMargin.element.addEventListener('blur', function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n });\n };\n TableProperties.prototype.getBorder = function (border) {\n var lineWidth = (this.borderSize.content.indexOf('No Border') >= 0) ? 0 : parseInt(this.borderSize.content, 10);\n var linestyle = (lineWidth === 0) ? 'Cleared' : 'Single';\n var borderSettings = {\n type: border,\n borderColor: this.borderColor,\n lineWidth: lineWidth,\n borderStyle: linestyle\n };\n return borderSettings;\n };\n TableProperties.prototype.onOutlineBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('OutsideBorders'));\n };\n TableProperties.prototype.onAllBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('AllBorders'));\n };\n TableProperties.prototype.onInsideBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideBorders'));\n };\n TableProperties.prototype.onLeftBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('LeftBorder'));\n };\n TableProperties.prototype.onVerticalBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideVerticalBorder'));\n };\n TableProperties.prototype.onRightBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('RightBorder'));\n };\n TableProperties.prototype.onTopBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('TopBorder'));\n };\n TableProperties.prototype.onHorizontalBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('InsideHorizontalBorder'));\n };\n TableProperties.prototype.onBottomBorder = function () {\n this.documentEditor.editor.applyBorders(this.getBorder('BottomBorder'));\n };\n TableProperties.prototype.onTopMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onBottomMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onLeftMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onRightMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.applyTopMargin = function () {\n if (!this.isTopMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.topMargin = (this.topMargin.value > this.topMargin.max)\n ? this.topMargin.max : this.topMargin.value;\n };\n TableProperties.prototype.applyBottomMargin = function () {\n if (!this.isBottomMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.bottomMargin = (this.bottomMargin.value > this.bottomMargin.max)\n ? this.bottomMargin.max : this.bottomMargin.value;\n };\n TableProperties.prototype.applyLeftMargin = function () {\n if (!this.isLeftMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.leftMargin = (this.leftMargin.value > this.leftMargin.max)\n ? this.leftMargin.max : this.leftMargin.value;\n };\n TableProperties.prototype.applyRightMargin = function () {\n if (!this.isRightMarginApply) {\n return;\n }\n this.documentEditor.selection.cellFormat.rightMargin = (this.rightMargin.value > this.rightMargin.max)\n ? this.rightMargin.max : this.rightMargin.value;\n };\n TableProperties.prototype.applyAlignTop = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Top';\n };\n TableProperties.prototype.applyAlignBottom = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Bottom';\n };\n TableProperties.prototype.applyAlignCenterHorizontal = function () {\n this.documentEditor.selection.cellFormat.verticalAlignment = 'Center';\n };\n TableProperties.prototype.onMergeCell = function () {\n this.documentEditor.editor.mergeCells();\n };\n TableProperties.prototype.onInsertRowAbove = function () {\n this.documentEditor.editor.insertRow(true);\n };\n TableProperties.prototype.onInsertRowBelow = function () {\n this.documentEditor.editor.insertRow(false);\n };\n TableProperties.prototype.onInsertColumnLeft = function () {\n this.documentEditor.editor.insertColumn(true);\n };\n TableProperties.prototype.onInsertColumnRight = function () {\n this.documentEditor.editor.insertColumn(false);\n };\n TableProperties.prototype.onDeleteRow = function () {\n this.documentEditor.editor.deleteRow();\n };\n TableProperties.prototype.onDeleteColumn = function () {\n this.documentEditor.editor.deleteColumn();\n };\n TableProperties.prototype.onSelectionChange = function () {\n if (this.documentEditor.selection) {\n if (this.documentEditor.editor && this.documentEditor.editor.canMergeCells()) {\n this.horizontalMerge.disabled = false;\n }\n else {\n this.horizontalMerge.disabled = true;\n }\n if (this.documentEditor.selection.contextType === 'TableText' || this.documentEditor.selection.contextType === 'TableImage') {\n this.shadingBtn.value = this.documentEditor.selection.cellFormat.background ? this.documentEditor.selection.cellFormat.background : '';\n }\n /* eslint-disable-next-line max-len */\n this.topMargin.value = this.documentEditor.selection.cellFormat.topMargin ? this.documentEditor.selection.cellFormat.topMargin : 0;\n /* eslint-disable-next-line max-len */\n this.bottomMargin.value = this.documentEditor.selection.cellFormat.bottomMargin ? this.documentEditor.selection.cellFormat.bottomMargin : 0;\n /* eslint-disable-next-line max-len */\n this.rightMargin.value = this.documentEditor.selection.cellFormat.rightMargin ? this.documentEditor.selection.cellFormat.rightMargin : 0;\n /* eslint-disable-next-line max-len */\n this.leftMargin.value = this.documentEditor.selection.cellFormat.leftMargin ? this.documentEditor.selection.cellFormat.leftMargin : 0;\n }\n };\n TableProperties.prototype.changeBackgroundColor = function (args) {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n //Handle API for shading.\n this.documentEditor.selection.cellFormat.background = args.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n TableProperties.prototype.initFillColorDiv = function () {\n var fillDiv = createElement('div', { id: this.elementId + '_fillColorDiv', className: 'e-de-property-div-padding de-tbl-fill-clr' });\n this.tableProperties.appendChild(fillDiv);\n var label = createElement('label', { className: 'e-de-prop-sub-label' });\n label.classList.add('e-de-prop-fill-label');\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n label.textContent = this.localObj.getConstant('Fill');\n fillDiv.appendChild(label);\n // const buttonStyle: string = 'width:92px;display:inline-flex;padding:3px';\n this.shadingBtn = this.createColorPickerTemplate(this.elementId + '_tableShading', fillDiv, this.localObj.getConstant('Fill color'), false);\n classList(fillDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-cellbg-clr-picker'], ['e-caret']);\n };\n TableProperties.prototype.initBorderStylesDiv = function () {\n var borderStyleDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(borderStyleDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Border Style');\n borderStyleDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex;' });\n var styleDiv = createElement('div', { styles: 'width:min-content;height:126px', className: 'e-de-grp-btn-ctnr' });\n var div1 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-top' });\n styleDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-middle' });\n styleDiv.appendChild(div2);\n var div3 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-bottom' });\n styleDiv.appendChild(div3);\n if (this.isRtl) {\n div1.classList.add('e-de-rtl');\n div3.classList.add('e-de-rtl');\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.tableOutlineBorder = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-outsideborder e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Outside borders'));\n this.tableAllBorder = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-ctnr-allborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('All borders'));\n this.tableCenterBorder = this.createButtonTemplate(this.elementId + '_tableCenterBorder', 'e-de-ctnr-insideborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside borders'));\n this.tableLeftBorder = this.createButtonTemplate(this.elementId + '_tableLeftBorder', 'e-de-ctnr-leftborders e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Left border'));\n this.tableCenterVerticalBorder = this.createButtonTemplate(this.elementId + '_tableCenterVBorder', 'e-de-ctnr-insideverticalborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside vertical border'));\n this.tableRightBorder = this.createButtonTemplate(this.elementId + '_tableRightBorder', 'e-de-ctnr-rightborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Right border'));\n this.tableTopBorder = this.createButtonTemplate(this.elementId + '_tableTopBorder', 'e-de-ctnr-topborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Top border'));\n this.tableCenterHorizontalBorder = this.createButtonTemplate(this.elementId + '_tableCenterHBorder', 'e-de-ctnr-insidehorizondalborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside horizontal border'));\n this.tableBottomBorder = this.createButtonTemplate(this.elementId + '_tableBottomBorder', 'e-de-ctnr-bottomborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Bottom border'));\n parentDiv.appendChild(styleDiv);\n var styleTypeDiv = createElement('div', { className: 'de-tbl-fill-clr' });\n if (!this.isRtl) {\n styleTypeDiv.classList.add('e-de-stylediv');\n }\n else {\n styleTypeDiv.classList.add('e-de-stylediv-rtl');\n }\n this.borderBtn = this.createColorPickerTemplate(this.elementId + '_tableBorderColor', styleTypeDiv, this.localObj.getConstant('Border color'), true);\n this.borderBtn.value = '#000000';\n styleTypeDiv.firstElementChild.lastElementChild.lastElementChild.style.width = '30px';\n styleTypeDiv.firstElementChild.lastElementChild.firstElementChild.firstElementChild.style.width = '100%';\n classList(styleTypeDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-highlightcolor'], ['e-caret']);\n var borderSizeButton = createElement('button', { id: this.elementId + '_tableBorderSize', className: 'e-de-border-size-button', styles: 'font-size:10px;padding:0px;', attrs: { type: 'button' } });\n styleTypeDiv.appendChild(borderSizeButton);\n this.borderSize = this.createBorderSizeDropDown('e-de-ctnr-strokesize e-icons', borderSizeButton);\n parentDiv.appendChild(styleTypeDiv);\n this.borderSizeColorElement = document.getElementsByClassName('e-de-border-width');\n borderStyleDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellDiv = function () {\n var cellDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(cellDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell');\n cellDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-ctnr-group-btn' });\n parentDiv.classList.add('e-de-cell-div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.horizontalMerge = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-mergecell e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Merge cells'));\n //this.verticalMerge = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Vertical Merge');\n cellDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initInsertOrDelCell = function () {\n var tableOperationDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(tableOperationDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Insert Or Delete');\n tableOperationDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-insert-del-cell', styles: 'display:inline-flex' });\n var div1 = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass });\n if (!this.isRtl) {\n div2.style.marginLeft = '12px';\n }\n else {\n div2.style.marginRight = '12px';\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n parentDiv.appendChild(div2);\n var btnStyle = '';\n this.insertColumnLeft = this.createButtonTemplate(this.elementId + '_insertColumnLeft', 'e-de-ctnr-insertleft e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the left'));\n this.insertColumnRight = this.createButtonTemplate(this.elementId + '_insertColumnRight', 'e-de-ctnr-insertright e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the right'));\n this.insertRowAbove = this.createButtonTemplate(this.elementId + '_insertRowAbove', 'e-de-ctnr-insertabove e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows above'));\n this.insertRowBelow = this.createButtonTemplate(this.elementId + '_insertRowBelow', 'e-de-ctnr-insertbelow e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows below'));\n this.deleteRow = this.createButtonTemplate(this.elementId + '_deleteRow', 'e-de-ctnr-deleterows e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete rows'));\n this.deleteColumn = this.createButtonTemplate(this.elementId + '_deleteColumn', 'e-de-ctnr-deletecolumns e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete columns'));\n tableOperationDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellMargin = function () {\n var cellMarginDiv = createElement('div', { className: 'e-de-property-div-padding e-de-cellmargin-text' });\n this.tableProperties.appendChild(cellMarginDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell Margin');\n cellMarginDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex' });\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n var textboxDivStyle = 'width:' + 48 + 'px';\n var textboxParentDivStyle = 'width:' + 50 + 'px;float:left;';\n this.topMargin = this.createCellMarginTextBox(this.localObj.getConstant('Top'), this.elementId + '_topMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Top margin'));\n this.bottomMargin = this.createCellMarginTextBox(this.localObj.getConstant('Bottom'), this.elementId + '_bottomMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Bottom margin'));\n this.leftMargin = this.createCellMarginTextBox(this.localObj.getConstant('Left'), this.elementId + '_leftMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Left margin'));\n this.rightMargin = this.createCellMarginTextBox(this.localObj.getConstant('Right'), this.elementId + '_rightMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Right margin'), true);\n cellMarginDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initAlignText = function () {\n var alignmentDiv = createElement('div', { className: 'e-de-property-div-padding', styles: 'border-bottom-width:0px' });\n this.tableProperties.appendChild(alignmentDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Align Text');\n alignmentDiv.appendChild(label);\n var parentDiv = createElement('div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var div = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div);\n var btnStyle = '';\n this.alignTop = this.createButtonTemplate(this.elementId + '_alignTop', 'e-de-ctnr-aligntop e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align top'));\n // this.alignCenterVertical = this.createButtonTemplate(this.elementId + '_alignCenterVertical', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Vertical');\n // this.alignRight = this.createButtonTemplate(this.elementId + '_alignRight', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Right');\n this.alignBottom = this.createButtonTemplate(this.elementId + '_alignBottom', 'e-de-ctnr-alignbottom e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align bottom'));\n // this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Horizontal');\n this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-ctnr-aligncenter-table e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align center'));\n this.alignCenterHorizontal.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n alignmentDiv.appendChild(parentDiv);\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createCellMarginTextBox = function (textboxLabel, textboxId, parentDiv, styles, parentStyle, maxValue, toolTipText, isRight) {\n var cellMarginParentDiv = createElement('div', { styles: parentStyle });\n if (!isRight) {\n cellMarginParentDiv.classList.add('e-de-cell-text-box');\n }\n var cellMarginLabel = createElement('label', { className: 'e-de-prop-sub-label' });\n cellMarginLabel.textContent = textboxLabel;\n cellMarginParentDiv.appendChild(cellMarginLabel);\n var cellMarginTextbox = createElement('input', { className: 'e-textbox', id: textboxId, styles: styles });\n cellMarginParentDiv.appendChild(cellMarginTextbox);\n var cellMarginNumericText = new NumericTextBox({ showSpinButton: false, min: 0, format: 'n0', max: maxValue, enableRtl: this.isRtl }, cellMarginTextbox);\n parentDiv.appendChild(cellMarginParentDiv);\n cellMarginTextbox.setAttribute('title', toolTipText);\n return cellMarginNumericText;\n };\n TableProperties.prototype.createBorderSizeDropDown = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'borderSizeTarget', styles: 'display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px; width: 126px; height: auto;',\n id: 'borderSizeListMenu'\n });\n div.appendChild(ulTag);\n var noneOption = this.createDropdownOption(ulTag, this.localObj.getConstant('No Border'));\n noneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('No Border');\n });\n var pixel = this.localObj.getConstant('px');\n var oneOption = this.createDropdownOption(ulTag, '1' + pixel);\n oneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1px');\n });\n var oneHalfOption = this.createDropdownOption(ulTag, '1.5' + pixel);\n oneHalfOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1.5px');\n });\n var twoOption = this.createDropdownOption(ulTag, '2' + pixel);\n twoOption.addEventListener('click', function () {\n _this.onBorderSizeChange('2px');\n });\n var threeOption = this.createDropdownOption(ulTag, '3' + pixel);\n threeOption.addEventListener('click', function () {\n _this.onBorderSizeChange('3px');\n });\n var fourOption = this.createDropdownOption(ulTag, '4' + pixel);\n fourOption.addEventListener('click', function () {\n _this.onBorderSizeChange('4px');\n });\n var fiveOption = this.createDropdownOption(ulTag, '5' + pixel);\n fiveOption.addEventListener('click', function () {\n _this.onBorderSizeChange('5px');\n });\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: 'e-de-prop-bordersize',\n enableRtl: this.isRtl,\n content: '1.5px'\n };\n var dropdown = new DropDownButton(menuOptions);\n dropdown.beforeOpen = function () {\n div.style.display = 'block';\n for (var i = 0; i < _this.borderSizeColorElement.length; i++) {\n _this.borderSizeColorElement[i].style.borderBottomColor = _this.borderColor;\n }\n };\n dropdown.beforeClose = function () {\n div.style.display = 'none';\n };\n dropdown.appendTo(button);\n dropdown.element.setAttribute('title', this.localObj.getConstant('Border width'));\n return dropdown;\n };\n TableProperties.prototype.onBorderSizeChange = function (value) {\n var _this = this;\n this.borderSize.content = value;\n setTimeout(function () {\n _this.tableOutlineBorder.element.focus();\n }, 10);\n };\n TableProperties.prototype.createDropdownOption = function (ulTag, text) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML;\n if (text === 'No Border') {\n innerHTML = '
      ' + text + '
      ';\n }\n else if (text === '1.5px') {\n innerHTML = '
      ' + text + '
      ';\n }\n else {\n innerHTML = '
      ' + text + '
      ';\n }\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createDropDownButton = function (id, styles, parentDiv, iconCss, content, items, target) {\n var buttonElement = createElement('button', { id: id, styles: styles, attrs: { type: 'button' } });\n parentDiv.appendChild(buttonElement);\n var splitButtonClass = 'e-de-prop-splitbutton';\n if (this.isRtl) {\n splitButtonClass = 'e-rtl ' + splitButtonClass;\n }\n /* eslint-disable-next-line max-len */\n var dropDownBtn = new DropDownButton({ iconCss: iconCss, content: content, enableRtl: this.isRtl, cssClass: splitButtonClass }, buttonElement);\n if (items) {\n dropDownBtn.items = items;\n }\n if (target) {\n dropDownBtn.target = target;\n }\n return dropDownBtn;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, styles, toolTipText, content, iconPos) {\n var buttonElement = createElement('Button', { id: id, styles: styles, attrs: { type: 'button' } });\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl, iconPosition: (iconPos ? iconPos : 'Left'),\n content: content ? content : ''\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', toolTipText);\n return btn;\n };\n TableProperties.prototype.createColorPickerTemplate = function (id, divElement, toolTipText, isBorderWidth) {\n var inputElement = createElement('input', { id: id });\n divElement.appendChild(inputElement);\n var cssClass = 'e-de-prop-font-button e-de-prop-font-colorpicker';\n if (isBorderWidth) {\n cssClass = cssClass + ' e-de-border-clr-picker';\n }\n /* eslint-disable-next-line max-len */\n var colorPicker = new ColorPicker({ showButtons: true, cssClass: cssClass, enableRtl: this.isRtl, locale: this.container.locale }, inputElement);\n inputElement.parentElement.setAttribute('title', toolTipText);\n return colorPicker;\n };\n TableProperties.prototype.showTableProperties = function (isShow, propertyType) {\n if (isShow) {\n if (propertyType === 'text') {\n this.propertiesTab.hideTab(1, true);\n }\n else {\n this.propertiesTab.hideTab(1, false);\n if (this.prevContext !== this.documentEditor.selection.contextType) {\n this.propertiesTab.selectedItem = 1;\n }\n }\n this.prevContext = this.documentEditor.selection.contextType;\n this.onSelectionChange();\n this.tableTextProperties.onSelectionChange();\n }\n if (!isShow && this.parentElement.style.display === 'none' || (isShow && this.parentElement.style.display === 'block')) {\n return;\n }\n this.parentElement.style.display = isShow ? 'block' : 'none';\n if (isShow) {\n var tabHeaderHeight = this.parentElement.getElementsByClassName('e-tab-header')[0];\n if (tabHeaderHeight) {\n var paneHeight = this.parentElement.offsetHeight - tabHeaderHeight.offsetHeight;\n this.tableProperties.style.height = paneHeight + 'px';\n this.tableTextProperties.element.style.height = paneHeight + 'px';\n }\n }\n this.documentEditor.resize();\n this.prevContext = this.documentEditor.selection.contextType;\n };\n TableProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.shadingBtn) {\n this.shadingBtn.destroy();\n this.shadingBtn = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderSize) {\n this.borderSize.destroy();\n this.borderSize = undefined;\n }\n if (this.topMargin) {\n this.topMargin.destroy();\n this.topMargin = undefined;\n }\n if (this.bottomMargin) {\n this.bottomMargin.destroy();\n this.bottomMargin = undefined;\n }\n if (this.leftMargin) {\n this.leftMargin.destroy();\n this.leftMargin = undefined;\n }\n if (this.rightMargin) {\n this.rightMargin.destroy();\n this.rightMargin = undefined;\n }\n if (this.tableTextProperties) {\n this.tableTextProperties.destroy();\n this.tableTextProperties = undefined;\n }\n if (this.propertiesTab) {\n this.propertiesTab.destroy();\n this.propertiesTab = undefined;\n }\n if (this.imageProperty) {\n this.imageProperty.destroy();\n this.imageProperty = undefined;\n }\n if (this.tableOutlineBorder) {\n this.tableOutlineBorder.destroy();\n }\n this.tableOutlineBorder = undefined;\n if (this.tableAllBorder) {\n this.tableAllBorder.destroy();\n }\n this.tableAllBorder = undefined;\n if (this.tableCenterBorder) {\n this.tableCenterBorder.destroy();\n }\n this.tableCenterBorder = undefined;\n if (this.tableLeftBorder) {\n this.tableLeftBorder.destroy();\n }\n this.tableLeftBorder = undefined;\n if (this.tableCenterVerticalBorder) {\n this.tableCenterVerticalBorder.destroy();\n }\n this.tableCenterVerticalBorder = undefined;\n if (this.tableRightBorder) {\n this.tableRightBorder.destroy();\n }\n this.tableRightBorder = undefined;\n if (this.tableTopBorder) {\n this.tableTopBorder.destroy();\n }\n this.tableTopBorder = undefined;\n if (this.tableCenterHorizontalBorder) {\n this.tableCenterHorizontalBorder.destroy();\n }\n this.tableCenterHorizontalBorder = undefined;\n if (this.tableBottomBorder) {\n this.tableBottomBorder.destroy();\n }\n this.tableBottomBorder = undefined;\n if (this.horizontalMerge) {\n this.horizontalMerge.destroy();\n }\n this.horizontalMerge = undefined;\n if (this.insertRowAbove) {\n this.insertRowAbove.destroy();\n }\n this.insertRowAbove = undefined;\n if (this.insertRowBelow) {\n this.insertRowBelow.destroy();\n }\n this.insertRowBelow = undefined;\n if (this.insertColumnLeft) {\n this.insertColumnLeft.destroy();\n }\n this.insertColumnLeft = undefined;\n if (this.insertColumnRight) {\n this.insertColumnRight.destroy();\n }\n this.insertColumnRight = undefined;\n if (this.deleteRow) {\n this.deleteRow.destroy();\n }\n this.deleteRow = undefined;\n if (this.deleteColumn) {\n this.deleteColumn.destroy();\n }\n this.deleteColumn = undefined;\n if (this.alignBottom) {\n this.alignBottom.destroy();\n }\n this.alignBottom = undefined;\n if (this.alignCenterHorizontal) {\n this.alignCenterHorizontal.destroy();\n }\n this.alignCenterHorizontal = undefined;\n if (this.alignTop) {\n this.alignTop.destroy();\n }\n this.alignTop = undefined;\n this.groupButtonClass = undefined;\n this.borderColor = undefined;\n this.elementId = undefined;\n };\n return TableProperties;\n}());\nexport { TableProperties };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Represents document editor status bar.\n *\n * @private\n */\nvar StatusBar = /** @class */ (function () {\n function StatusBar(parentElement, docEditor) {\n this.startPage = 1;\n this.statusBarDiv = parentElement;\n this.container = docEditor;\n this.initializeStatusBar();\n this.wireEvents();\n }\n Object.defineProperty(StatusBar.prototype, \"documentEditor\", {\n get: function () {\n return this.container ? this.container.documentEditor : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StatusBar.prototype, \"editorPageCount\", {\n get: function () {\n return this.documentEditor ? this.documentEditor.pageCount : 1;\n },\n enumerable: true,\n configurable: true\n });\n StatusBar.prototype.initializeStatusBar = function () {\n var _this = this;\n var isRtl = this.container.enableRtl;\n this.documentEditor.enableSpellCheck = (this.container.enableSpellCheck) ? true : false;\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var styles = isRtl ? 'padding-right:16px' : 'padding-left:16px';\n var div = createElement('div', { className: (this.container.enableSpellCheck) ? 'e-de-ctnr-pg-no' : 'e-de-ctnr-pg-no-spellout', styles: styles });\n this.statusBarDiv.appendChild(div);\n var label = createElement('span');\n label.textContent = this.localObj.getConstant('Page') + ' ';\n div.appendChild(label);\n this.pageNumberInput = createElement('input', { styles: 'text-transform:capitalize;white-space:pre;overflow:hidden;user-select:none;cursor:text', attrs: { type: 'text' }, className: 'e-de-pagenumber-input' });\n this.editablePageNumber = createElement('div', { styles: 'display: inline-flex', className: 'e-input e-de-pagenumber-text' });\n this.editablePageNumber.appendChild(this.pageNumberInput);\n var pageNumberOfLabelStyle = \"\";\n if (isRtl) {\n label.style.marginLeft = '6px';\n this.editablePageNumber.style.marginLeft = '6px';\n pageNumberOfLabelStyle = 'padding-left:5px';\n }\n else {\n label.style.marginRight = '6px';\n this.editablePageNumber.style.marginRight = '6px';\n pageNumberOfLabelStyle = 'padding-right:5px';\n }\n this.updatePageNumber();\n div.appendChild(this.editablePageNumber);\n this.editablePageNumber.setAttribute('title', this.localObj.getConstant('Current Page Number'));\n var label1 = createElement('span', { styles: pageNumberOfLabelStyle });\n label1.textContent = ' ' + this.localObj.getConstant('of') + ' ';\n div.appendChild(label1);\n this.pageCount = createElement('span');\n div.appendChild(this.pageCount);\n this.updatePageCount();\n if (this.documentEditor.enableSpellCheck) {\n var verticalLine = createElement('div', { className: 'e-de-statusbar-separator' });\n this.statusBarDiv.appendChild(verticalLine);\n var spellCheckBtn = this.addSpellCheckElement();\n this.spellCheckButton.appendTo(spellCheckBtn);\n }\n this.pageButton = this.createButtonTemplate((this.container.enableSpellCheck) ? 'e-de-statusbar-pageweb e-btn-pageweb-spellcheck' : 'e-de-statusbar-pageweb', 'e-de-printlayout e-icons', 'Print layout', this.statusBarDiv, this.pageButton, (this.documentEditor.layoutType === 'Pages') ? true : false);\n this.webButton = this.createButtonTemplate('e-de-statusbar-pageweb', 'e-de-weblayout e-icons', 'Web layout', this.statusBarDiv, this.webButton, (this.documentEditor.layoutType === 'Continuous') ? true : false);\n this.pageButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Pages';\n _this.addRemoveClass(_this.pageButton, _this.webButton);\n });\n this.webButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Continuous';\n _this.addRemoveClass(_this.webButton, _this.pageButton);\n });\n var zoomBtn = createElement('button', {\n className: 'e-de-statusbar-zoom', attrs: { type: 'button' }\n });\n this.statusBarDiv.appendChild(zoomBtn);\n zoomBtn.setAttribute('title', this.localObj.getConstant('ZoomLevelTooltip'));\n var items = [\n {\n text: '200%'\n },\n {\n text: '175%'\n },\n {\n text: '150%'\n },\n {\n text: '125%'\n },\n {\n text: '100%'\n },\n {\n text: '75%'\n },\n {\n text: '50%'\n },\n {\n text: '25%'\n },\n {\n separator: true\n },\n {\n text: this.localObj.getConstant('Fit one page')\n },\n {\n text: this.localObj.getConstant('Fit page width')\n }\n ];\n this.zoom = new DropDownButton({ content: '100%', items: items, enableRtl: this.container.enableRtl, select: this.onZoom.bind(this) });\n this.zoom.isStringTemplate = true;\n this.zoom.appendTo(zoomBtn);\n };\n StatusBar.prototype.addSpellCheckElement = function () {\n var _this = this;\n var spellCheckBtn = createElement('button', {\n className: 'e-de-statusbar-spellcheck'\n });\n this.statusBarDiv.appendChild(spellCheckBtn);\n spellCheckBtn.setAttribute('title', 'Spell Checker options');\n var spellCheckItems = [\n {\n text: this.localObj.getConstant('Spell Check')\n },\n {\n text: this.localObj.getConstant('Underline errors')\n }\n ];\n this.spellCheckButton = new DropDownButton({\n content: this.localObj.getConstant('Spelling'), items: spellCheckItems, enableRtl: this.container.enableRtl, select: this.onSpellCheck.bind(this),\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n if (isNullOrUndefined(_this.currentLanguage)) {\n _this.currentLanguage = _this.documentEditor.spellChecker.languageID;\n }\n if (isNullOrUndefined(_this.allowSuggestion)) {\n _this.allowSuggestion = _this.documentEditor.spellChecker.allowSpellCheckAndSuggestion;\n }\n var span = args.element.children[0];\n if (args.item.text === _this.localObj.getConstant('Spell Check') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellChecker.enableSpellCheck) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-spellcheck-item');\n }\n else if (args.item.text === _this.localObj.getConstant('Underline errors') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellChecker.enableSpellCheck && !_this.documentEditor.spellChecker.removeUnderline) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-underline-item');\n }\n else {\n span.style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-spellcheck-item');\n args.element.children[0].classList.remove('e-de-selected-underline-item');\n }\n }\n });\n return spellCheckBtn;\n };\n StatusBar.prototype.onZoom = function (args) {\n this.setZoomValue(args.item.text);\n this.updateZoomContent();\n };\n StatusBar.prototype.onSpellCheck = function (args) {\n this.setSpellCheckValue(args.item.text);\n };\n StatusBar.prototype.updateZoomContent = function () {\n this.zoom.content = Math.round(this.documentEditor.zoomFactor * 100) + '%';\n };\n StatusBar.prototype.setSpellCheckValue = function (text) {\n this.spellCheckButton.content = this.localObj.getConstant('Spelling');\n if (text.match(this.localObj.getConstant('Spell Check'))) {\n this.documentEditor.spellChecker.enableSpellCheck = (this.documentEditor.spellChecker.enableSpellCheck) ? false : true;\n this.documentEditor.documentHelper.triggerSpellCheck = false;\n this.documentEditor.documentHelper.triggerElementsOnLoading = false;\n }\n else if (text.match(this.localObj.getConstant('Underline errors'))) {\n if (this.documentEditor.enableSpellCheck && this.documentEditor.spellChecker.enableSpellCheck) {\n this.documentEditor.spellChecker.removeUnderline = (this.documentEditor.spellChecker.removeUnderline) ? false : true;\n }\n }\n };\n StatusBar.prototype.setZoomValue = function (text) {\n if (text.match(this.localObj.getConstant('Fit one page'))) {\n this.documentEditor.fitPage('FitOnePage');\n }\n else if (text.match(this.localObj.getConstant('Fit page width'))) {\n this.documentEditor.fitPage('FitPageWidth');\n }\n else {\n this.documentEditor.zoomFactor = parseInt(text, 10) / 100;\n }\n };\n /**\n * Updates page count.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageCount = function () {\n this.pageCount.textContent = this.editorPageCount.toString();\n };\n /**\n * Updates page number.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageNumber = function () {\n this.pageNumberInput.value = this.startPage.toString();\n this.updatePageNumberWidth();\n };\n StatusBar.prototype.updatePageNumberOnViewChange = function (args) {\n if (this.documentEditor.selection\n && this.documentEditor.selection.startPage >= args.startPage && this.documentEditor.selection.startPage <= args.endPage) {\n this.startPage = this.documentEditor.selection.startPage;\n }\n else {\n this.startPage = args.startPage;\n }\n this.updatePageNumber();\n this.updatePageCount();\n };\n StatusBar.prototype.wireEvents = function () {\n var _this = this;\n this.pageNumberInput.addEventListener('keydown', function (e) {\n if (e.which === 13) {\n e.preventDefault();\n var pageNumber = parseInt(_this.pageNumberInput.value, 10);\n if (pageNumber > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n else {\n if (_this.documentEditor.selection) {\n _this.documentEditor.selection.goToPage(parseInt(_this.pageNumberInput.value, 10));\n }\n else {\n _this.documentEditor.scrollToPage(parseInt(_this.pageNumberInput.value, 10));\n }\n }\n _this.pageNumberInput.contentEditable = 'false';\n if (_this.pageNumberInput.value === '') {\n _this.updatePageNumber();\n }\n }\n if (e.which > 64) {\n e.preventDefault();\n }\n });\n this.pageNumberInput.addEventListener('keyup', function () {\n _this.updatePageNumberWidth();\n });\n this.pageNumberInput.addEventListener('blur', function () {\n if (_this.pageNumberInput.value === '' || parseInt(_this.pageNumberInput.value, 10) > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n _this.pageNumberInput.contentEditable = 'false';\n });\n this.pageNumberInput.addEventListener('focus', function () {\n _this.pageNumberInput.select();\n });\n };\n StatusBar.prototype.updatePageNumberWidth = function () {\n if (this.pageNumberInput) {\n this.pageNumberInput.style.width = this.pageNumberInput.value.length >= 3 ? '30px' : '22px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.toggleWebLayout = function () {\n this.addRemoveClass(this.pageButton, this.webButton);\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.togglePageLayout = function () {\n this.addRemoveClass(this.webButton, this.pageButton);\n };\n StatusBar.prototype.addRemoveClass = function (addToElement, removeFromElement) {\n addToElement.classList.add('e-btn-toggle');\n if (removeFromElement.classList.contains('e-btn-toggle')) {\n removeFromElement.classList.remove('e-btn-toggle');\n }\n };\n /* eslint-disable-next-line max-len */\n StatusBar.prototype.createButtonTemplate = function (className, iconcss, toolTipText, div, appendDiv, toggle) {\n appendDiv = createElement('Button', { className: className, attrs: { type: 'button' } });\n div.appendChild(appendDiv);\n var btn = new Button({\n cssClass: className, iconCss: iconcss, enableRtl: this.container.enableRtl\n });\n if (toggle === true) {\n appendDiv.classList.add('e-btn-toggle');\n }\n btn.appendTo(appendDiv);\n appendDiv.setAttribute('title', this.localObj.getConstant(toolTipText));\n if (toolTipText === 'Web layout') {\n this.webBtn = btn;\n }\n else {\n this.pageBtn = btn;\n }\n return appendDiv;\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.destroy = function () {\n if (this.zoom) {\n this.zoom.destroy();\n this.zoom = undefined;\n }\n if (this.spellCheckButton) {\n this.spellCheckButton.destroy();\n this.spellCheckButton = undefined;\n }\n if (this.pageBtn) {\n this.pageBtn.destroy();\n this.pageBtn = undefined;\n }\n if (this.webBtn) {\n this.webBtn.destroy();\n this.webBtn = undefined;\n }\n this.pageButton = undefined;\n this.webButton = undefined;\n this.pageNumberInput = undefined;\n this.statusBarDiv = undefined;\n this.pageCount = undefined;\n this.editablePageNumber = undefined;\n this.localObj = undefined;\n this.container = undefined;\n };\n return StatusBar;\n}());\nexport { StatusBar };\n","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nimport { Component, Property, NotifyPropertyChanges, L10n, Complex, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { DocumentEditor, DocumentEditorSettings, DocumentSettings } from '../document-editor/document-editor';\nimport { HeaderFooterProperties } from './properties-pane/header-footer-pane';\nimport { ImageProperties } from './properties-pane/image-properties-pane';\nimport { TocProperties } from './properties-pane/table-of-content-pane';\nimport { TableProperties } from './properties-pane/table-properties-pane';\nimport { StatusBar } from './properties-pane/status-bar';\nimport { createSpinner } from '@syncfusion/ej2-popups';\nimport { internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent } from '../document-editor/base/constants';\nimport { HelperMethods } from '../index';\n/**\n * Document Editor container component.\n */\nvar DocumentEditorContainer = /** @class */ (function (_super) {\n __extends(DocumentEditorContainer, _super);\n /**\n * Initialize the constructor of DocumentEditorContainer\n *\n * @param { DocumentEditorContainerModel } options - Specified DocumentEditorContainer model as options.\n * @param { string | HTMLElement }element - Specifies the element that is rendered as a DocumentEditorContainer.\n */\n function DocumentEditorContainer(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @private\n */\n _this.previousContext = '';\n /**\n * @private\n */\n _this.showHeaderProperties = true;\n /**\n * default locale\n *\n * @private\n */\n _this.defaultLocale = {\n 'New': 'New',\n 'Insert Footnote': 'Insert Footnote',\n 'Insert Endnote': 'Insert Endnote',\n 'Footnote Tooltip': 'Insert Footnote (Alt+Ctrl+F).',\n 'Endnote Tooltip': 'Insert Endnote (Alt+Ctrl+D).',\n 'Open': 'Open',\n 'Undo': 'Undo',\n 'Redo': 'Redo',\n 'Image': 'Image',\n 'Table': 'Table',\n 'Link': 'Link',\n 'Bookmark': 'Bookmark',\n 'Table of Contents': 'Table of Contents',\n 'HEADING - - - - 1': 'HEADING - - - - 1',\n 'HEADING - - - - 2': 'HEADING - - - - 2',\n 'HEADING - - - - 3': 'HEADING - - - - 3',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Page Setup': 'Page Setup',\n 'Page Number': 'Page Number',\n 'Break': 'Break',\n 'Find': 'Find',\n 'Local Clipboard': 'Local Clipboard',\n 'Restrict Editing': 'Restrict Editing',\n 'Upload from computer': 'Upload from computer',\n 'By URL': 'By URL',\n 'Page Break': 'Page Break',\n 'Show properties pane': 'Show properties pane',\n 'Hide properties pane': 'Hide properties pane',\n 'Section Break': 'Section Break',\n 'Header And Footer': 'Header & Footer',\n 'Options': 'Options',\n 'Levels': 'Levels',\n 'Different First Page': 'Different First Page',\n 'Different header and footer for odd and even pages': 'Different header and footer for odd and even pages.',\n 'Different Odd And Even Pages': 'Different Odd & Even Pages',\n 'Different header and footer for first page': 'Different header and footer for first page.',\n 'Position': 'Position',\n 'Header from Top': 'Header from Top',\n 'Footer from Bottom': 'Footer from Bottom',\n 'Distance from top of the page to top of the header': 'Distance from top of the page to top of the header.',\n 'Distance from bottom of the page to bottom of the footer': 'Distance from bottom of the page to bottom of the footer.',\n 'Aspect ratio': 'Aspect ratio',\n 'W': 'W',\n 'H': 'H',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Text': 'Text',\n 'Paragraph': 'Paragraph',\n 'Fill': 'Fill',\n 'Fill color': 'Fill color',\n 'Border Style': 'Border Style',\n 'Outside borders': 'Outside borders',\n 'All borders': 'All borders',\n 'Inside borders': 'Inside borders',\n 'Left border': 'Left border',\n 'Inside vertical border': 'Inside vertical border',\n 'Right border': 'Right border',\n 'Top border': 'Top border',\n 'Inside horizontal border': 'Inside horizontal border',\n 'Bottom border': 'Bottom border',\n 'Border color': 'Border color',\n 'Border width': 'Border width',\n 'Cell': 'Cell',\n 'Merge cells': 'Merge cells',\n 'Insert Or Delete': 'Insert / Delete',\n 'Insert columns to the left': 'Insert columns to the left',\n 'Insert columns to the right': 'Insert columns to the right',\n 'Insert rows above': 'Insert rows above',\n 'Insert rows below': 'Insert rows below',\n 'Delete rows': 'Delete rows',\n 'Delete columns': 'Delete columns',\n 'Cell Margin': 'Cell Margin',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Left': 'Left',\n 'Right': 'Right',\n 'Align Text': 'Align Text',\n 'Align top': 'Align top',\n 'Align bottom': 'Align bottom',\n 'Align center': 'Align center',\n 'Number of heading or outline levels to be shown in table of contents': 'Number of heading or outline levels to be shown in table of contents.',\n 'Show page numbers': 'Show page numbers',\n 'Show page numbers in table of contents': 'Show page numbers in table of contents.',\n 'Right align page numbers': 'Right align page numbers',\n 'Right align page numbers in table of contents': 'Right align page numbers in table of contents.',\n 'Use hyperlinks': 'Use hyperlinks',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers.',\n 'Font': 'Font',\n 'Font Size': 'Font Size',\n 'Font color': 'Font color',\n 'Text highlight color': 'Text highlight color',\n 'Clear all formatting': 'Clear all formatting',\n 'Bold Tooltip': 'Bold (Ctrl+B)',\n 'Italic Tooltip': 'Italic (Ctrl+I)',\n 'Underline Tooltip': 'Underline (Ctrl+U)',\n 'Strikethrough': 'Strikethrough',\n 'Superscript Tooltip': 'Superscript (Ctrl+Shift++)',\n 'Subscript Tooltip': 'Subscript (Ctrl+=)',\n 'Align left Tooltip': 'Align left (Ctrl+L)',\n 'Center Tooltip': 'Center (Ctrl+E)',\n 'Align right Tooltip': 'Align right (Ctrl+R)',\n 'Justify Tooltip': 'Justify (Ctrl+J)',\n 'Decrease indent': 'Decrease indent',\n 'Increase indent': 'Increase indent',\n 'Line spacing': 'Line spacing',\n 'Bullets': 'Bullets',\n 'Numbering': 'Numbering',\n 'Styles': 'Styles',\n 'Manage Styles': 'Manage Styles',\n 'Page': 'Page',\n 'of': 'of',\n 'Fit one page': 'Fit one page',\n 'Spell Check': 'Spell Check',\n 'Spelling': 'Spelling',\n 'Underline errors': 'Underline errors',\n 'Fit page width': 'Fit page width',\n 'Update': 'Update',\n 'Cancel': 'Cancel',\n 'Insert': 'Insert',\n 'No Border': 'No Border',\n 'Create a new document': 'Create a new document.',\n 'Open a document': 'Open a document.',\n 'Undo Tooltip': 'Undo the last operation (Ctrl+Z).',\n 'Redo Tooltip': 'Redo the last operation (Ctrl+Y).',\n 'Insert inline picture from a file': 'Insert inline picture from a file.',\n 'Insert a table into the document': 'Insert a table into the document',\n 'Create Hyperlink': 'Create a link in your document for quick access to web pages and files (Ctrl+K).',\n 'Insert a bookmark in a specific place in this document': 'Insert a bookmark in a specific place in this document.',\n 'Provide an overview of your document by adding a table of contents': 'Provide an overview of your document by adding a table of contents.',\n 'Add or edit the header': 'Add or edit the header.',\n 'Add or edit the footer': 'Add or edit the footer.',\n 'Open the page setup dialog': 'Open the page setup dialog.',\n 'Add page numbers': 'Add page numbers.',\n 'Find Text': 'Find text in the document (Ctrl+F).',\n 'Toggle between the internal clipboard and system clipboard': 'Toggle between the internal clipboard and system clipboard.
      ' +\n 'Access to system clipboard through script is denied due to browsers security policy. Instead,
      ' +\n ' 1. You can enable internal clipboard to cut, copy and paste within the component.
      ' +\n ' 2. You can use the keyboard shortcuts (Ctrl+X, Ctrl+C and Ctrl+V) to cut, copy and paste with system clipboard.',\n 'Current Page Number': 'The current page number in the document. Click or tap to navigate specific page.',\n 'Read only': 'Read only',\n 'Protections': 'Protections',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Single': 'Single',\n 'Double': 'Double',\n 'New comment': 'New comment',\n 'Comments': 'Comments',\n 'Print layout': 'Print layout',\n 'Web layout': 'Web layout',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'DropDown': 'Drop-Down',\n 'Update Fields': 'Update Fields',\n 'Update cross reference fields': 'Update cross reference fields',\n 'Track Changes': 'Keep track of the changes made in the document',\n 'TrackChanges': 'Track Changes',\n 'AllCaps': 'AllCaps',\n 'Change case Tooltip': 'Change case',\n 'UPPERCASE': 'UPPERCASE',\n 'No color': 'No color',\n 'Top margin': 'Top margin',\n 'Bottom margin': 'Bottom margin',\n 'Left margin': 'Left margin',\n 'Right margin': 'Right margin',\n 'Normal': 'Normal',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'ZoomLevelTooltip': 'Zoom level. Click or tap to open the Zoom options.',\n 'None': 'None',\n 'Borders': 'Borders'\n };\n return _this;\n }\n Object.defineProperty(DocumentEditorContainer.prototype, \"documentEditor\", {\n /* eslint-enable */\n /**\n * Gets DocumentEditor instance.\n *\n * @aspType DocumentEditor\n * @returns {DocumentEditor} - Returns the DocumentEditor instance.\n */\n get: function () {\n return this.documentEditorInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditorContainer.prototype, \"toolbar\", {\n /**\n * Gets toolbar instance.\n *\n * @returns {Toolbar} - Returns toolbar module.\n */\n get: function () {\n return this.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n DocumentEditorContainer.prototype.getModuleName = function () {\n return 'DocumentEditorContainer';\n };\n /**\n * @private\n */\n /* eslint-disable */\n DocumentEditorContainer.prototype.onPropertyChanged = function (newModel, oldModel) {\n for (var _i = 0, _a = Object.keys(newModel); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'restrictEditing':\n this.restrictEditingToggleHelper(newModel.restrictEditing);\n break;\n case 'showPropertiesPane':\n this.showHidePropertiesPane(newModel.showPropertiesPane);\n break;\n case 'enableTrackChanges':\n if (this.documentEditor.documentHelper.isTrackedOnlyMode && !newModel.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n if (this.documentEditor) {\n this.documentEditor.enableTrackChanges = newModel.enableTrackChanges;\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(newModel.enableTrackChanges);\n }\n if (this.documentEditor.enableTrackChanges) {\n this.documentEditor.documentHelper.showRevision = true;\n }\n this.documentEditor.resize();\n }\n break;\n case 'enableLocalPaste':\n if (this.documentEditor) {\n this.documentEditor.enableLocalPaste = newModel.enableLocalPaste;\n }\n break;\n case 'serviceUrl':\n if (this.documentEditor) {\n this.documentEditor.serviceUrl = newModel.serviceUrl;\n }\n break;\n case 'serverActionSettings':\n if (this.documentEditor) {\n this.setserverActionSettings();\n }\n break;\n case 'zIndex':\n if (this.documentEditor) {\n this.documentEditor.zIndex = newModel.zIndex;\n }\n break;\n case 'headers':\n if (this.documentEditor) {\n this.documentEditor.headers = newModel.headers;\n }\n break;\n case 'locale':\n case 'enableRtl':\n this.refresh();\n break;\n case 'enableComment':\n if (this.documentEditor) {\n this.documentEditor.enableComment = newModel.enableComment;\n }\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(newModel.enableComment);\n }\n break;\n case 'enableSpellCheck':\n if (this.documentEditor) {\n this.documentEditor.enableSpellCheck = newModel.enableSpellCheck;\n }\n break;\n case 'documentSettings':\n if (this.documentEditor) {\n this.documentEditor.documentSettings.compatibilityMode = this.documentSettings.compatibilityMode;\n }\n break;\n case 'documentEditorSettings':\n if (this.documentEditor) {\n this.customizeDocumentEditorSettings();\n }\n break;\n case 'toolbarItems':\n if (this.toolbarModule) {\n this.toolbarModule.reInitToolbarItems(newModel.toolbarItems);\n }\n break;\n case 'currentUser':\n if (this.documentEditor) {\n this.documentEditor.currentUser = newModel.currentUser;\n }\n break;\n case 'userColor':\n if (this.documentEditor) {\n this.documentEditor.userColor = newModel.userColor;\n }\n break;\n case 'layoutType':\n if (this.documentEditor) {\n this.documentEditor.layoutType = newModel.layoutType;\n if (newModel.layoutType === 'Continuous') {\n this.statusBar.togglePageLayout();\n }\n else {\n this.statusBar.toggleWebLayout();\n }\n }\n break;\n case 'enableToolbar':\n this.createToolbarContainer(this.enableRtl, true);\n if (newModel.enableToolbar && this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n this.toolbarModule.toggleTrackChanges(this.enableTrackChanges);\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.preRender = function () {\n this.localObj = new L10n('documenteditorcontainer', this.defaultLocale, this.locale);\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n this.initContainerElement();\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.render = function () {\n if (this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n }\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n this.element.style.minHeight = '320px';\n this.initializeDocumentEditor();\n if (this.restrictEditing) {\n this.restrictEditingToggleHelper(this.restrictEditing);\n }\n this.headerFooterProperties = new HeaderFooterProperties(this, this.enableRtl);\n this.imageProperties = new ImageProperties(this, this.enableRtl);\n this.tocProperties = new TocProperties(this, this.enableRtl);\n this.tableProperties = new TableProperties(this, this.imageProperties, this.enableRtl);\n this.statusBar = new StatusBar(this.statusBarElement, this);\n // Waiting popup\n createSpinner({ target: this.containerTarget, cssClass: 'e-spin-overlay' });\n this.setserverActionSettings();\n this.renderComplete();\n };\n DocumentEditorContainer.prototype.restrictEditingToggleHelper = function (restrictEditing) {\n this.documentEditor.isReadOnly = restrictEditing;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!restrictEditing, false);\n this.toolbarModule.toggleRestrictEditing(restrictEditing);\n }\n this.showPropertiesPane = !restrictEditing;\n this.showHidePropertiesPane(!restrictEditing);\n this.documentEditor.trackChangesPane.enableDisableButton(!restrictEditing && !this.documentEditor.documentHelper.isDocumentProtected);\n };\n DocumentEditorContainer.prototype.setFormat = function () {\n if (this.characterFormat) {\n this.documentEditor.setDefaultCharacterFormat(this.characterFormat);\n }\n if (this.paragraphFormat) {\n this.documentEditor.setDefaultParagraphFormat(this.paragraphFormat);\n }\n if (this.sectionFormat) {\n this.documentEditor.setDefaultSectionFormat(this.sectionFormat);\n }\n };\n DocumentEditorContainer.prototype.setserverActionSettings = function () {\n if (this.serviceUrl) {\n this.documentEditor.serviceUrl = this.serviceUrl;\n }\n if (this.serverActionSettings.spellCheck) {\n this.documentEditor.serverActionSettings.spellCheck = this.serverActionSettings.spellCheck;\n }\n if (this.serverActionSettings.restrictEditing) {\n this.documentEditor.serverActionSettings.restrictEditing = this.serverActionSettings.restrictEditing;\n }\n if (this.serverActionSettings.systemClipboard) {\n this.documentEditor.serverActionSettings.systemClipboard = this.serverActionSettings.systemClipboard;\n }\n if (this.headers) {\n this.documentEditor.headers = this.headers;\n }\n };\n DocumentEditorContainer.prototype.customizeDocumentEditorSettings = function () {\n if (this.documentEditorSettings.formFieldSettings) {\n var settings = this.documentEditorSettings.formFieldSettings;\n var documentEditor = this.documentEditor;\n if (!isNullOrUndefined(settings.applyShading)) {\n documentEditor.documentEditorSettings.formFieldSettings.applyShading = settings.applyShading;\n }\n if (!isNullOrUndefined(settings.formFillingMode)) {\n documentEditor.documentEditorSettings.formFieldSettings.formFillingMode = settings.formFillingMode;\n }\n if (!isNullOrUndefined(settings.formattingExceptions)) {\n documentEditor.documentEditorSettings.formFieldSettings.formattingExceptions = settings.formattingExceptions;\n }\n if (!isNullOrUndefined(settings.selectionColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.selectionColor = settings.selectionColor;\n }\n if (!isNullOrUndefined(settings.shadingColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.shadingColor = settings.shadingColor;\n }\n }\n if (this.documentEditorSettings.searchHighlightColor) {\n this.documentEditor.documentEditorSettings.searchHighlightColor = this.documentEditorSettings.searchHighlightColor;\n }\n if (this.documentEditorSettings.fontFamilies) {\n this.documentEditor.documentEditorSettings.fontFamilies = this.documentEditorSettings.fontFamilies;\n }\n if (this.documentEditorSettings.collaborativeEditingSettings) {\n this.documentEditor.documentEditorSettings.collaborativeEditingSettings = this.documentEditorSettings.collaborativeEditingSettings;\n }\n if (this.documentEditorSettings.printDevicePixelRatio) {\n this.documentEditor.documentEditorSettings.printDevicePixelRatio = this.documentEditorSettings.printDevicePixelRatio;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.enableOptimizedTextMeasuring)) {\n this.documentEditor.documentEditorSettings.enableOptimizedTextMeasuring = this.documentEditorSettings.enableOptimizedTextMeasuring;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.maximumRows)) {\n this.documentEditor.documentEditorSettings.maximumRows = this.documentEditorSettings.maximumRows;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.getPersistData = function () {\n return 'documenteditor-container';\n };\n /* eslint-disable */\n DocumentEditorContainer.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableToolbar) {\n modules.push({\n member: 'toolbar', args: [this]\n });\n }\n return modules;\n };\n DocumentEditorContainer.prototype.initContainerElement = function () {\n // Toolbar container\n var isRtl = this.enableRtl;\n this.containerTarget = this.createElement('div', { className: 'e-de-ctn' });\n this.containerTarget.contentEditable = 'false';\n this.createToolbarContainer(isRtl);\n var propertiesPaneContainerBorder;\n if (!isRtl) {\n propertiesPaneContainerBorder = 'e-de-pane';\n }\n else {\n propertiesPaneContainerBorder = 'e-de-pane-rtl';\n }\n this.propertiesPaneContainer = this.createElement('div', { className: propertiesPaneContainerBorder, styles: 'display:none' });\n this.editorContainer.appendChild(this.propertiesPaneContainer);\n this.containerTarget.appendChild(this.editorContainer);\n this.statusBarElement = this.createElement('div', { className: 'e-de-status-bar' });\n if (isRtl) {\n this.statusBarElement.style.direction = 'rtl';\n }\n this.containerTarget.appendChild(this.statusBarElement);\n this.element.appendChild(this.containerTarget);\n };\n DocumentEditorContainer.prototype.createToolbarContainer = function (isRtl, isCustom) {\n if (isNullOrUndefined((this.editorContainer))) {\n this.editorContainer = this.createElement('div', { className: 'e-de-tool-ctnr-properties-pane' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n }\n if (this.enableToolbar) {\n this.toolbarContainer = this.createElement('div', { className: 'e-de-ctnr-toolbar' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n if (isCustom) {\n this.containerTarget.insertBefore(this.toolbarContainer, this.containerTarget.firstChild);\n }\n else {\n this.containerTarget.appendChild(this.toolbarContainer);\n }\n this.editorContainer.classList.remove('e-de-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-tool-ctnr-properties-pane');\n }\n else {\n this.editorContainer.classList.remove('e-de-tool-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-ctnr-properties-pane');\n }\n };\n DocumentEditorContainer.prototype.initializeDocumentEditor = function () {\n var id = this.element.id + '_editor';\n var documentEditorTarget = this.createElement('div', { id: id, styles: 'width:100%;height:100%' });\n this.documentEditorInternal = new DocumentEditor({\n isReadOnly: false, enableRtl: this.enableRtl,\n selectionChange: this.onSelectionChange.bind(this),\n contentChange: this.onContentChange.bind(this),\n documentChange: this.onDocumentChange.bind(this),\n requestNavigate: this.onRequestNavigate.bind(this),\n viewChange: this.onViewChange.bind(this),\n customContextMenuSelect: this.onCustomContextMenuSelect.bind(this),\n customContextMenuBeforeOpen: this.onCustomContextMenuBeforeOpen.bind(this),\n beforePaneSwitch: this.onBeforePaneSwitch.bind(this),\n commentBegin: this.onCommentBegin.bind(this),\n commentEnd: this.onCommentEnd.bind(this),\n commentDelete: this.onCommentDelete.bind(this),\n beforeCommentAction: this.onCommentAction.bind(this),\n trackChange: this.onTrackChange.bind(this),\n serviceFailure: this.fireServiceFailure.bind(this),\n beforeXmlHttpRequestSend: this.beforeXmlHttpSend.bind(this),\n locale: this.locale,\n acceptTab: true,\n zIndex: this.zIndex,\n enableLocalPaste: this.enableLocalPaste,\n layoutType: this.layoutType,\n pageOutline: '#E0E0E0',\n currentUser: this.currentUser,\n userColor: this.userColor,\n height: '100%',\n width: '100%',\n enableTrackChanges: this.enableTrackChanges,\n showRevisions: true,\n enableLockAndEdit: this.enableLockAndEdit\n });\n this.wireEvents();\n this.customizeDocumentEditorSettings();\n this.documentEditor.enableAllModules();\n this.documentEditor.enableComment = this.enableComment;\n this.editorContainer.insertBefore(documentEditorTarget, this.editorContainer.firstChild);\n this.setFormat();\n this.documentEditor.appendTo(documentEditorTarget);\n this.documentEditor.resize();\n };\n DocumentEditorContainer.prototype.wireEvents = function () {\n this.documentEditor.on(internalZoomFactorChange, this.onZoomFactorChange, this);\n this.documentEditor.on(internalviewChangeEvent, this.onViewChange, this);\n this.documentEditor.on(protectionTypeChangeEvent, this.showPropertiesPaneOnSelection, this);\n };\n DocumentEditorContainer.prototype.unWireEvents = function () {\n if (isNullOrUndefined(this.documentEditor)) {\n return;\n }\n else {\n if (this.documentEditor.isDestroyed) {\n return;\n }\n }\n this.documentEditor.off(internalZoomFactorChange, this.onZoomFactorChange);\n this.documentEditor.off(internalviewChangeEvent, this.onViewChange);\n };\n DocumentEditorContainer.prototype.onCommentBegin = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(false);\n }\n };\n DocumentEditorContainer.prototype.onCommentEnd = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(true && this.enableComment);\n }\n };\n DocumentEditorContainer.prototype.beforeXmlHttpSend = function (args) {\n this.trigger(beforeXmlHttpRequestSend, args);\n };\n DocumentEditorContainer.prototype.onCommentDelete = function (args) {\n this.trigger(commentDeleteEvent, args);\n };\n DocumentEditorContainer.prototype.onCommentAction = function (args) {\n this.trigger(beforeCommentActionEvent, args);\n };\n DocumentEditorContainer.prototype.onTrackChange = function (args) {\n this.trigger(trackChangeEvent, args);\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(args.isTrackChangesEnabled);\n }\n };\n DocumentEditorContainer.prototype.onBeforePaneSwitch = function (args) {\n this.trigger(beforePaneSwitchEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showHidePropertiesPane = function (show) {\n if (this.showPropertiesPane) {\n this.showPropertiesPaneOnSelection();\n }\n this.propertiesPaneContainer.style.display = show ? 'block' : 'none';\n if (this.toolbarModule) {\n this.toolbarModule.propertiesPaneButton.element.style.opacity = show ? '1' : '0.5';\n }\n this.documentEditor.resize();\n };\n /**\n * Resizes the container component and its sub elements based on given size or client size.\n * @param width\n * @param height\n */\n DocumentEditorContainer.prototype.resize = function (width, height) {\n if (this.element) {\n if (isNullOrUndefined(height) && this.element && this.element.parentElement) {\n height = this.element.parentElement.clientHeight;\n }\n if (isNullOrUndefined(width) && this.element && this.element.parentElement) {\n width = this.element.parentElement.clientWidth;\n }\n if (!isNullOrUndefined(width) && width > 200) {\n this.width = width.toString();\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.height = height.toString();\n this.element.style.height = height + 'px';\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n if (this.toolbarModule) {\n this.toolbarModule.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onContentChange = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n var eventArgs = { source: this };\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onDocumentChange = function () {\n this.enableTrackChanges = this.documentEditor.enableTrackChanges;\n if (!isNullOrUndefined(this.documentSettings) && !isNullOrUndefined(this.documentEditor)\n && !isNullOrUndefined(this.documentEditor.documentSettings)) {\n this.documentSettings.compatibilityMode = this.documentEditor.documentSettings.compatibilityMode;\n }\n if (this.toolbarModule) {\n this.toolbarModule.isCommentEditing = false;\n this.toolbarModule.enableDisableInsertComment(true);\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onSelectionChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.showPropertiesPaneOnSelection();\n var eventArgs = { source: _this };\n _this.trigger(selectionChangeEvent, eventArgs);\n });\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onZoomFactorChange = function () {\n if (this.statusBar) {\n this.statusBar.updateZoomContent();\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onRequestNavigate = function (args) {\n if (args.linkType !== 'Bookmark') {\n var link = args.navigationLink;\n if (args.localReference.length > 0) {\n link += '#' + args.localReference;\n }\n window.open(link);\n args.isHandled = true;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onViewChange = function (args) {\n if (this.statusBar) {\n this.statusBar.updatePageNumberOnViewChange(args);\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuSelect = function (args) {\n this.trigger(customContextMenuSelectEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuBeforeOpen = function (args) {\n this.trigger(customContextMenuBeforeOpenEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showPropertiesPaneOnSelection = function () {\n if (((this.restrictEditing) && !this.showPropertiesPane) || isNullOrUndefined(this.tableProperties)) {\n return;\n }\n var isProtectedDocument = this.documentEditor.documentHelper.protectionType !== 'NoProtection';\n var allowFormatting = isProtectedDocument && this.documentEditor.documentHelper.restrictFormatting;\n var isSelectionInProtectecRegion = this.documentEditor.editor.restrictEditing;\n if (isProtectedDocument) {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!isSelectionInProtectecRegion, true);\n }\n this.tableProperties.enableDisableElements(!allowFormatting && !isSelectionInProtectecRegion);\n this.tocProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.headerFooterProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.imageProperties.enableDisableElements(!isSelectionInProtectecRegion);\n }\n else {\n var isReadOnly = !this.documentEditor.isReadOnly;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(isReadOnly, true || this.showPropertiesPane);\n }\n this.tableProperties.enableDisableElements(true);\n this.tocProperties.enableDisableElements(true);\n this.headerFooterProperties.enableDisableElements(true);\n this.imageProperties.enableDisableElements(true);\n }\n var currentContext = this.documentEditor.selection.contextType;\n var isInHeaderFooter = currentContext.indexOf('Header') >= 0\n || currentContext.indexOf('Footer') >= 0;\n if (!isInHeaderFooter) {\n this.showHeaderProperties = true;\n }\n if (!this.showPropertiesPane) {\n this.showHidePropertiesPane(false);\n this.propertiesPaneContainer.style.display = 'none';\n }\n else {\n this.propertiesPaneContainer.style.display = 'block';\n if (isInHeaderFooter && this.showHeaderProperties) {\n this.showProperties('headerfooter');\n }\n else if (currentContext.indexOf('List') >= 0 || currentContext.indexOf('Text') >= 0\n && currentContext.indexOf('Table') < 0) {\n this.showProperties('text');\n }\n else if (currentContext.indexOf('Image') >= 0) {\n this.showProperties('image');\n }\n else if (currentContext.indexOf('TableOfContents') >= 0) {\n this.showProperties('toc');\n }\n else if (currentContext.indexOf('Table') >= 0) {\n this.showProperties('table');\n }\n }\n this.previousContext = this.documentEditor.selection.contextType;\n if (this.toolbarModule && this.toolbarModule.toolbar) {\n this.toolbarModule.enableDisableInsertComment(!this.documentEditor.enableHeaderAndFooter && this.enableComment && !this.documentEditor.isReadOnlyMode && !this.documentEditor.selection.isinFootnote && !this.documentEditor.selection.isinEndnote);\n }\n };\n /**\n * @private\n * @param property\n */\n DocumentEditorContainer.prototype.showProperties = function (property) {\n if (this.toolbarModule && property !== 'headerfooter' && property !== 'toc') {\n this.toolbarModule.enableDisablePropertyPaneButton(true);\n }\n this.tableProperties.showTableProperties((property === 'table' || property === 'text'), property);\n this.imageProperties.showImageProperties(property === 'image');\n this.headerFooterProperties.showHeaderFooterPane(property === 'headerfooter');\n this.tocProperties.showTocPane(property === 'toc');\n };\n /**\n * Set the default character format for document editor container\n * @param characterFormat\n */\n DocumentEditorContainer.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = characterFormat;\n };\n /**\n * Set the default paragraph format for document editor container\n * @param paragraphFormat\n */\n DocumentEditorContainer.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n };\n /**\n * Set the default section format for document editor container\n * @param sectionFormat\n */\n DocumentEditorContainer.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = sectionFormat;\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditorContainer.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.element) {\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element.classList.remove('e-documenteditorcontainer');\n this.element = undefined;\n }\n if (this.toolbarContainer && this.toolbarContainer.parentElement) {\n this.toolbarContainer.innerHTML = '';\n this.toolbarContainer.parentElement.removeChild(this.toolbarContainer);\n }\n this.toolbarContainer = undefined;\n if (this.documentEditorInternal) {\n this.unWireEvents();\n this.documentEditorInternal.destroy();\n this.documentEditorInternal = undefined;\n }\n if (this.headerFooterProperties) {\n this.headerFooterProperties.destroy();\n }\n this.headerFooterProperties = undefined;\n if (this.imageProperties) {\n this.imageProperties.destroy();\n }\n this.imageProperties = undefined;\n if (this.tocProperties) {\n this.tocProperties.destroy();\n }\n this.tocProperties = undefined;\n if (this.tableProperties) {\n this.tableProperties.destroy();\n }\n this.tableProperties = undefined;\n if (this.statusBar) {\n this.statusBar.destroy();\n }\n if (this.propertiesPaneContainer && this.propertiesPaneContainer.parentElement) {\n this.propertiesPaneContainer.innerHTML = '';\n this.propertiesPaneContainer.parentElement.removeChild(this.propertiesPaneContainer);\n }\n this.propertiesPaneContainer = undefined;\n if (this.editorContainer && this.editorContainer.parentElement) {\n this.editorContainer.innerHTML = '';\n this.editorContainer.parentElement.removeChild(this.editorContainer);\n }\n if (this.statusBarElement && this.statusBarElement.parentElement) {\n this.statusBarElement.innerHTML = '';\n this.statusBarElement.parentElement.removeChild(this.statusBarElement);\n }\n if (this.containerTarget && this.containerTarget.parentElement) {\n this.containerTarget.innerHTML = '';\n this.containerTarget.parentElement.removeChild(this.containerTarget);\n }\n this.containerTarget = undefined;\n this.statusBarElement = undefined;\n this.editorContainer = undefined;\n this.unWireEvents();\n };\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"showPropertiesPane\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableToolbar\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditorContainer.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditorContainer.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditorContainer.prototype, \"userColor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property()\n ], DocumentEditorContainer.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditorContainer.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableCsp\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableComment\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditorContainer.prototype, \"width\", void 0);\n __decorate([\n Property('320px')\n ], DocumentEditorContainer.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeXmlHttpRequestSend\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditorContainer.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditorContainer.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ import: 'Import', systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditorContainer.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property(['New', 'Open', 'Separator', 'Undo', 'Redo', 'Separator', 'Image', 'Table', 'Hyperlink', 'Bookmark', 'TableOfContents', 'Separator', 'Header', 'Footer', 'PageSetup', 'PageNumber', 'Break', 'InsertFootnote', 'InsertEndnote', 'Separator', 'Find', 'Separator', 'Comments', 'TrackChanges', 'Separator', 'LocalClipboard', 'RestrictEditing', 'Separator', 'FormFields', 'UpdateFields'])\n ], DocumentEditorContainer.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property([])\n ], DocumentEditorContainer.prototype, \"headers\", void 0);\n DocumentEditorContainer = __decorate([\n NotifyPropertyChanges\n ], DocumentEditorContainer);\n return DocumentEditorContainer;\n}(Component));\nexport { DocumentEditorContainer };\n","import * as index from './index';\nindex.DocumentEditor.Inject(index.Print, index.SfdtExport, index.WordExport, index.TextExport, index.Selection, index.Search, index.Editor, index.EditorHistory, index.OptionsPane, index.ContextMenu, index.ImageResizer, index.HyperlinkDialog, index.TableDialog, index.BookmarkDialog, index.TableOfContentsDialog, index.PageSetupDialog, index.ParagraphDialog, index.ListDialog, index.StyleDialog, index.StylesDialog, index.BulletsAndNumberingDialog, index.FontDialog, index.TablePropertiesDialog, index.BordersAndShadingDialog, index.TableOptionsDialog, index.CellOptionsDialog, index.SpellChecker, index.SpellCheckDialog, index.CollaborativeEditing);\nindex.DocumentEditorContainer.Inject(index.Toolbar);\nexport * from './index';\n"],"names":["CharacterRangeType","Dictionary","this","keysInternal","valuesInternal","Object","defineProperty","prototype","get","length","enumerable","configurable","add","key","value","isNullOrUndefined","ReferenceError","indexOf","push","index","set","RangeError","remove","splice","containsKey","clear","destroy","undefined","WUniqueFormat","type","referenceCount","uniqueFormatType","propertiesHash","isEqual","source","property","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isNotEqual","modifiedProperty","targetValue","propertyType","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","cloneItems","format","keys","i","mergeProperties","hash","cloneProperties","WUniqueFormats","items","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","XmlHttpRequestHandler","mode","send","jsonObject","httpRequestEventArgs","_this","xmlHttpRequest","XMLHttpRequest","timeout","withCredentials","customHeaders","headers","onreadystatechange","stateChange","onerror","error","sendRequest","setTimeout","jsonObj","open","url","contentType","setRequestHeader","setCustomAjaxHeaders","responseType","data","FormData","JSON","stringify","proxyReq","readyState","status","result","name","response","responseText","successHandler","statusText","failureHandler","errorHandler","onSuccess","onFailure","onError","header","_i","_a","afterFormFieldFillEvent","beforeFormFieldFillEvent","keyDownEvent","Print","getModuleName","print","documentHelper","printWindow","navigator","userAgent","browserUserAgent","height","getPageHeight","pages","width","getPageWidth","printElement","document","createElement","style","overflow","generatePrintContent","window","pageSize","toString","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","exportAsImage","pageNumber","imageType","image","printPage","pgHeight","boundingRectangle","pgWidth","render","isPrinting","renderWidgets","imageData","pageCanvas","toDataURL","Image","src","setAttribute","element","htmlString","page","pageHeight","pageWidth","canvasURL","WSectionFormat","node","uniqueSectionFormat","ownerBase","getPropertyValue","setPropertyValue","uniqueSectionFormats","hasValue","getPropertyDefaultValue","initializeUniqueSectionFormat","propValue","uniqueSectionFormatTemp","addUniqueSectionFormat","copyFormat","history","isUndoing","isRedoing","updateUniqueSectionFormat","cloneFormat","WBorder","uniqueBorderFormat","lineStyle","hasNoneStyle","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","getLineWidth","lineArray","getBorderLineWidthArray","lineWidth","borderLineArray","Math","abs","getBorderWeight","weight","numberOfLines","getNumberOfLines","borderNumber","getBorderNumber","getPrecedence","hasValues","border","color","shadow","space","isEqualFormat","includeSpace","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","isParsing","WParagraphFormat","getBorder","baseStyle","currentFormat","listParaFormat","listFormat","paragraphFormat","getListPargaraphFormat","borders","basedOn","getDefaultValue","docParagraphFormat","documentParagraphFormat","getDocumentParagraphFormat","diagonalDown","diagonalUp","top","bottom","left","right","horizontal","vertical","top_1","WLevelOverride","overrideListLevel","levelNumber","startAt","clone","levelOverride","WList","listId","sourceListId","abstractListId","abstractList","levelOverrides","getListLevel","getLevelOverride","levels","mergeList","list","WListFormat","uniqueListFormat","helper","getDocumentHelperObject","getListById","baseListStyle","WParagraphStyle","listLevelNumber","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","clearFormat","applyStyle","getValue","mergeFormat","cloneListFormat","WTabStop","positionIn","deletePositionIn","justification","leader","position","deletePosition","tabJustification","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","tabsInListFormat_1","getTabStopsFromListFormat","tabStop","_b","tab","_c","_d","hasTabStop","parseFloat","toFixed","concat","filter","a","sort","b","level","listLevel","bidi","getListFormatParagraphFormat","formatInList","isInsideBodyWidget","ParagraphWidget","containerWidget","BodyWidget","TableCellWidget","isPaste","bodyWidget","owner","editor","clearProperty","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","clearIndent","clearPropertyValue","updateUniqueParagraphFormat","isStyle","leftIndent","rightIndent","firstLineIndent","beforeSpacing","afterSpacing","spaceBeforeAuto","spaceAfterAuto","lineSpacing","lineSpacingType","textAlignment","outlineLevel","contextualSpacing","keepWithNext","keepLinesTogether","widowControl","WRowFormat","uniqueRowFormat","beforeWidth","afterWidth","revisions","removedIds","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","containsMargins","leftMargin","rightMargin","bottomMargin","topMargin","allowBreakAcrossPages","isHeader","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","Revision","cloneRevisions","slice","author","date","range","revisionID","isContentRemoved","isTableRevision","canSkipTableItems","skipUnLinkElement","handleAcceptReject","isFromAccept","selection","selectRevision","startPos","start","endPos","end","isExistBefore","blockInfo","getParagraphInfo","initHistory","revisionType","editPosition","getHierarchicalIndex","paragraph","offset","updateInsertPosition","rangeIndex","ElementBox","WCharacterFormat","unlinkRangeItem","textPosition","getTextPosBasedOnLogicalIndex","selectContent","updateEndPosition","selectRange","updateHistoryPosition","editorHistory","currentBaseHistoryInfo","action","removedNodes","reverse","trackChangesPane","isTrackingPageBreak","currentHistoryInfo","blockToShift","layout","shiftLayoutedItems","updateHistory","reLayout","isInHeaderFooter","updateHeaderFooterWidget","handleGroupAcceptReject","isAccept","tableRevisions","initComplexHistory","groupingAcceptReject","updateComplexHistory","accept","isTrackedOnlyMode","skipGroupAcceptReject","reject","item","revision","removeRangeRevisionForItem","removeChanges","isTOC","deleteSelectedContents","currentElement","addRemovedNodes","skipeElementRemoval","updateRevisionID","tableWidget","ownerTable","currentRow","cloneTableToHistoryInfo","currentPara","line","removeRevisionItemsFromRange","removeItem","reLayoutParagraph","removeDeletedCellRevision","removeChild","childWidgets","removeFieldInBlock","removeBlock","updateTable","revisionIndex","currentRevision","elementPara","characterFormat","removeRevisionFromRow","row","unlinkRangeFromRevision","rowFormat","cellWidget","removeRevisionForCell","paraWidget","unLinkFieldCharacter","elementIndex","children","removeEmptyLine","canSkipCloning","clonedRevisions","RevisionCollection","changes","acceptAll","isReadOnly","handleRevisionCollection","rejectAll","isfromAcceptAll","revisionCollec","enableHeaderAndFooter","uniqueCharacterFormat","baseCharStyle","charStyleValue","checkCharacterStyle","length_1","TextElementBox","text","startsWith","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","fontSize","fontFamily","bold","italic","baselineAlignment","underline","fontColor","strikethrough","highlightColor","bdo","allCaps","localeIdBidi","isSameFormat","updateUniqueCharacterFormat","HelperMethods","insert","spanText","join","substring","indexOfAny","wordSplitCharacter","j","temp","lastIndexOfAny","convertArgbToRgb","substr","convertRgbToHex","val","hex","Number","convertHexToRgb","colorCode","replace","colCodeNo","parseInt","r","g","addCssStyle","css","cssText","appendChild","createTextNode","getElementsByTagName","getHighlightColorCode","isVeryDark","backColor","backgroundColor","getColor","convertPointToPixel","point","round","convertPixelToPoint","pixel","isLinkedFieldCharacter","inline","FieldElementBox","fieldType","fieldEnd","fieldBegin","removeSpace","charAt","trimStart","trimEnd","endsWith","addSpace","str","writeCharacterFormat","isInline","toWriteInline","styleName","boldBidi","italicBidi","fontSizeBidi","fontFamilyBidi","propertyName","decimalDigits","reverseString","split","formatClippedString","base64ImageString","extension","sourceString","startString","formatText","toLowerCase","toUpperCase","lowerFirstChar","capitaliseFirst","formatNumber","intl","Internationalization","numberValue","parseNumber","numberFormat","formatDate","Date","isNaN","getDate","dateFormat","splitBy","valArry","capitaliseFirstInternal","getModifiedDate","modifiedDate","getLocaleDate","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","getUtcDate","now","getTime","getTimezoneOffset","toISOString","dt","getCompatibilityModeValue","compatibilityMode","compatValue","getUniqueElementId","random","wordBefore","wordAfter","wordSplitCharacters","Point","xPosition","yPosition","xIn","yIn","copy","Base64","keyStr","encodeString","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","unicodeEncode","charCodeAt","tempInput","utftext","n","c","String","fromCharCode","decodeString","resultIndex","totalLength","Error","Uint8Array","WrapPosition","x","__extends","extendStatics","d","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","WStyle","_super","call","copyStyle","paraStyle","next","link","WCharacterStyle","charStyle","WStyles","collection","getItem","contains","pop","findByName","returnStyle","getStyleNames","map","getStyles","styleObjects","styles_1","returnStyleObject","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","foregroundColor","textureStyle","WTableFormat","uniqueTableFormat","_styleName","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","initializeTableBorders","tableFormat","tableAlignment","cellSpacing","preferredWidth","preferredWidthType","horizontalPositionAbs","horizontalPosition","allowAutoFit","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","verticalAlignment","cellWidth","columnSpan","rowSpan","WAbstractList","abstractListIdIn","absList","WListLevel","uniqueListLevel","listLevelPattern","followCharacter","restartLevel","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","Layout","islayoutFootnote","allowLayout","isfootMove","footnoteHeight","isRelayout","isRelayoutneed","isOverlapFloatTable","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","isRTLLayout","currentCell","isFootnoteContentChanged","isEndnoteContentChanged","is2013Justification","nextElementToLayout","isLayoutWhole","isBidiReLayout","defaultTabWidthPixel","isRelayoutFootnote","isRelayoutOverlap","isWrapText","isYPositionUpdated","isXPositionUpdated","hasFloatingElement","isFootNoteLayoutStart","wrapPosition","shiftedFloatingItemsFromTable","isDocumentContainsRtl","isSameStyle","currentParagraph","isAfterSpacing","nextOrPrevSibling","nextWidget","previousWidget","viewer","layoutItems","sections","isReLayout","section","lastpage","lastChild","isEndsWithPageBreak","bodyWidgets","createNewPage","addBodyWidget","clientActiveArea","pageIndex","i_1","prevPage","sectionIndex","insertPage","layoutSection","layoutComments","comments","updateFieldElements","layoutType","layoutEndNoteElement","isScrollHandler","isSpellCheck","spellChecker","enableOptimizedSpellCheck","triggerElementsOnLoading","clearContent","updateScrollBars","commentReviewPane","nextBlock","block","firstChild","TableWidget","calculateGrid","updateClientAreaForBlock","layoutBlock","footnoteWidget","layoutfootNote","nextPage","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","parentHeader","parentHeaderFooter","clearBlockWidget","updateRevisionsToHeaderFooter","updateHFClientArea","sectionFormat","headerWidget","layoutHeaderFooterItems","footer","footerWidget","updateHeaderFooterToParent","typeIndex","getHeaderFooter","headerFooterType","headersFooters","child","clearTableWidget","childWidge","HeaderFooterWidget","lineWidge","childrens","k","removeId","l","revisionsInternal","updateRevisionRange","linkFieldInHeaderFooter","widget","linkFieldInParagraph","linkFieldInTable","fields","linkFieldCharacter","FieldTextElementBox","previousElement","ShapeElementBox","firstBlock","textFrame","CommentCharacterElementBox","comment","getCommentById","commentId","commentType","commentStart","commentEnd","cell","updateClientAreaLocation","pargaraph","LineWidget","isGridUpdated","shiftChildLocation","clientArea","y","shiftTop","widgetTop","footerMaxHeight","max","childTop","childWidget","verticalPosition","shiftChildLocationForTableWidget","TableRowWidget","shiftChildLocationForTableRowWidget","rowWidget","shiftChildLocationForTableCellWidget","splitLtrAndRtlText","combineconsecutiveRTL","layoutParagraph","nextBlockToLayout","checkAndRelayoutPreviousOverlappingBlock","layoutTable","updateTableYPositionBasedonTextWrap","nextRenderedWidget","table","tableY_1","tableRect_1","Rect","floatingElements","forEach","shape","isInsideTable","shapeRect","textWrappingStyle","isIntersecting","distanceBottom","updateChildLocationForTable","cutFromTop","TextFrame","preivousBlock","paraRect","startOverlapWidget","endOverlapWidget","getSplitWidgets","wrapTextAround","tableRect","getTableCellWidth","blockRect","layoutStartEndBlocks","addParagraphWidget","area","paragraphWidget","isEmpty","WebLayoutViewer","previousPara","textHelper","getParagraphMarkWidth","addLineWidget","isFirstElementWithPageBreak","isPageBreak","PageLayoutViewer","lineWidget","BookmarkElementBox","nextElement","footnote","footNoteType","updateFootnoteClientArea","newPara","getParagraphMarkSize","Height","margin","Margin","POSITIVE_INFINITY","shiftChildWidgetInFootnote","sub","startY","bodyWidgetHeight","getBodyWidgetHeight","lineIndex","isListLayout","layoutListItems","layoutEmptyLineWidget","layoutFloatElements","indexInOwner","isFirstLine","updateClientWidth","marginTop","layoutLine","nextLine","updateWidgetToPage","isLayouted","clearLineMeasures","ShapeBase","layoutShape","getFloatingItemPoints","widthScale","containerWidth","getContainerWidth","blocks","updateClientAreaForTextBoxShape","moveElementFromNextLine","count","isNotEmptyField","padding","layoutElement","textElement","errorCollection","ischangeDetected","trim","isEmptyField","formFieldData","formFields","layoutFieldCharacters","isLastLine","nextNode","fieldSeparator","moveToNextLine","moveFromNextPage","getHeight","ListTextElementBox","EditRangeEndElementBox","EditRangeStartElementBox","ContentControl","bookmarkType","bookmarks","bookmrkElement","reference","contentControlCollection","endPage","cCStart","contentControlProperties","hasValidElement","isContainsShapeAlone","isTocField","getFieldResult","FootnoteElementBox","checkAndSplitTabOrLineBreakCharacter","getTextSize","getTabWidth","adjustPosition","moveToNextPage","updateFieldText","cutClientWidth","isLayout","layoutFootEndNoteElement","findDiff","textWrap","addElementToLine","currentLine","TabElementBox","addSplittedLineWidget","fieldBeginInternal","DropDownFormField","splitTextForClientArea","checkLineWidgetWithClientArea","splitElementForClientArea","contentControl","previousLeft","previousTop","previousWidth","adjustedRect","adjustClientAreaBasedOnTextWrap","wrapDiff","wrapPos","updateWrapPosition","previousWrapPos","isFirstitemInPage","yposition","isTextFitBelow","rect","isNeedToWrapForSquareTightAndThrough","elementBox","wrapOwnerIndex","wrapItemIndex","textWrappingBounds","allowOverlap","wrapCollectionIndex","floatingEntity","isTextRangeInTextBox","ImageElementBox","isNeedToWrapForSquareTightAndThroughForTable","container","wrapIndex","wrappingStyle","floatingElemnt","isInTextBox","isNeedToWrapLeafWidget","getMinWidth","currTextRange","previousNode","minwidth","measureText","Width","nextSibling","getNextSibling","nextSiblingText","getNextTextRangeWidth","nextSiblingTextRange","nextsibling","sizeNext","isNextSiblingSizeNeedToBeMeasure","isNextSibligSizeNeedToBeMeasure","isLeafWidgetNextSiblingIsTextRange","textRange","nextSiblingwidget","elementWidth","textInfo","isNeedDoIntermediateWrapping","remainingClientWidth","leafWidget","minimumWidthRequired","isFloatingItemOnLeft","minWidth","bounds","currentElementBox","ownerPara","layouter","clientLayoutArea","floatingItem","positioning","isExistAfter","distanceLeft","distanceTop","distanceRight","textWrappingType","listLeftIndent","paragraphLeftIndent","paragarphRightIndent","isnewline","isBorderValueZero","borderThickness","tableHorizontalPosition","horizontalAlignment","getMaximumRightCellBorderWidth","getDefaultBorderSpacingValue","getMinimumWidthRequiredForTable","topMarginValue","updateClientAreaForTextWrap","xposition","rect1","adjustClientAreaBasedOnTextWrapForTable","floatingElement","tableWidth","isShape","wrappingBounds","tableHeight","footnoteType","startat","initialFootNoteNumber","getFootEndNote","footNoteNumberFormat","footnoteCollection","initialEndNoteNumber","endnoteNumberFormat","endnoteCollection","positionchanged","footIndex","insertIndex","isFitted","isCreated","currentIndex","footNoteReference","FootNoteWidget","newParagraph","body","updateClientArea","foot","endNote","endnoteWidget","getNextValidElementForField","equals","previousRenderedWidget","char","character","splitByLineBreakOrTab","splittedParagraph","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","checkAndUpdateFieldData","hasFieldEnd","fieldStacks","field","seperator","CheckBoxFormField","checkBoxTextElement","checked","sizeType","size","dropDownTextElement","dropdownItems","selectedIndex","repeatChar","getEnSpaceCharacter","isEmptyLine","isShiftEnter","paraFormat","subWidth","whiteSpaceCount","canRenderParagraphBorders","canRenderBorder","maxHeight","getBeforeSpacing","isContainsRtl","shiftElementsForRTLLayouting","isParagraphStart","isParagraphEnd","getWidthAndSpace","getSubWidth","spaceCount","checkInbetweenShapeOverlap","getLineSpacing","getAfterSpacing","skipTopBorder","skipBottomBorder","clearListElementBox","layoutList","currentListLevel","getListNumber","isIosDevice","updateTextSize","tabWidth","addListLevels","getListLevelPattern","splittedElementBox","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","getWidth","trimEndWidth","characterRange","updateRevisionForSplittedElement","isMarkedForRevision","baselineOffset","splitErrorCollection","splittedBox","ignoreItems","ignoreOnceItems","splitByCharacter","getTextSplitIndexByCharacter","splitWidth","measureTextExcludingSpaceAtEnd","splittedElement","isSplitted","isJustify","startIndex","paddingLeft","getTextIndexAfterSpace","splittedText","isSplitByWord","isSplitByCharacter","textWidth","characterUptoWS","checkPreviousElement","span","spiltBy","inlineIndex","remainder","newSpan","newText","maxDescent","updateLineWidget","skip2013Justification","measurement","BaselineOffset","totalSpaceCount","isEndsWithLineBreak","availableWidth","totalSpaceWidth","getTotalSpaceWidth","widthForAdjustment","addSubWidth","isStarted","renderedElements","subWidthInfo","alignElements","alignLineElements","previousSplitWidget","startLineIndex","splitParagraph","updateClientAreaForNextBlock","overlapShape_1","lineY_1","getLineY","isInsideTable_1","lineRect","considerShape","para","lineY","spaceHeight","spaceBaseline","elementHeight","isCheckBoxElement","paragraphMarkSize","startBlock","previousLine","alignBlockElement","splitRow","nextBody","moveBlocksToNextPage","nextParagraph","footWidget","getFootNoteWidgetsOf","moveFootNotesToPage","addRemoveFloatElementsFromBody","lastBlock","m","updateChildLocationForCellOrShape","block_1","paragarph","previousBlock","getPreviousBlock","getFirstParagraphInCell","startRow","newTable","createTableWidget","isMoveCurrentBlock","unshift","updateClientPositionForBlock","currentBlock","isClientAreaUpdated","addTableWidget","nextRow","addTableRowWidget","updateChildLocationForRow","endBlock","startParagaraph","getFirstParagraphInFirstCell","isDocumentLoaded","editorModule","updateWholeListItems","isLastElement","associatedCell","ownerRow","getCellContentHeight","shiftFootnoteChildLocation","shiftFooterChildLocation","footerDistance","lastTextElement","index_1","lastIndexOf","clearInvalidList","abstractLists","lists","isAutoList","renderedLevelOverrides","getAbstractListById","renderedLists","ClearSubListLevelValues","updateListValues","getListText","levelNumberTemp","getListStartValue","startVal","listAdv","listText","levelKey","match","getListTextListLevel","getAsLetter","number","quotient","letter","listValue","getAsRoman","getAsLeadingZero","generateNumber","magnitude","numberstring","retval","levelOverrideAdv","fPosition","isCustomTab","isList","clientWidth","clientActiveX","defaultTabWidth","breaked","tabPosition","tabInfo","getJustificationTabWidth","tabLeader","tabText","getRightTabWidth","areaWidth","clientActiveWidth","nextIndex","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","trimmedSpaceWidth","subWidths","getSubWidthBasedOnTextWrap","renderElementBox","elementText","widthExcludeSpace","lineContent","z","info","getSubWidthInfo","currentWidget","lastWrapPositionWidth","wrappedSubWidth","totalSubWidth","dontUseHtmlParagraphAutoSpacing","before","alterLineSpacing","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","moveNextWidgetsToTable","moveFromNext","rowIndex","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","prevColumnIndex","cellspace","cellFormat","columnIndex","tableHolder","columns","getTableClientWidth","getCellWidth","prevSpannedCellWidth","getPreviousSpannedCellWidth","leftBorderWidth","getCellLeftBorder","rightBorderWidth","getCellRightBorder","linestyle","isBidiTable","isLeftStyleNone","isRightStyleNone","cellIndex","isInsertTable","checkPreviousMargins","sizeInfo","minimumWidth","tableResize","checkCellMinWidth","addWidgetToTable","tableCollection","rowCollection","endRowWidget","isInitialLayout","prevWidget","rowWidgetIndex","footnoteWidgets","prevIndex","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","footnoteNoteHeight","addEmptyFootNoteToBody","updateHeightForRowWidget","updateRowHeight","updateSpannedRowCollection","spannedRowCollection","prevRowWidget","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","colIndex","splitWidgets","tableRowWidget","splittedWidget","isLastRow","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","issplit","getSplittedWidget","updateWidgetLocation","cellWidget_1","getfootNoteHeight","updateWidgetsToTable","tableWidgets","rowWidgets","rowHeight","getRowHeight","headerRow","isAllowBreakAcrossPages","moveRowToNextTable","continueHeader","headerHeight","repeatHeaderRowTableWidget","isInsertSplittedWidgets","isTableInsert","updateWidgetsToPage","prevBodyWidget","rowToMove","keepNext","removeTable","prev","previousRow","curretTable","shiftFloatingItemsFromTable","currentRenderingPage","getHeader","getHeaderHeight","flag","row_1","updateWidgetToRow","cellHeight","isUpdateVerticalPosition","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","Widget","visiblePages","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","emptyCellWidget","createCellWidget","splitMinimalWidget","splittedPara","getSplittedWidgetForPara","tableCol","splittedTable","getSplittedWidgetForTable","isContainInsideTable","lineBottom","moveEntireBlock","rowBottom","splittedRow","allowRowBreakAcrossPages","isFirstLineFitForPara","lineHeight","cellwidget","isFirstLineFitInShiftWidgets","containerCellWidget","isFirstLineFitForTable","isFit","isFirstLineFitForCell","spacing","skipHeight","i_2","newBodyWidget","footWidgets","isUpdateToTop","BlockContainer","displacement","getDisplacement","updateCellContentVerticalPosition","location","updateShapeInsideCell","updateTableWidgetLocation","floatElement","topBorderWidth","cellContentHeight","isDisplacement","contentHeight","cellY","withShapeContentHeight","withShapeBottom","considerShapeHeight","considerAsTop","considerPositionTableHeight","nestedWrapTable","wrapTableBottom","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","tableCell","cellBorder","getCellDiagonalDownBorder","getTableWidth","rowWidth","layoutNextItemsBlock","blockAdv","isFootnoteReLayout","updateNextBlockList","BlockWidget","isShiftingEnabled","isInsertingTOC","combineWidget","updateContainerWidget","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getTop","getParentTable","elementBoxIndex","isBidi","isSkip","containerShape","layoutBodyWidgetCollection","reLayoutTable","reLayoutLine","getParentRow","reLayoutRow","updateHeaderFooterClientAreaWithTop","isBlockInHeader","block_2","clearRowWidget","layoutRow","shiftTableWidget","block_3","yPos","getYPosition","clearPosition","clearHeight","clearGrid","clearCellWidget","blockIndex","shiftNextWidget","isSkipShifting","isLayoutEnabled","curretBlock","checkAndGetBlock","shiftNextWidgets","buildTableColumns","tableView","updateClientAreaTopOrLeft","clientActiveAreaForTableWrap","clientAreaForTableWrap","updateClientAreaForWrapTable","prevBodyWidget1","footNoteWidgets","updateTableFloatPoints","tables","beforeLayout","clienactare","tableLefts","bottomBorderWidth","rows","layoutedTable","shiftWidgetForRtlTable","isRowLayout","updateClientAreaForRow","getMaxTopCellMargin","getMaxBottomCellMargin","layoutCell","getAdjacentRowCell","cellStartPos","cellEndPos","adjCells","adjRow","previouRow","adjCell","adjCellStartPos","adjCellEndPos","borderWidth","getCellBottomBorder","prevRow","getCellTopBorder","updateTopBorders","updateClientAreaForCell","findIndex","i_3","updatedTopBorders","cellTopBorder","isBorderDefined","prevCellBottomBorder","getBorderBasedOnPriority","checkAndShiftEndnote","reLayoutOrShiftWidgets","removeEmptyPages","enableLockAndEdit","fieldCode","getFieldCode","prevPageNum","isRealyoutList","isNeedToRelayout","updateContainerForTable","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","skipFootNoteHeight","shiftToPreviousWidget","updateClientAreaByWidget","isFitInClientArea","nextBodyWidget","createOrGetNextBodyWidget","isSplittedToNewPage","splitWidget","getFootNotesOfBlock","footnoteElements","getFootNotesWidgetsInLine","getFootNoteWidgetsBy","isShifting","k_1","blockfootnoteWidgets","f","getFootNodeWidgetsToShiftToPage","fromBodyWidget","splittedWidgets","toBodyWidget","isClearHeight","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","prevObj","tempClientAreaX","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","firstLine","maxElementHeight","getMaxElementHeight","paragraphView","getMaximumLineHeightToSplit","footNoteInFirstLine","widgetIndex","updateParagraphWidgetInternal","activeArea","paragraphHeight","lastLine","footNoteIndex","footNoteWidget","check","fromPage","toPage","footHeight","isLineInFootNote","footNotes","footContent","newParagraphWidget","destroyInternal","destroyAndScroll","scrollToBottom","moveFootnoteFromLastBlock","createSplitBody","newBody","lineToLayout","isFootNoteInsert","newBodyWidget_1","isSelectionChangedOnMouseMoved","isContainsRTL","isRTLText","paraBidi","textRangeBidi","hasTextRangeBidi","isContainsRTLText","characterRangeTypes","lineElementsBidiValues","Tab","isRightToLeft","RightToLeft","isStartMark","isStartMarker","isEndMark","isEndMarker","nextltWidget","getNextValidWidget","LeftToRight","rtlStartIndex","isPrevLTRText","updateCharacterRange","reorderedWidgets","reorderElements","layoutedElements","layoutedWidgets","endIndex","WordSplit","previousIndex","joinArray","listElementsBidiValues","lastItemIndexWithoutRTLFlag","consecutiveRTLCount","consecutiveNumberCount","reorderedElements","prevCharType","prevBidi","isInsertWordSplitToLeft","shiftLayoutFloatingItems","indentX","indentY","headerDistance","pageClientWidth","pageClientHeight","textWrapStyle","isLayoutInCell","vertOrigin","verticalOrigin","horzOrigin","horizontalOrigin","horzAlignment","vertAlignment","verticalPercent","verticalRelativePercent","shapeHeight","horizontalRelativePercent","shapeWidth","vertPosition","horzPosition","layoutInCell","autoShape","autoShapeType","getVerticalPosition","getHorizontalPosition","getLeftMarginHorizPosition","getRightMarginHorizPosition","paraItem","cellWid","cellInnerWidth","marginLeft","pageLeft","tableTotalWidth","ownerCell","getTotalColumnSpan","tableRow","totalColumnSpan","highestBorderSize","Renderer","pageTop","leftPosition","topPosition","pageCanvasIn","getContext","save","containerCanvas","selectionCanvas","pageContext","fillStyle","beginPath","visibleBounds","fillRect","closePath","strokeStyle","pageOutline","strokeRect","setPageSize","clip","renderHFWidgets","headerWidgetIn","footerWidgetIn","renderfootNoteWidget","renderHeaderSeparator","restore","clearRect","selectionContext","dpr","devicePixelRatio","documentEditorSettings","printDevicePixelRatio","globalAlpha","scale","cliped","pageHt","headerFooterHeight","getScaledValue","footerHeight","renderFloatingItems","renderWidget","ctx","min","renderDashLine","getHeaderFooterType","font","renderHeaderFooterMark","renderHeaderFooterMarkText","getFooterHeight","footerWidgetHeight","actualHeight","l10n","L10n","defaultLocale","setLocale","locale","getConstant","differentFirstPage","previousPage","differentOddAndEvenPages","context","isSmallDash","setLineDash","moveTo","lineTo","stroke","renderSolidLine","w","h","content","textBaseline","fillText","renderHeader","wrappingType","zOrderPosition","renderImageElementBox","shapeLeft","shapeTop","renderShapeElementBox","isZeroShapeHeight","shapeType","fillFormat","fill","lineFormat","lineFormatType","isClipped","clipRect","renderLockRegionBorder","renderParagraphWidget","renderTableWidget","locked","settinsModel","collaborativeEditingSettings","zoomFactor","lockedBy","currentUser","editableRegionColor","lockedRegionColor","renderSingleBorder","parentTable","renderTableCellWidget","renderParagraphBorder","renderLine","paragraphWidet","leftBorder","topBorder","rightBorder","bottomBorder","startX","endX","endY","getTopMargin","getBottomMargin","indent","footerY","renderTableRowWidget","renderTableOutline","cellTopMargin","cellBottomMargin","renderSelectionHighlightOnTable","renderTableCellOutline","checkHeaderFooterLineWidget","headerFooter","selectedWidget","parentIndex","currentLineIndex","renderEditRegionHighlight","editRegionHighlighters","renderHighlight","widgetInfo","renderSearchHighlight","searchModule","searchHighlighters","searchHighlightColor","renderSelectionHighlight","isScrollToSpellCheck","selectedWidgets","addSelectionHighlight","addSelectionHighlightTable","formFieldHighlighters","formFieldSettings","applyShading","shadingColor","isAltered","formField","getFormfieldInLine","isCommentMark","pageGap","renderLockMark","settings","user","editRangeMark","selectionModule","enableComment","renderCommentMark","commentMark","toSkipFieldCode","underlineY","getUnderlineYPosition","renderListTextElementBox","isVisible","renderTextElementBox","canTrigger","isSpellChecked","isChangeDetected","breakCharacterFormat","isParaBidi","direction","bgColor","getBackgroundColorHeirachy","getDefaultFontColor","renderUnderline","renderStrikeThrough","isHeightType","revisionInfo","checkRevisionType","getRevisionColor","scaledWidth","tabElement","getTabLeader","isRTL","setText","inverseCharacter","removeUnderline","triggerSpellCheck","isSelectionInsideElement","triggerPageSpellCheck","errorDetails","checktextElementHasErrors","errorFound","elements","manageSpecialCharacters","renderWavyLine","handleChangeDetectedElements","currentInfo","getRevisionType","ch","checkText","beforeIndex","checkElementCanBeCombined","markindex","getOffset","currentText","retrievedText","ignoreAllItems","handleUnorderedElements","indexInLine_1","indexinParagraph_1","spellInfo","checkSpellingInPageInfo","isElementPresent","parse","hasSpellError","handleWordByWordSpellCheck","isInUniqueWords","hasSpellingError","isErrorWord","callSpellChecker","languageID","allowSpellCheckAndSuggestion","then","canUpdate","iteration","markIndex","isLastItem","indexInLine","indexinParagraph","handleSplitWordSpellCheck","canUpdate_1","renderedHeight","underlineHeight","specialCharacter","getSpecialCharactersInfo","whiteSpaceData","getWhiteSpaceCharacterInfo","x1","beginningWidth","y1","x2","endWidth","startingPoint","endingPoint","drawWavy","from","to","frequency","amplitude","step","negative","lineCap","cx","cy","fx","fy","tx","ty","waveOffsetLength","ang","atan2","distance","sqrt","PI","sin","cos","tabString","getTabLeaderString","floor","xPos","lineCount","widgetWidth","containerWid","isMetaFile","metaFileImageString","drawImage","isCrop","cropX","cropY","cropWidth","cropHeight","e","imageString","cellLeftMargin","cellRightMargin","renderCellBackground","border_1","lineWidthInt","cellX","borderInfo","isLastCell","prevRowSpannedCells","getPreviousRowSpannedCells","isAffectedByRowSpan","spannedCell","nextRowIsInCurrentTableWidget","previousCellIndex","lastCellWidget","nextRowWidget","drawTextureStyle","foreColor","percent","getForeColor","foreColorRgb","backColorRgb","getColorValue","foreColorValue","backColorValue","authors","checkInsert","TextHelper","paragraphMarkInfo","containerContext","getFormatText","paragraphMark","textSizeInfo","textTrimEndWidth","heightInfoCollection","textMeasureHelper","getHeightInternal","toLocaleLowerCase","lineBreakMark","textToRender","isRender","isRtlText","listCharacterFormat","containsSpecialCharAlone","specialChars","containsNumberAlone","containsCombinationText","containsSpecialChar","getRtlLanguage","isRtl","id","splitTextByConsecutiveLtrAndRtl","isTextBidi","isRTLLang","hasRTLCharacter","charTypeIndex","lastLtrIndex","ltrText","rtlText","wordSplitChars","numberText","currentCharacterType","separateEachWordSplitChars","isNumber","isWordSplitChar","charType","isNumberNonReversingCharacter","isNonWordSplitCharacter","isRightToLeftLanguage","lang","numberNonReversingCharacters","isNonWordSplitChar","charCode","Zoom","onMouseWheelInternal","event","ctrlKey","preventDefault","pageX","viewerContainer","offsetLeft","pageContainer","offsetWidth","wheel","detail","Browser","isIE","wheelDelta","deltaY","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","imageResizerModule","updateImageResizerPosition","fireZoomFactorChange","zoom","handleZoom","updateFocus","AddUserDialog","show","localObj","target","initUserDialog","enableRtl","dialog","beforeOpen","loadUserDetails","buttons","click","okButtonClick","buttonModel","cssClass","isPrimary","hideDialog","deleteButtonClick","dataBind","userList","dataSource","userCollection","restrictEditingPane","addedUser","isAddUser","showStopProtectionPane","addUserCollection","hide","textBoxInput","onKeyUpOnDisplayBox","addButton","disabled","addButtonClick","validateUserName","DialogUtility","alert","getSelectedItems","localValue","className","headerValue","dlgFields","commonDiv","adduserDiv","classList","attrs","autofocus","addEventListener","addButtonElement","Button","appendTo","userCollectionDiv","userDiv","listviewDiv","ListView","domain","domainParts","ext","EnforceProtectionDialog","localeValue","initDialog","passwordTextBox","confirmPasswordTextBox","password","addProtection","protectionType","passwordContainer","confirmPasswordcontainer","TextBox","placeholder","floatLabelType","UnProtectDocumentDialog","stopProtection","containerId","newPassWord","RestrictEditing","addRemove","previousProtectionType","isShowRestrictPane","usersCollection","closePane","restrictPane","display","updateViewerSize","onYesButtonClick","removeAllEditRestrictions","onCancelButtonClick","args","protectionTypeDrop","onNoButtonClick","showAllRegion","showAllEditingRegion","addUserDialog","enforceProtectionDialog","unProtectDialog","base64","showHideRestrictPane","isShow","initPane","isHighlightEditRegion","wireEvents","loadPaneValue","headerWholeDiv","headerDiv1","closeButton","closeSpan","initRestrictEditingPane","optionsPaneContainer","insertBefore","restrictPaneWholeDiv","formatWholeDiv","formatDiv","allowFormatting","allowFormat","createCheckBox","editRestrictWholeDiv","protectionTypeInput","protectionTypeValue","Value","Name","DropDownList","userWholeDiv","subContentDiv","emptyuserDiv","showCheckBox","select","selectHandler","bind","addUser","lastDiv","enforceProtection","stopProtectionDiv","styles","headerDiv","contentWholeDiv","content1","contentDiv1","content2","contentDiv2","stopReadOnlyOptions","navigateNext","navigateNextButton","navigateNextRegion","showAllRegionButton","highlightRegion","highlightRegionInput","highlightCheckBox","CheckBox","label","lastButtonDiv","protectDocument","stopProtectionTriggered","enableFormatting","protectionTypeDropChanges","highlightClicked","restrictFormatting","saltValue","hashValue","unProtectDocument","previousItemData","editRanges","uncheckAllItems","isChecked","insertEditRangeElement","removeUserRestrictions","checkBox","enablePersistence","isDocumentProtected","navigateToNextEditingRegion","editRangeCollection","editStart","group","updateUserInformation","checkSelectionIsAtEditRegion","editRange","getEditRangeStartElement","listElement","querySelectorAll","querySelector","FormFieldPopUp","applyTextFormFieldValue","updateFormField","textBoxInstance","trigger","fieldName","resultText","isCanceled","hidePopup","applyNumberFormFieldValue","numberInput","applyDateFormFieldValue","datePickerInstance","dateInput","applyDropDownFormFieldValue","ddlInstance","enableDisableDatePickerOkButton","isInteracted","dataPickerOkButton","eventArgs","TextFormField","isFormFilling","popupObject","initPopup","popupElement","textBoxContainer","initTextBoxInput","initNumericTextBox","initDatePicker","initDropDownList","textBoxDiv","textBox","textBoxButtonDiv","textBoxOkButton","textBoxCancelButton","iconCss","numericDiv","numericTextBox","NumericTextBox","numericTextBoxInstance","dateDiv","datePicker","DateTimePicker","strictMode","change","dropDownDiv","dropDownInput","ddl","showPopUp","selectField","rex","RegExp","inputElement_1","maxLength","formFieldType","removeAttribute","showPopup","getLeftInternal","getTooltipPosition","Popup","relateTo","parentElement","X","Y","TrackChangesPane","users","enableButtons","viewTypeitems","sortedRevisions","noChangesVisibleInternal","selectedUser","selectedType","initTrackChangePane","reviewTab","trackChangeDiv","refresh","title","visible","isChangesTabVisible","noChangeDivElement","enableDisableToolbarItem","hideTab","notify","isCommentTabVisible","currentSelectedRevisionInternal","selectedElement","changesInfoDiv","singleInnerDiv","scrollIntoView","renderedChanges","initPaneHeader","textContent","updateTrackChanges","toolbarElement","toolbar","Toolbar","template","prefixIcon","align","tooltipText","navigatePreviousChanges","navigateNextChanges","userButtonEle","userDropDownitems","userDropDown","onUserSelect","onUserOpen","beforeItemRender","beforeDropDownItemRender","userDropDownButton","DropDownButton","getSpanView","viewTypeEle","viewTypeDropDownButton","onTypeSelect","menuoptionEle","menuDropDown","onMenuSelect","menuDropDownButton","marginRight","alignSelf","arg","ele","overflowY","enable","enableItems","selectedText","updateUsers","onSelection","currentSelectedRevision","sortCollectionToDisplay","updateMenuOptions","isRevisionVisible","singleChangesDiv","outerSingleDiv","setNoChangesVisibility","enableDisableButton","enableButton","removeAllChanges","ranges","groupedRevision","groupTableRevisions","changeView","nextRevision","addChanges","nextRowFormat","appendRowToTable","updateHeight","resize","startRevision","currentRevisionType","startTable","startParentTable","nextRevisionType","nextTable","nextRowIndex","removeItems","tabHeaderHeight","getRootElement","getElementsByClassName","getBoundingClientRect","parentPaneElement","clientHeight","childNodes","currentChangeView","ChangesSingleView","createSingleChangesDiv","acceptButtonElement","rejectButtonElement","revisionNavigateInternal","groupingAccept","selectTableRevision","userNameTotalDiv","userNameLabel","getAvatar","revisionTypeLabel","whiteSpace","dateView","changesTextDiv","layoutElementText","buttonTotalDiv","buttonDiv","acceptButton","acceptButtonClick","rejectButton","rejectButtonClick","changesCount","currentCount","totalCount","tableElement","insertRow","insertCell","cells","changesText","toSkip","addSpan","retrieveFieldResultantText","emptyChar","defaultValue","imageEle","paraMark","removeFromParentCollec","DocumentHelper","scrollbarWidth","isWebPrinting","isHeaderFooter","currentPage","selectionStartPageIn","selectionEndPageIn","showRevision","tapCount","timer","isTimerStarted","preZoomFactor","preDifference","fieldEndParagraph","fieldToLayout","isMouseDown","isMouseEntered","scrollMoveTimer","isControlPressed","isTouchInput","isTouchMoved","useTouchSelectionMark","touchDownOnSelectionMark","isComposingIME","lastComposedText","isCompositionStart","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","prefix","suffix","alignTablesRowByRow","commentUserOptionId","preDefinedStyles","isRowOrCellResizing","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","moveCaretPosition","isTextInput","cachedPages","skipScrollToPosition","isMobileDevice","footnotes","Footnote","endnotes","isFootnoteWidget","onTextInput","handleTextInput","compositionStart","isDevice","isReadOnlyMode","positionEditableTarget","compositionUpdated","insertIMEText","getEditableDivTextContent","compositionEnd","iframe","containerLeft","containerTop","editableDiv","undo","redoStack","onKeyPressInternal","which","keyCode","ctrl","metaKey","alt","altKey","isInlineFormFillMode","key_1","onTextInputInternal","innerText","onPaste","canEditContentControl","pasteInternal","onFocusOut","contextMenuModule","contextMenuInstance","hideCaret","showCaret","scrollHandler","scrollTimer","clearTimeout","vtHeight","offsetHeight","scrollTop","fireViewChange","onWindowResize","resizeTimer","onContextMenu","onContextMenuInternal","onMouseDownInternal","offsetX","offsetY","updateCursor","formFillPopup","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","isInShape","getCurrentTextFrame","selectShape","isImageResizing","cursorPoint","touchPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","isInCellResizerArea","isInRowResizerArea","handleResize","checkCursorIsInSelection","getLineWidget","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","currentResizingTable","startPosition","setPositionForBlock","endPosition","handleResizing","updateTextPositionForSelection","touchY","touchPoint_1","isImageResizerVisible","isShapeResize","moveTextPosition","checkForCursorVisibility","onMouseLeaveInternal","viewerTop","scrollForwardOnSelection","scrollBackwardOnSelection","onMouseEnterInternal","onMouseUpInternal","onDoubleTap","checkAndEnableHeaderFooter","getHyperLinkFieldInCurrentSelection","getCurrentFormField","enableFormField","formatType","getFormFieldType","textFormFieldDialogModule","checkBoxFormFieldDialogModule","dropDownFormFieldDialogModule","getInline","footnoteText","setPositionParagraph","endnoteText","isinEndnote","isinFootnote","footnoteReferenceElement","selectCurrentWord","isListTextSelected","updateResizingHistory","currentSelectedComment","commentPane","isEditMode","isCtrlkeyPressed","isImageSelected","useCtrlClickToFollowHyperlink","navigateHyperLinkOnEvent","enabled","formFillingMode","toggleCheckBoxFormField","isFormFillProtectedMode","navigateToNextFormField","getPhysicalPositionInternal","selectInternal","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","caret","imageResizer","leftValue","topValue","onTouchStartInternal","touches","zoomX","clientX","zoomY","clientY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","longTouchTimer","onLongTouch","pointRelToPage","selStart","selEnd","updateSel","isForward","selStartPt","selEndPt","changedTouches","updateSelectionOnTouch","onTouchMoveInternal","touch","handleImageResizingOnTouch","currentDiff","pow","onPinchOutInternal","onPinchInInternal","onTouchUpInternal","isImageField","touchStart","touchEnd","onKeyUpInternal","getSelection","anchorOffset","setEditableDivCaretPosition","onKeyDownInternal","isHandled","keyEventArgs","shift","shiftKey","documentName","initalizeStyles","test","customXmlData","visibleBoundsIn","containerCanvasIn","selectionCanvasIn","zoomModule","dialogInternal","dialogInternal2","initDialog2","dialogInternal3","initDialog3","currentSelectedCommentInternal","previousSelectedComment","clearDocumentItems","setDefaultCharacterValue","setDefaultParagraphValue","setDefaultDocumentFormat","parser","parseCharacterFormat","parseParagraphFormat","getListLevelNumber","getBookmarks","includeHidden","bookmark","selectComment","showComments","showHidePane","showRevisions","initializeComponents","contentEditable","viewerContainerStyle","tabIndex","outline","pointerEvents","createEditableDiv","createEditableIFrame","initializeImageResizer","updateViewerSizeInternal","initTouchEllipse","wireEvent","CommentReviewPane","createSpinner","measureScrollbarWidth","parentDiv","childDiv","parentNode","scrolling","initIframeContent","contentDocument","initCaret","wireInputEvents","onIframeLoad","onImageResizer","updateAuthorIdentity","getAuthorColor","userInfo","userName","userinitial","initial","avatarDiv","avatar","authorName","generateRandomColor","getRect","getSelectionPage","iframeStyle","MouseEvent","TouchEvent","dialogTarget1","Dialog","showCloseIcon","allowDragging","isModal","zIndex","animationSettings","effect","isStringTemplate","beforeClose","dialogTarget3","dialogTarget2","commentMarkElement","editRangeStart","onDocumentChanged","tocStyles","tocBookmarkId","previousSelectedFormField","highlightFormFields","documentStart","optionsPaneModule","showHideOptionsPane","isViewPasteOptions","showHidePasteOptions","fireDocumentChange","ellipse","getPage","getLeftValue","isInsideRect","selectionLineWidget","isInShapeBorder","marginBottom","button","touchOffsetValues","pageY","updatedZoomFactor","linkPageToHeaderFooter","removePage","updateHeaderFooterPage","getDocumentEditorElement","resizerTimer","currentVisibleWidth","preVisibleWidth","layoutWholeDocument","restrictPaneRect","optionsRect","isOptionsPaneShow","optionsPane","paneWidth","ceil","updateTextPosition","selectParagraph","skipCursorUpdate","getLineWidgetInternal","prevLineWidget","prevTop","scrollLeft","caretInfo","updateCaretSize","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","pageBottom","shapeElementInfo","checkFloatingItems","isShapeSelected","getLineWidgetBodyWidget","shapeInfo","behindShapeInfo","isEmptyShape","isInFootnoteWidget","inlineShapeInfo","checkInlineShapeItems","checkPointIsInLine","selectionInShape","isMouseDraggedInShape","caretPosition","blockContainer","isBehind","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","containerHeight","fieldCodes","fieldCategory","fieldPattern","pageNumberStyle","restartPageNumbering","currentSectionIndex_1","currentPageNum","getFieldText","pageStartingNumber","currentSectionIndex","currentPageCount","pattern","unWireEvent","listParagraphs","removeEventListener","hyperlinkField","footnoteElement","div","isRowResize","isCellResize","floatItemInfo","checkAllFloatingElements","resizePosition","getImagePoint","lineLeft","isInInline","getLineStartLeft","code","updateTextPositionIn","getLeft","setHyperlinkContentToToolTip","isLocked","setLockInfoTooptip","getFootNoteElementInCurrentSelection","setFootnoteContentToToolTip","cursor","updateDialogTabHeight","dialogElement","targetElement","contentElement","contentStyle","getComputedStyle","dialogStyle","paddingTop","paddingBottom","paddingVertical","borderTop","borderBottom","borderVertical","paddingRight","paddingHorizontal","borderLeft","borderRight","borderHorizontal","isSamePreviousBorder","isSameNextBorder","isSameTopBorder","isSameBottomBorder","isSameLeftBorder","isSameRightBorder","LayoutViewer","Padding","onPageFitTypeChanged","top_3","isEmptyWidget","isFootNote","updateClientAreaForTable","updateClientAreaByWidgetFootNote","tableAlignmentForBidi","getTotalWidth","getOwnerWidth","resizerPosition","currentPoint","updateCurrentPage","updatePage","pageRight","updateHeaderFooterPageInstance","getPageHeightAndWidth","viewerWidth","viewerHeight","renderVisiblePages","renderPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevY","prevValue","prevX","updateCanvasWidthAndHeight","displayPixelRatio","updateScrollBarPosition","Page","updatePageBoundingRectangle","pageFitType","getCurrentHeaderFooter","currentSecIndex","createHeaderFooterWidget","scrollToPage","updatePositionObj","updateObj","updateVisiblePages","pageH","isTopFit","isBottomFit","isMiddleFit","addVisiblePage","setImageResizerPositions","getPageContent","allowNextPageRendering","updateUniqueWords","SpellCollection","getContentHeight","getContentWidth","currentWidth","contentlen","currentBound","removeEditRange","previousContainer","getPreviousSplitWidget","nextContainer","getNextSplitWidget","previous","getPreviousSplitWidgets","widgets","nextSplitWidget","root","combine","combineRows","addWidgets","apply","arguments","sectionFormatIn","hierarchicalIndex","getTableCellWidget","tableCellWidget","chilgWidget","getIndex","getMinimumAndMaximumWordWidth","minimumWordWidth","maximumWordWidth","footNote","containsShape","inlineElement","ChartElementBox","indexInInline","getLength","imageWidths","matches","matchInfo","exec","matchedValue","wordStartIndex","wordEndIndex","spanLength","imageWidth","maximum","measureParagraph","iIncrementer","isField","nextLineWidget","splitedTextCollection","clonedTextElement","updateTextElementInRevisionRange","currentTxtRange","nextTxtRange","cloneLine","TablePosition","flags","isDefaultFormatUpdated","WTableHolder","combineCells","isBasedOnViewer","getMinimumPreferredWidth","fitCellsToClientArea","factor","tempGrid","tempSpanDecimal","spannedCells","tableCellInfo","rowCellInfo","currOffset","startOffset","removeSpannedCell","updateColumnSpans","tempSpan","getGridCount","checkTableColumns","isAutoFit","resetColumns","rowSpannedCells","isAutoWidth","isZeroWidth","splitWidthToTableCells","ColumnSizeInfo","addColumns","rowSpannedCell","getCellSizeInfo","ownerColumn","validateColumnWidths","autoFitColumn","fitColumns","setWidthToCells","rw","updateProperties","updateAllowAutoFit","currentSelectedTable","autoFitBehavior","getMaxRowWidth","updateWidth","dragValue","totalPreferredWidth","ownerWidth","convertPointToPercent","tablePreferredWidth","updateChildWidgetLeft","shiftWidgetsForRtlTable","clientAreaX","clientAreaRight","cellSpace","updateWidgetLeft","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","isInsertRow","updateRowIndex","getCellStartOffset","description","getCellOf","getCell","tableGrid","prevOffset","tabGrid","gridStartIndex","getOffsetIndex","gridWidth","getCellOffset","updateRowBySpannedCells","currentRowIndex","include","sizeInfoInternal","getContainerTable","previousCell","nextCell","cellPreferredWidth","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","prevRowCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellSpacing","actualCellSpacing","isSetWidth","hasMinimumWidth","hasMinimumWordWidth","prevCellRightBorder","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","isFirstCell","getRightBorderToRenderByHierarchy","getAdjacentCellRightBorder","nextCellLeftBorder","getTopBorderToRenderByHierarchy","prevTopCell","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getBottomBorderToRenderByHierarchy","isFirstRow","nextBottomCell","getAdjacentCellBottomBorder","prevBottomCellTopBorder","widthInfo","lastElement","textIndex","getEndOffset","isInsert","getNextTextElement","canTrack","linkFieldTraversingForward","linkFieldTraversingBackwardSeparator","isFieldEnd","linkFieldTraversingBackward","childNode","prevParagraph","childElement","objectCharacter","fieldCodeType","fieldSeparatorInternal","fieldEndInternal","FormField","helpText","textForm","getFormFieldInfo","copyFieldInfo","checkBoxForm","dropDown","istextCombined","textEle","separator","continuationNotice","continuationSeparator","symbolCode","symbolFontName","customMarker","ErrorTextElementBox","startIn","endIn","fieldText","fieldSpan","revisionChanges","tabSpan","bookmarkTypeIn","refereneceIn","nameIn","widgetType","contentControlWidgetType","ContentControlProperties","revisionChange","contentControlListItems","lockContentControl","lockContents","tag","appearance","hasPlaceHolderText","multiline","isTemporary","dateCalendarType","dateStorageFormat","dateDisplayLocale","dateDisplayFormat","checkedState","uncheckedState","xmlMapping","ContentControlListItems","displayText","CheckBoxState","XmlMapping","isMapped","isWordMl","prefixMapping","xPath","storeItemId","customXmlPart","CustomXmlPart","xml","ShapeCommon","alternativeText","shapeId","heightScale","lockAnchor","textVerticalAlignment","LineFormat","dashStyle","FillFormat","isInlineImage","imageStr","imgElement","isInlineImageIn","crop","isCompressed","cropWidthScale","cropHeightScale","isListFollowCharacter","isFollowCharacter","editRangeId","columnFirst","columnLast","removeEditRangeMark","editRangeEnd","chartTitle","chartType","chartElement","chartCategory","chartSeries","chartArea","ChartArea","chartPlotArea","chartTitleArea","ChartTitleArea","chartLegend","ChartLegend","chartPrimaryCategoryAxis","ChartCategoryAxis","chartPrimaryValueAxis","chartDataTable","ChartDataTable","gapWidth","overlap","officeChartInternal","chart","loaded","onChartLoaded","officeChart","convertChartToImage","dataURL","series","ChartCategory","categoryXName","chartData","ChartData","yValue","xValue","legendPostion","ChartSeries","chartDataFormat","trendLines","errorBar","ChartErrorBar","dataLabels","ChartDataLabels","seriesFormat","ChartSeriesFormat","sliceAngle","holeSize","trendLine","endStyle","errorValue","errorDirection","isLegend","isBubble","isCategory","isSeries","isValueEnabled","isPercentageEnabled","showLeaderLines","ChartTrendLines","intercept","forward","backward","displayRSquared","displayEquation","dataFormat","ChartDataFormat","ChartLayout","fontName","ChartFill","fillColor","fillRGB","layoutX","layoutY","majorTickMark","minorTickMark","tickLabelPostion","hasMinorGridLines","hasMajorGridLines","majorUnit","maximumValue","minimumValue","categoryType","isSeriesKeys","isHorzBorder","isVertBorder","isBorders","commentInternal","removeCommentMark","CommentElementBox","authorIn","initialIn","done","textIn","isReply","ownerComment","createdDate","replyComments","commentStartIn","commentEndIn","isResolved","removeFieldInWidget","tableColumns","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","endOffset","widthType","column","isFitColumns","preferredTableWidth","totalColumnWidth","Infinity","isAuto","isNestedTable","maxTotal","minTotal","remainingWidthTotal","isAllColumnPointWidth","difference","preferred","considerMinAsTableWidth","totalMinimumWordWidth","totalMinWidth","getPreviousValidOffset","maxWidth","hasMaximumWordWidth","ContextMenu","menuItems","customMenuItems","ids","spellContextItems","customItems","currentContextInfo","findCurretText","splittedSuggestion_1","allSuggestions_1","exactData_1","errorWordCollection","errorSuggestions","handleSuggestions","processSuggestions","Suggestions","hideSpellContextItems","showContextMenuOnSel","initContextMenu","contextMenu","ul","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","addMenuItems","handleContextMenuItem","Menu","fireCustomContextMenuBeforeOpen","enableCustomContextMenu","getElementById","onClose","collaborativeEditingModule","lockContent","unlockContent","cut","isCommentOnlyMode","isUserInsert","insertComment","isReferenceField","updateRefField","updateToc","tableOfContentsDialogModule","fontDialogModule","showFontDialog","navigateHyperlink","copyHyperlink","hyperlinkDialogModule","removeHyperlink","paragraphDialogModule","tablePropertiesDialogModule","mergeCells","insertColumn","deleteTable","deleteRow","deleteColumn","applyContinueNumbering","applyRestartNumbering","autoFitTable","contextInfo","retriveText","spellCheckDialog","showFootNotesDialog","expectedData","callSelectedOption","fireCustomContextMenuSelect","handleAddToDictionary","handleIgnoreAllItems","manageReplace","addCustomMenu","isEnable","isBottom","enableCustomContextMenuBottom","isTouch","documentElement","showHideElements","allSuggestions","splittedSuggestion","constructContextmenu","noSuggestion","allSuggestion","contextMenuItems","hideToolTip","lock","unlock","paste","updateField","editField","tableProperties","insertTable","hyperlink","openHyperlink","editHyperlink","properties","continueNumbering","restartAt","addComment","editNoteoptions","isSelectionInEditRegion","canLock","isDialogHidden","acceptChange","rejectChange","previousSibling","getHyperlinkField","isCrossRefField","isSelectionEmpty","isHideComment","enablePaste","enableLocalPaste","copiedData","contextType","isCellSelected","isFormField","canMergeCells","isTableSelected","hasRevisions","isNewComment","isUserClosed","selectedTab","onTabSelection","initReviewPane","previousSelectedCommentInt","getCommentStart","removeSelectionMark","commentView","hideDrawer","hideMenuItems","selectReviewTab","updateTabHeaderWidth","updateCommentStatus","enableDisableItems","reviewPaneHelper","reviewTabsEle","reviewContainer","addReviewTab","initCommentPane","on","commentHeader","changesHeader","reviewPane","selected","animation","headerContainer","initToolbar","currentEditingComment","isInsertingReply","replyViewTextBox","cancelReply","textArea","confirmDialog","confirm","okButton","discardButtonClick","cancelButton","closeDialogUtils","closeOnEscape","cancelEditing","discardComment","navigatePreviousComment","navigateNextComment","deleteComment","resolveComment","reopenComment","addReply","newComment","insertReply","menuBar","resolveView","CommentPane","deleteCommentInternal","isDestroyed","off","pane","isEditModeInternal","parentPane","parent","noCommentIndicator","CommentView","commentParent","layoutComment","replyView","replyViewContainer","replyComment","parentComment","parentView","replyElement","replyIndex","nextReply","editComment","showDrawer","getFirstCommentInLine","startComment","replyCmt","removeChildElements","isDrawerExpand","initCommentHeader","initCommentView","initDateView","initReplyView","initResolveOption","initDrawer","showMenuItems","hideMenuItemOnMouseLeave","commentDiv","commentUserInfo","userOption","menuItem","userOptionSelectEvent","dropDownButton","commentText","initEditView","textAreaContainer","updateTextAreaHeight","enableDisablePostButton","editRegionFooter","postButton","postComment","commentDate","drawerElement","leftPane","spanElement","drawerSpanElement","drawerAction","showOrHideDrawer","readOnly","enableReplyView","updateReplyTextAreaHeight","enableDisableReplyPostButton","replyPostButton","postReply","replyCancelButton","replyFooter","reopenButton","reopenButtonClick","deleteButton","cancel","eventActionArgs","scrollHeight","replyText","fireContentChange","updatedText","showCommentView","selectedItem","unwireEvent","HyperlinkDialog","navigationUrl","screenTipText","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","displayTextBox","urlTextBox","onInsertHyperlink","urlValue","enableOrDisableInsertButton","onScreenTipTextBox","screenTipTextBox","onInsertButtonClick","clearValue","loadHyperlinkDialog","getText","fieldObj","getHyperlinkDisplayText","isNestedField","getLinkText","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","initHyperlinkDialog","bookmarkText","bookmarkValue","noRecordsTemplate","bookmarkCheckDiv","bookmarkCheck","address","isBookmark","insertHyperlinkInternal","TableDialog","onInsertTableClick","columnValueTexBox","rowValueTextBox","maximumRows","rowCount","columnCount","initTableDialog","columnValue","columnsCountBox","rowValue","rowsCountBox","focusIn","BookmarkDialog","onKeyUpOnTextBox","enableOrDisableButton","addBookmark","insertBookmark","focusTextBox","gotoBookmark","selectBookmark","deleteBookmark","initBookmarkDialog","searchDiv","listviewInstance","hasNoBookmark","addbuttonDiv","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","gotoButton","removeObjects","firstItem","selectItem","setSelectionRange","TableOfContentsDialog","loadTableofContentDialog","rightAlign","showLevel","closeTableOfContentDialog","unWireEventsAndBindings","dialog3","showStyleDialog","styleDialogModule","reset","values","changeByValue","normal","changeStyle","headingValue","srcElement","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","applyTableOfContentProperties","tocSettings","startLevel","endLevel","includeHyperlink","includePageNumber","includeOutlineLevels","applyLevelSetting","insertTableOfContents","initTableOfContentDialog","ownerId","generalDiv","genLabel","topContainer","leftGeneralDiv","rightGeneralDiv","bottomContainer","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDivContainer","tabDiv","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","changeShowLevelValue","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesLabel","listViewDiv","styleLocale","styleValues","styleLocaleValue","listViewInstance","modifyButtonDiv","modifyElement","headings","getHeadingLevel","levelSettings","newStartLevel","newEndLevel","isEndLevel","headingStyle","PageSetupDialog","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","onApplySectionFormat","changeByPaperSize","onPortrait","onLandscape","paperSize","initPageSetupDialog","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","marginDiv","leftMarginDiv","rightMarginDiv","topTextBox","bottomTextBox","leftTextBox","rightTextBox","leftContainer","rightContainer","decimals","portraitDivStyles","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","RadioButton","sizeDiv","leftSizeDiv","rightSizeDiv","widthTextBox","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","textLabel","propertyDiv","leftLayoutDiv","rightLayoutDiv","s","ParagraphDialog","lineSpacingIn","isStyleDialog","directionDiv","keepWithNextValue","keepLineTogetherValue","widowControlValue","tabObj","keyUpParagraphSettings","applyParagraphFormat","changeBeforeSpacing","local","beforeSpacingIn","focusBeforeSpacing","blurBeforeSpacing","proxy_1","clickBeforeSpacing","changeAfterSpacing","afterSpacingIn","focusAfterSpacing","blurAfterSpacing","proxy_2","clickAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","special","leftIndentIn","changeByTextAlignment","changeBidirectional","rtlButton","ltrButton","changeAlignmentByBidi","changeContextualSpacing","changeKeepWithNext","changeKeepLinesTogether","changeWidowControl","byIn","changeBySpacing","atIn","loadParagraphDialog","selectionFormat","alignValue","getAlignmentValue","alignment","rightIndentIn","lineSpaceValue","indeterminate","widowControlIn","contextSpacing","isApply","onParagraphFormat","updateParagraphFormat","closeParagraphDialog","initParagraphDialog","tabContainer","instance","indentContainer","alignmentWholeDiv","alignmentDiv","dirLabel","rtlDiv","rtlInputELe","ltrDiv","ltrInputELe","indentionWholeDiv","indentLabel","indentionSubDiv1","indentionSubDiv2","beforeTextDiv","afterTextDiv","specialDiv","byDiv","spacingDiv","leftSpacingDiv","contextSpacingDiv","rightSpacingDiv","contextInputEle","by","spaceLabel","spacingWholeDiv","beforeSpacingWholeDiv","afterSpacingWholeDiv","lineSpacingDiv","lineTypeDiv","lineSpacingAt","blur","lineBreakContainer","paginationDiv","paginationLabel","widowContorlContainer","keepNextContainer","keepLines","isListBidi","setPreviousBlockToLayout","applyParaFormatProperty","layoutItemBlock","updateSelectionParagraphFormatting","q","ListViewModel","listIn","levelNumberIn","createList","listLevelAdv","ListDialog","viewModel","textIndent","alignedAt","listLevelElement","followNumberWith","numberStyle","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","getList","onApplyList","setList","dialog2","disposeBindingForListUI","closeListDialog","showListDialog","bindEvent","initListDialog","buttonClass","wireAndBindEvent","listLevelDiv","divStyle","numberStyleDiv","numberFormatDiv","indentsDivLabelStyle","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","popupHeight","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","Tooltip","options","option","option_1","listPatternConverter","followCharacterConverter","calculateAlignedAt","updateCharacterFormat","StyleDialog","styleType","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showParagraphDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","currentValue","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","updateStyleNames","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","BulletsAndNumberingDialog","showNumberBulletDialog","onOkButtonClick","styleNameElement","name_1","tmpStyle","updateList","createLinkStyle","loadStyleDialog","closeStyleDialog","initStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","formatting","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","styleDropdwn","fontFamilyElement","ComboBox","fontStyle","query","Query","allowCustom","popupWidth","showClearButton","itemTemplate","fontFamilyValue","fontFamilies","fontValue","fontStyleValue","FontName","addItem","fontSizeElement","sizeDataSource","fontGroupButton","createButtonElement","fontColorElement","ColorPicker","leftAlign","centerAlign","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","indentingDiv","buttonElement","getStyle","paragraphFOrmat","nxtName","basedOnIndex","createStyle","isBullet","numberListClick","setActiveElement","currentTarget","bulletListClick","symbol","loadNumberingBulletDialog","closeNumberingBulletDialog","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","numberListDiv","bulletListDiv","heightAdjustMode","selecting","onTabSelect","selectingIndex","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text2","text3","liTag","liInnerDiv","cssFloat","createBulletListTag","isNone","liNextDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","html","childElementCount","FontDialog","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","allcaps","isListDialog","loadFontDialog","closeFontDialog","onInsertFontFormat","listDialogModule","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","allcapsUpdate","createInputElement","initFontDialog","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","allCapsElement","fontEffectSubDiv1","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","effectsProperties","fontEffectSubDiv2","checkBoxDiv","fontEffectSubDiv3","sizeSubDiv1","sizeLabel","sizeSubDiv2","underlineElement","fontSubDiv1","fontLabel","fontNameValues","fontValues","fontSubDiv2","fontStyleValues","fontStyleLabel","getParagraphLength","applyCharFormatValueInternal","setOffsetValue","updateSelectionCharacterFormatting","TablePropertiesDialog","hasTableWidth","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","rowHeightValue","onTableFormat","onRowFormat","onCellFormat","closeTablePropertiesDialog","applyTableSubProperties","cellOptionsDialogModule","applySubCellOptions","tableOptionsDialogModule","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","rowHeightType","repeatHeader","allowRowBreak","cellWidthBox","cellWidthType","activeTableAlignment","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","getTableAlignment","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showTableOptionsDialog","showBordersShadingsPropertiesDialog","bordersAndShadingDialogModule","showCellOptionsDialog","cellFormatIn","tableFormatIn","paraFormatIn","rowFormatInternal","initTablePropertyDialog","rowTab","separatorLine","tableHeader","rowHeader","cellHeader","tableContent","rowContent","cellContent","initTableProperties","initTableRowProperties","initTableCellProperties","alignMentButtons","cellAlignment","duration","delay","calculateGridValue","updateSelectionTextPosition","modifiedProperties","updateSelection","setTableProperties","setTableRowProperties","setTableCellProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","childContainer1","childContainer2","preferredWidthDiv","controlDiv","alignmentContainer","alignmentHeader","alignmentSubContainer","classDivName","leftDiv","leftAlignDiv","centerAlignDiv","center","leftlabel","centerlabel","rightlabel","leftIndenetContainer","tableDirHeader","tableDirContainer","tableOptionContiner","formatNumericTextBox","tableHasWidth","isChanged","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","rowHeightDiv","allowRowContainer","repeatHeaderContaniner","enableRowHeight","enabledHeader","enableRepeatHeader","childdiv1","preferredCellDiv","preferredCellWidth","divAlignment","topDiv","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","topLabel","centerLabel","bottomLabel","cellAlignments","BordersAndShadingDialog","isShadingChanged","applyBordersShadingsProperties","tablePropertiesDialog","selectedCell","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","noneDiv","applyBordersInternal","currentTableFormat","isNoneBorder","onApplyParagraphFormat","applyFormat","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","targetId","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","visibility","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewLeftDiagonalDiv","previewRightDiagonalDiv","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","borderColor","initBordersAndShadingsDialog","settingAndPreviewContainer","settingsContiner","styleContainer","previewContiner","previewSubContainer1","previewSubContainer2","styleSubContainer","dropdownListDiv","dropDownList","widthcontainerDiv","widthNumericDiv","widthNumeric","colorText","borderColorPickerElement","settingText","settingsSubContiner","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","previewText","previewDivVerticalContainer","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivHorizontalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","colorPickerDiv","shadingColorPickerElement","shdApply","ulelementShadingValue","borderStyle","borderColorPicker","isBordersAndShadingDialog","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","elementClass","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","cloneBorders","getSelectionBorderFormat","getLineStyle","copyToBorder","selectionBorder","horizontalBorder","verticalBorder","diagonalDownBorder","customBorder","diagonalUpBorder","TableOptionsDialog","applyTableCellProperties","cellSpaceTextBox","applyTableOptions","closeCellMarginsDialog","changeAllowSpaceCheckBox","allowSpaceCheckBox","removeEvents","initTableOptionsDialog","innerDiv","innerDivLabel","CellOptionsDialog","getCellMarginDialogElements","cellSpaceLabel","td6Padding","table2","cellspacingTextBox","divBtn","loadCellMarginsDialog","applyTableOptionsHistory","applyTableOptionsHelper","applySubTableOptionsHelper","addModifiedTableOptions","documentLocale","changeSameAsTable","sameAsTableCheckBox","initCellMarginsDialog","tr","td","localizeValue","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginValue","applyCellMarginsInternal","newRow","addModifiedCellOptions","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","sourceFormat","cellOptions","StylesDialog","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","hideObjects","styleNames","defaultStyleNames","defaultStyleName","v","SpellCheckDialog","onIgnoreClicked","showSpinner","removeErrors","checkForNextError","hideSpinner","onIgnoreAllClicked","addToDictClicked","errorText","changeButtonClicked","isSpellChecking","changeAllButtonClicked","matchResults","getMatchedResultsFromElement","results","textResults","textSearch","updateMatchedTextLocation","elementInfo","createErrorElementWithInfo","innerList","elementbox","updateSuggestionDialog","suggestions","handleRetrievedSuggestion","initSpellCheckDialog","suggestion","textContainer","spellContainer","spellingListView","ignoreButtonElement","ignoreAllButtonElement","addDictButtonElement","suggestionDiv","suggestionContainer","suggestListDiv","suggestionListView","suggestBtnContainder","changeButtonElement","changeButton","changeAllButtonElement","changeAllbutton","CheckBoxFormFieldDialog","autoButton","exactButton","exactlyNumber","changeBidirect","notCheckedButton","checkedButton","insertCheckBoxField","closeCheckBoxField","checkBoxField","bookmarkInputText","tooltipInputText","checBoxEnableElement","editFormField","initCheckBoxDialog","dialogDiv","headingLabel","sizeParentDiv","autoDiv","exactDiv","autoEle","exactEle","exactNumberDiv","exactNumber","defaultValueLabel","defaultcheckDiv","notcheckDiv","checkDiv","notcheckEle","checkEle","fieldSettingsLabel","settingsTotalDiv","totalToolTipDiv","totalBookmarkDiv","checkBoxEnableDiv","checBoxEnableEle","loadCheckBoxDialog","fieldData","checkBoxDialogTarget","TextFormFieldDialog","updateTextFormtas","defautText","updateFormats","defaultTextInput","insertTextField","valid","typeDropDown","isValidDateFormat","maxLengthNumber","textFormatDropDown","bookmarkTextInput","tooltipTextInput","fillInEnable","closeTextField","initTextDialog","firstDiv","typeDiv","defaultTextDiv","typeDropDownitems","typeDropDownList","changeTypeDropDown","secondDiv","maxLengthDiv","textFromatDiv","textFormatList","formatDropDownitems","fileSettingsLabel","thirdDiv","toolTipTotalDiv","bookmarkTotalDiv","fillInEnableDiv","fillInEnableEle","defaultTextLabel","loadTextDialog","textDialogTarget","textFormatLabel","DropDownFormFieldDialog","addItemtoList","dropDownItems","drpDownItemsInput","currentSelectedItem","removeItemFromList","moveUpItem","getSelectedIndex","moveUp","moveDownItem","moveDown","insertDropDownField","dropDownField","bookmarkInput","tooltipInput","dropDownEnable","closeDropDownField","itemsDrpItemsLabel","addButtonDiv","addButtonEle","editButtonDiv","editButtonEle","editButton","removeButtonDiv","removeButtonEle","removeButton","moveBtnDiv","moveUpButtonDiv","moveUpButtonEle","moveUpButton","moveDownButtonDiv","moveDownButtonEle","moveDownButton","toolTipDiv","dropDownEnableDiv","dropDownEnableEle","loadDropDownDialog","dropDownInstance","toSelectItem","fromIndex","toIndex","tempData","dropDownDialogTarget","TextPosition","isUpdateLocation","getStartOffset","getLineLength","getHierarchicalIndexInternal","containsRtlText","setPositionForSelection","physicalLocation","isLastRenderedInline","setPositionFromLine","setPosition","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","newValue","index1","value1","moveNextLine","isAtSamePosition","isInSameParagraphIndex","isInSameParagraph","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","lineLength","getNextRenderedBlock","prevLine","currentOffSet","moveNextPosition","isNavigate","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","nextOffset","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","previousParagraph","getPreviousSelectionCell","getPreviousParagraphBlock","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","moveForward","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","selectionStart","selectionEnd","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeparator","getNextWordOffsetFieldEnd","getNextWordOffsetComment","txt","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","getPreviousWordOffsetComment","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","isSelectParaMark","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","getLastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstParagraph","getFirstBlockInFirstCell","moveToPreviousLine","firstElement","getFirstElementInternal","prevInline","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","isMoveToLineEnd","moveDownInTable","firstItemWidth","top_2","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","SelectionWidgetInfo","widthIn","floatingItems","Hyperlink","fieldBeginAdv","linkInternal","localRef","opensNewWindow","lowercase","parseFieldValues","typeInternal","isHyperlink","codes","parseFieldValue","isLocalRef","setLinkType","endChar","navigationLink","ImageInfo","imageContainer","ModifiedLevel","modified","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","modifiedFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","revertChanges","isRedo","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","tableHierarchicalIndex","CellHistoryFormat","BaseHistoryInfo","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","actionIn","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","setBookmarkInfo","setFormFieldInfo","setEditRangeInfo","revertFormTextFormat","fieldInfo","applyTextFormatInternal","recordChanges","undoStack","revertFormField","revertBookmark","bookmarkInfo","deleteBookmarkInternal","revertComment","insertPosition","resolveOrReopenComment","addReplyComment","addCommentWidget","commentElement","getCommentElementBox","deleteCommentWidget","revertEditRangeRegion","editRangeInfo","updateRangeCollection","removeUserRestrictionsInternal","revert","listNumberFormat","currentListLevelPattern","currentNUmberFormat","selectionStartTextPosition","selectionEndTextPosition","revertModifiedProperties","sel","deletedNodes","insertTextPosition","endTextPosition","lastElementRevision","endRevisionLogicalIndex","updateEndRevisionInfo","undoRevisionForElements","selectPosition","editModule","changeSelectedTextCase","isRemoveContent","currentPosition","skipDelete","removeSelectedContents","isRedoAction","revertModifiedNodes","removeContent","isSelectionChanged","highlightListText","isDelete","checkAdjacentNodeForMarkedRevision","retrieveEndPosition","markedNode","nextItem","revertResizing","revertTableDialogProperties","revertProperties","redoAction","singleBackspace","singleDelete","mergeSelectedCellsInTable","insertSection","isEmptySelection","getBlock","lastNode","insertTableInternal","insertBlock","initialStart","insertNewParagraphWidget","constructRevisionFromID","selectParagraphInternal","firstNode","insertRemovedNodes","insertInlineInSelection","updateNextBlocksIndex","insertBlockTable","wiget","endWidget","insertRevisionForBlock","endPara","startoffset","endoffset","isSamePara","applyRevisionForCurrentPara","highlightSelection","prevTableHistoryInfo","tableHistoryInfoCurrent","applyProperties","updateGridValue","currentPropertyIndex","updateCellMargins","addModifiedPropertiesForSection","previousFormat","addModifiedProperties","skipRemove","prevLength","nextFormat","addModifiedPropertiesForParagraphFormat","addModifiedPropertiesForContinueNumbering","addModifiedPropertiesForRestartNumbering","addModifiedPropertiesForList","previousLevel","cloneListLevel","getProperty","updateListCharacterFormat","revertContinueNumbering","updateSectionFormat","restartListAtInternal","updateImageSize","modifiedLevel","updateListChanges","updateTableFormat","updateCellFormat","updateRowFormat","getOffsetValue","copyCellOptions","copyTableOptions","getCharacterPropertyValue","addModifiedTableProperties","previousTableFormat","addModifiedRowProperties","addModifiedCellProperties","HistoryInfo","isChild","isChildHistoryInfo","modifiedActions","addModifiedAction","baseHistoryInfo","updateEditRangeCollection","updateComplexHistoryInternal","EditorHistory","undoStackIn","redoStackIn","historyInfoStack","modifiedParaFormats","undoLimitIn","redoLimitIn","canUndo","canRedo","initializeHistory","initResizingHistory","resizeNode","tableHistoryInfo","rowHistoryFormat","cellHistoryFormat","getCellReSizerPosition","enableHistoryMode","redoLimit","undoLimit","clearRedoStack","isHandledComplexHistory","insertRemoveBookMarkElements","isHandledComplex","hasAction","fireSelectionChanged","updateListChangesInHistory","currentAbstractList","copyListLevel","applyListChanges","modifiedLevelsInternal","currentList","copyFromListLevelParagraphFormat","modifiedCollection","updateListParagraphs","historyInfo","redo","clearHistory","clearUndoStack","TableResizer","getRowReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","bodywid","currentHeight","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","newWidth","dragOffset","updateCellPreferredWidths","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","selectedCells","getSelectedCells","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","leftColumn","isContinue","isUpdate","isLeftSideCollection","ignoreRow","isIncrease","diff","maxRowWidth","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","updateGridBeforeWidth","updateGridAfterWidth","Editor","nodes","editHyperlinkInternal","formFieldCounter","skipFieldDeleteTracking","isForHyperlinkFormat","isTrackingFormField","isInsertText","isRemoveRevision","removedBookmarkElements","pageRefFields","delBlockContinue","delBlock","delSection","editStartRangeCollection","skipReplace","skipTableElements","isXmlMapped","copiedContent","copiedTextContent","previousParaFormat","previousCharFormat","previousSectionFormat","pasteTextPosition","isPasteListUpdated","isHtmlPaste","isInsertField","nbsp","lineFeed","textBoxText","retrieveCurrentFormatProperties","handleBackKey","predictText","checkContentControlLocked","setFieldInfo","insertField","insertPageCount","insertPageNumber","insertFormat","copyInsertFormat","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","clearDirectFormatting","clearFormatting","styleObj","preservedStartPosition","preservedEndPosition","onApplyCharacterFormat","parseStyle","getCompleteStyles","copySelectedContent","isCutPerformed","insertEditingRegion","credential","restrictFormatType","typeOfProtection","limitToFormatting","getCommentHierarchicalIndex","alertBox","insertCommentInternal","isAtParagraphEnd","paragraphInfo","endParagraphInfo","commentRangeStart","commentRangeEnd","isSameLine","initInsertInline","endIndex_1","commentAdv","constructCommentInitial","deleteAllComments","deleteCommentWidgetInternal","removeInline","commentIndex","resolve","commentWidget","currentCmtStart","currentCmtEnd","isAtSameLine","isInserted","currentStart","getElementPosition","paraIndex","currentProtectionType","enforceProtectionHandler","formObject","passwordBase64","saltBase64","spinCount","serviceUrl","serverActionSettings","restrictEditing","enforceProtectionInternal","protectionFailureHandler","httprequestEventArgs","serverActionType","fireServiceFailure","console","toggleTrackChangesProtection","enableTrackChanges","isTrackChangesEnabled","protect","unProtectDocumentHandler","onUnProtectionSuccess","validateHashValue","currentHashValue","decodeUserHashValue","documentHashValue","defaultHashValue","highlightEditRegion","updateLockRegion","onHighlight","getPrefixAndSuffix","boxInfo","getElementBoxInternal","box","spaceIndex","prefixAdded","getPreviousTextElement","endInlineInfo","endInline","suffixAdded","toggleUnderline","decreaseIndent","toggleBaselineAlignment","toggleHighlightColor","insertFootnote","insertEndnote","acceptTab","handleTabKey","handleEnterKey","handleDelete","handleSpaceBarKey","getDocumentEnd","getDocumentStart","updateFields","handleShiftEnter","handleCtrlBackKey","handleCtrlDelete","insertPageBreak","toggleBold","toggleTextAlignment","isReplace","toggleItalic","increaseIndent","openBlank","enableEditorHistory","onBackSpace","delete","onEnter","handleControlShiftLeftKey","handleLeftKey","handleControlShiftRightKey","handleShiftLeftKey","animationTimer","insertText","sFormat","getResultContentControlText","updateXmlMappedContentControl","startInlineEle","getContentControl","updateCustomXml","itemId","xmlDoc","DOMParser","parseFromString","lastText","htmlCollec","nodeValue","attributes","getNamedItem","xmlString","XMLSerializer","serializeToString","insertTextInternal","pasteContents","getFieldResultText","selectFieldInternal","isRemoved","commentStarts","checkAndRemoveComments","isSkipLayouting","skipFormatRetrieval","search","isRepalceTracking","isSpecialChars","matchedRevisions","getMatchedRevisionsToCombine","mapMatchedRevisions","checkToCombineRevisionWithPrevPara","insertRevision","removeErrorsFromCollection","inlineLangId","isTextContainsSpecChar","canInsertRevision","insertTextInline","isRevisionCombined","prevRevisionCount","checkToMapRevisionWithInlineText","checkToMapRevisionWithNextNode","checkToCombineRevisionsinBlocks","checkToMapRevisionWithPreviousNode","splittedSpan","updateRevisionForSpittedTextElement","copyElementRevision","updateElementInFieldRevision","updateSplittedElementError","checkAndConvertList","checkAndConvertToHyperlink","updateHistoryForComments","revisionElement","elementToInclude","isEnd","resultantText","previousValidNodeForTracking","checkWidget","combineRevisionWithNextPara","combineRevisionWithPrevPara","inlinePara","nextElementPara","nextValidNodeForTracking","prevElement","newElement","updateLastElementRevision","applyMatchedRevisionInorder","combineElementRevisions","elementToCombine","prevRevision","isBegin","revisionsMatched","elementToCopy","isSplitElementMerged","isRevisionAlreadyIn","isRevisionMatched","decideInlineForTrackChanges","matched","isMatched","insertSectionBreak","combineRevisionWithBlocks","prevPara","lastLine_1","lastElement_1","compareElementRevision","clearAndUpdateRevisons","nextPara","firstEleRevision","checkToCombineRevisionWithNextPara","mappedRevisions","removeRevision","revisionToRemove","clearElementRevision","spittedRange","currentDate","updateRevisionCollection","splitRevisionByElement","splittedRange","elementRevision","compare","insertRevisionAtEnd","insertRevisionAtPosition","prevRevisionLength","insertRevisionAtBegining","splitRevisionForSpittedElement","spittedElement","combineElementRevision","currentElementRevisions","revisionToCombine","rangeLength","combineRevisions","endposition","getLineInfo","editPostion","skipParaMark","elemets","currentRange","firstCell","updateEditPosition","selectFirstBlock","newSectionFormat","splitTable","splitParagraphInternal","splitBodyWidget","updateSectionIndex","insertRemoveHeaderFooter","updateBlockIndex","startBodyWidget","increaseIndex","isTab","convertList","isLeadingZero","tabValue","previousText","previousList","checkNumberFormat","checkLeadingZero","checkNextLevelAutoList","leadingZeroText","autoConvertList","listNumber","prevListText","currentListText","inputString","prevListNumber","getNumber","currentListNumber","roman","conversion","M","D","C","L","V","I","arr","num","newList","newAbstractList","isZero","getPageFromBlockWidget","skipReLayout","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","spanIndex","getPreviousTextInline","getNextTextInline","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","getCharacterFormat","createHyperlinkElement","updateComplexWithoutHistory","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","begin","insertHyperlinkfield","removeCollection","unlinkWholeRangeInRevision","fieldIndex","formFieldIndex","insertHyperlink","screenTip","insertHyperlinkInternalInternal","fieldStartPosition","selects","isTrackEnabled","insertHyperlinkByFormat","insertElement","insertElementInCurrentLine","checkIsNotRedoing","checkEndPosition","fieldResult","newFieldBegin","insertInlineInternal","insertClonedFieldResult","fieldParagraph","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","curParagraph","fieldStartString","fieldSeparatorPosition","fieldSeparatorString","pasteWindow","currentPasteOptions","defaultPasteOption","pasteElement","htmlContent","rtfContent","clipbordData","clipboardData","getData","pasteAjax","doc","currentPasteAction","applyPasteOptions","kind","pasteImage","getAsFile","files","imgFile","fileReader","FileReader","onload","onPasteImage","readAsDataURL","insertImage","proxy","pasteRequestHandler","systemClipboard","pasteFormattedContent","onPasteFailure","sfdt","document_1","getUniqueListOrAbstractListId","sortedList","sortedAbsList","checkSameLevelFormat","lstLevelNo","listLevelPatternInCollection","isEqualParagraphFormat","dest","getBlocksToUpdate","blcks","obj","updateListIdForBlocks","idToUpdate","update","existingList","isUpdated","toUpdate","updatePasteContent","pasteContent","sectionId","uniqueListId","sortedPasteList","uniqueAbsLstId","sortedPasteAbsList","out_k_1","this_1","lstDup","getBlocks","currentInline","insertParaFormat","copySelectionParagraphFormat","words","addCustomStyles","commentsCollection","commentEnds","parseComments","parseAbstractList","parseList","revisionCollection","sfdtExportModule","copyWithTrackChange","revisionCheck","revisionId","j_1","revision_1","parseRevisions","parseBody","lastParagraphMarkCopied","parseSectionFormat","applyMergeFormat","applyFormatInternal","isPasteOptionTextOnly","applyTablePasteOptions","pasteAsNestedTable","pasteAsNewRow","pasteAsNewColumn","pasteOverwriteCell","selectedTextLength","contentlength","isTablePaste","commentStartToInsert","defaultPaste","removeSelectedContentInternal","getOwnerCell","cloneTable","numberOfRows","numberOfColumns","newCell","addRows","tableUpdate","createColumn","rowspannedCollection","insertSpannedCells","tableReLayout","dataTable","pasteCell","clonedTable","rowIndexPaste","newCells","row2","rowSpanIndex","cloneCells","rowWidgetLength","cellIndexSE","rowsToAdd","numberOfColumns_1","cellIterate","getRowCountToInsert","getColumnCountToInsert","pasteRowCount","rowCell","isCellInserted","rowInsertion","isPastingContent","pasteCopiedData","isSectionEmpty","generateTableRevision","insertTableRows","insertBlockInternal","moveRows","constructRevisionsForTable","canConstructRevision","constructRevisionsForBlock","linIndex","isParaMarkIncluded","skipElement","endElement","moveInlines","checkInsertPosition","handleCut","removedCommentStart","deleteSelectedContent","isValidNodeForTracking","updateFootnoteCollection","updateEndnoteCollection","curInline","insertElementInternal","isTrackingEnabled","prevRevisionsCount","updateRevisionForElement","isFirstItem","isBeginning","isMiddle","relayout","skipTracking","incrementCommentIndex","revisionToInclude","startPara","insertImageInternal","isUiInteracted","insertPicture","createTable","removedComment","startLine","getLastParagraphInLastCell","above","rowPlacement","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","fitType","tableAdv","getTable","editorHistoryModule","isCellIncluded","isRowSpanned","clonedRowIndex","columnPlacement","copyCellFormats","newCellPara","nextCellpara","nextCellTextBox","isNewRow","textElementBox","getOwnerRow","isStart","endRow","getOwnerTable","endTable","alertDialog","confirmCellMerge","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","firstParagraph","getCellLeft","endCellLeft","endCellRight","cellInfo","updateSelectedCellsInTable","rowStartIndex","cellStart","mergeBorders","newBlock","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","startLeft","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","cellLeft","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertAfter","insertIndex_1","endLine","isMoved","moveContent","shapeIndex","updateRevisionForMovedContent","isLayoutChanged","previousBlockToLayout","shiftFootnotePageContent","updateHeaderFooterWidgetToPage","shiftPageContent","isEvenPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","isContentControl","removeFieldTable","removeField","checkAndShiftFromBottom","isEven","isNotEmpty","splittedSection","allowFormattingInFormFields","formattingExceptions","contentControlStart","getPosition","cCstart","cCend","checkPlainTextContentControl","startInline","endInlineEle","applyCharFormatValue","applyCharacterFormatForListText","applyListCharacterFormatByValue","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","toggleSubscript","toggleSuperscript","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","updateParagraphFormatInternal","currentUnderline","script","completeStylesString","intializeDefaultStyles","existingStyles","styleNames_1","name_2","styleString","createStyleIn","getUniqueStyleName","uniqueName","getUniqueName","matchArray","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","endLineWidget","inlineLength","applyCharFormatInline","getCurrentSelectionValue","changeCase","removedTextNodes","isRevert","changeTextCase","changeCaseParagraph","changeCaseParaFormatInCell","startOffsetVal","len","endOffsetVal","textCount","endElementBox","childIndex","isIncreaseIteration","changeCaseInline","changeCaseNextBlock","changeCaseInlineInternal","addRemovedTextNodes","textToChange","getChangeCaseText","preText","getNextBlockForChangeCase","changeCaseForTable","oldText","indexToStart","changeCaseForSelectedCell","containsRow","changeCaseForSelectedPara","changeCaseForSelTable","cellContainer","changeCaseParaForCellInternal","changeCaseParaForRow","changeCaseParaForTableCell","wCell","cellStartValue","cellEndValue","cellEndLeft","cellEndRight","childBlock","changeCaseParaFormatTableInternal","wRow","toggleAllCaps","getSelectedCharacterFormat","toggleStrikethrough","updateFontSize","fontsizeCollection","formatInline","indexCountForRevision","updateRevisionForFormattedContent","indexCount","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","copyInlineCharacterFormat","destFormat","onImageFormat","positionImageResizer","applyParagraphBorders","bordersType","isFirstParaForList","updateListLevelIndent","updateListLevel","getIndentIncrementValue","increaseLevel","nextListLevel","onApplyListInternal","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","isBidiList","applyParaFormatSelectedContent","applyCharacterStyle","applyParaFormat","applyParaFormatInCell","copyParagraphFormat","applyBorder","oldFormat","newFormat","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","levelNum","listType","checkNumberArabic","levelPattern","restartListAt","changeRestartNumbering","getNextParagraphForFormatting","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","applyParagraphFormatTableInternal","startValue","endValue","applyParaFormatTable","startPageIndex","endPageIndex","startSectionIndex","endSectionIndex","applyPropertyValueForSection","onApplyTableFormat","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","onApplyTableRowFormat","getRowAction","applyRowPropertyValue","onApplyTableCellFormat","getTableCellAction","applyCellPropertyValue","restartIndexForEndnotes","restartIndexForFootnotes","startInfo","endInfo","combineSection","nextSection","combineSectionChild","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","isMultipleSectionSelected","checkMultipleSectionSelected","removeSelectedContent","getBodyWidgetIndex","hierarchicalPosition","editAction","deletePara","deleteSection","deleteBlock","deleteTableCell","selectTable","considerTrackChanges","getParagraphForSelection","trackRowDeletion","onDeleteColumnConfirmed","selectColumn","deleteCells","selectRow","removeRow","canremoveRow","retrieveRevisionInOder","removeRevisionsInRow","trackInnerTable","returnDeleteRevision","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isEndInAdjacentTable","paraEnd","paraReplace","isStartParagraph","removeInlines","revisionLength","removeRevisionForBlock","deleteParagraphMark","insertParagraphPaste","removedNodeLength","checkAndInsertBlock","paraInfo","combineSectionInternal","currentSection","lastBlockIndex","paragraphAdv","linewid","removeFootnote","removeCommentsInBlock","removeCommentInPara","removeCommentsInline","skipElementRemoval","isSkipTracking","isPasteRevertAction","tableDelete","removePrevParaMarkRevision","isFromDelete","nonEmptyEndPara","toCheckForTrack","removeEndnote","removeAutoShape","endnote","deleteTableBlock","cellAdv","deletePreviousBlock","deleteCellsInTable","isCellCleared","deleteCell","deleteContainer","endCells","isDeleteCells","startColumnIndex","endColumnIndex","startRowIndex","endRowIndex","isRowSelected","isWholeRowSelected","onConfirmedTableCellsDeletion","tiltle","canRemoveRow","onConfirmedCellDeletion","rowToRemove","prevRenderedRow","setActionInternal","cell_1","j_2","removeRevisionForRow","addRemovedRevisionInfo","rowRevision","removeRevisionForInnerTable","addToRevisionInfo","unlinkRangeByRevision","copyChildToClipboard","checkClearCells","paragrapghBookmarkCollection","existingBookmark","bookmarkCol","deleteContent","splitEndRow","canHandleDeletion","deleteCommentInSelection","curentBaseHistoryInfo","startText","fieldInline","clearFieldElementRevisions","handleDeleteTracking","deleteCommentWidgetInline","removePrevRevisions","destination","cloneLevelOverride","updateListParagraphsInBlock","startListLevel","initialListLevel","isSameList","tempList","abstractListAdv","listName","bulletCharacters","isInsertPageBreak","SelectionCharacterFormat","fireRequestNavigate","breakParagraph","pageBreak","isRetrieveFormatting","checkParaMarkMatchedWithElement","insertParaRevision","isPreviousRevision","checkToMatchEmptyParaMark","applyRevisionForParaMark","splitRevision","isCombined","prevRevCount","checkToMatchEmptyParaMarkBack","lineWid","textWid","updateIndex","currentCellIndex","increment","getSelectedComments","commentEndInfo","commentStartInfo","startBlockInfo","endBlockInfo","commentToDelete","commentEndMark","commentStartBlockInfo","getParagraphInfoInternal","commentEndBlockInfo","updateStartPosition","startLineInfo","getLineInfoBasedOnParagraph","endLineInfo","skipBackSpace","insertSpaceInFormField","bookMark","bookMarkStart","bookMarkEnd","isBackSpace","deleteSelectedContentInternal","removeWholeElement","isElementInSelection","isCommentDelete","currentLineWidget","initComplextHistory","previousOffset","selectTextElementStartOfField","indexcolle","setPositionForHistory","removeOffset","removeAtOffset","childLength","removeCharacter","isRearrange","isBreak","removeCharacterInLine","removedCount","removeRevisionsInformation","removeElement","removedNode","updateEndRevisionIndex","handleDeletionForInsertRevision","revision_2","index_2","updateCursorForInsertRevision","checkToCombineRevisionsInSides","startOff","lastEle","endOff","toCombineOrInsertRevision","handleDeleteBySplitting","prevHistoryInfo","elementToEnsure","spittedSpan","deleteEditElement","removeContentControlMark","nextRenderedInline","editEnd","bookMarkBegin","paraEndOffset","singleDeleteInternal","handleParaMark","updateEditPositionOnMerge","handleDeleteParaMark","prevLastLineIndex","canRemoveParaMark","deleteRevision","retrieveRevisionByType","insertDeleteParaMarkRevision","revisionToRetrieve","combineRevisionOnDeleteParaMark","base64String","imageElementBox","generateFallBackImage","insertPictureInternal","draw","fitImageToPage","copyValues","changeMarginValue","onPaperSize","isFindingListParagraph","listID","getNextBlockForList","listSearchResultInfo","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","updateListNumber","listWholeWidth","prevWidth","lineInfo","skipSelectionChange","getParagraph","createFields","fieldtext","bookmarkEnd","insertElements","bookmarkName","getSelectionInfo","endElements","startElements","insertElementsInternal","getBodyWidget","getBlockInternal","getBlockByIndex","blockObj","isInsertPosition","applyBorders","clearAllBorderValues","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","borderType","isLastSelectedRow","isLastRightCell","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","sourceBorders","sourceShading","sourceBorder","isShading","applyTableFormat","handleTableFormat","shiftNextItem","rowStartPos","rowEndPos","handleRowFormat","onParaFormat","cellStartPosition","cellEndPosition","getSelectedCellInColumn","rowEndIndex","handleCellFormat","tocField","getTocFieldInternal","validateTocSettings","getTocSettings","swtiches","swtch","decodeTSwitch","tSwitch","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","createTocFieldElement","isSkipRevision","tocPara","tocLine","emptyParaAppended","headingStyleName","tocStyleName","insertTocHyperlink","pageField","insertTocPageNumber","bookMarkname","isRightAlign","pageRef","startElement","generateBookmarkName","formatString","onCellContentAlignment","selectTableCell","skipEditRangeRetrieval","addEditElement","insertEditRangeInsideTable","addRestrictEditingForSelectedArea","cellSelectionStartIndex","cellSelectionEndIndex","newEndElement","startCell_1","addEditCollectionToDocument","insertFormField","insertFormFieldInternal","getFormFieldData","getBookmarkName","getFormFieldCode","setFormField","formData","bookmarkStart","textFormat","currentOffset","getDefaultText","defaultText","updateFormFieldInternal","formattedText","updateFormFieldResult","checkBookmarkAvailability","available","applyFormTextFormat","isInlineFormFillProtectedMode","previousStartIndex","previousEndIndex","isModifyingSelectionInternally","getFirstParagraphBlock","isFormatUpdated","splittedName","initials","handleRightKey","footPara","updateFootNoteIndex","footText","followText","updateEndNoteIndex","endNoteCollec","footNoteCollec","ImageResizer","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","selectedImageWidget","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","currentImageElementBox","imageResizerDivElement","resizeDiv","initResizeMarks","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","showImageResizer","hideImageResizer","initResizeContainerDiv","opacity","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","points","currentElementId","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","imageHeight","widgetHeight","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","touchEvent","imageResizingPoints","bottomMiddle","bottomRight","bottomLeft","topMiddle","topRight","topLeft","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","selectedElements","updateHistoryForImageResizer","imageFormat","heightIn","CollaborativeEditing","version","updateAction","isArray","documentData","transFormLockRegion","lockRegion","selectionInfo","updateRegion","previousLockInfo","sectionDiff","blockDiff","getHierarchicalIndexByPosition","tranformPosition","firstPara","lastPara","getLastParagraphBlock","selectionInfo_1","roomName","startInfo_1","endInfo_1","ajax","userNames","isSelectionInEditableRange","getPreviousLockedRegion","saveTimer","sfdtContent","serializeEditableRegion","saveObject","saveContent","timeOut","saveTimeout","saveContentInternal","isPartialExport","previousEditRange","lockObject","lockRegionInternal","updateLockInfo","setEditableRegion","getParentBlock","lockStart","isInEditRange","startParagrahInfo","endParagrahInfo","removedBlock","removeDuplicateCollection","lastBockIndex","lastInsertIndex","containerWidget_1","editRanges_1","positionInfo","tranformSelection","tranformHistoryPosition","revisionStart","getRevisionTextPosition","transformHistory","transformBaseHistoryInfo","removeComment","incrementCount","pullAction","getPendingActions","TextSearch","isFooter","find","findOption","findNext","stringToRegex","textSearchResults","clearResults","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","getElementInfo","includeNextLine","inlines","stringBuilder","spans","elementBoxes","elementsWithOffset","fullText","isFirstMatch","addResult","spanKeys","getTextPosition","hierachicalPosition","nextParagraphWidget","findInline","getNextParagraph","findInlineText","inlineEle","matchObject","SearchWidgetInfo","leftInternal","widthInternal","TextSearchResult","getTextInternal","TextSearchResults","textSearchResult","SearchResults","navigate","getTextSearchResultsOffset","searchIndex","textToReplace","replaceInternal","replaceAll","replaceAllInternal","highlight","clearSearchHighlight","Search","isHandledOddPageHeader","isHandledEvenPageHeader","isHandledOddPageFooter","isHandledEvenPageFooter","searchResultsInternal","findOptions","replaceText","linewidget","searchResults","highlightResult","highlightSearchResult","getStartLineWidget","getEndLineWidget","elementCollection","getElementsForward","elementIsRTL","createHighlightBorder","highlightSearchResultParaWidget","findHighLight","addSearchHighlightBorder","highlighters","searchHighlight","getElementsBackward","addSearchResultItems","findResultsList","addFindResultView","addFindResultViewForSearch","suffixtext","lastIndex","getRenderedInline","boxObj","boxIndex","shiftIndex","endInlineObj","headerFooterString","OptionsPane","matchCase","wholeWord","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","focusedIndex","focusedElement","isOptionsPane","replacePaneText","findPaneText","matchDivReplaceText","tabInstance","searchOptionChange","clearSearchResultItems","inputText","searchInput","selectionIndex","navigateSearchResult","messageDiv","resultContainer","resultsListBlock","clearFocusElement","onEnableDisableReplaceButton","replaceButton","replaceAllButton","onKeyDownOnOptionPane","focusIndex","HTMLInputElement","HTMLLIElement","hideMatchDiv","onReplaceButtonClick","findText","replaceWith","selectionText","onReplaceAllButtonClick","searchIconClickInternal","inputElement","searchIcon","matchDiv","occurrenceDiv","patterns","getMessageDivHeight","resultsContainerHeight","findTab","navigateNextResultButtonClick","nextResult","navigateToNextResult","navigatePreviousResultButtonClick","previousResult","navigateToPreviousResult","onKeyDown","findDiv","resultListBlockClick","currentlist","list_1","currentelement","initOptionsPane","findTabButton","replaceTabButton","selectedTabItem","findTabContentDiv","searchTextBoxContainer","matchInput","matchChange","wholeWordLabel","wholeInput","wholeWordsChange","replaceTabContentDiv","createReplacePane","resultDiv","onWireEvents","replaceDiv","replaceButtonDivTextAlign","replaceButtonMargin","replaceButtonDiv","emptyDiv6","contentParent","previousTab","nextTab","firstElementChild","onFindPane","onReplacePane","currentIndexValue","text_1","searchElements","optionsPaneContainerStyle","resultListBox","message","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","allCapsIn","notifyPropertyChanged","fontFamilyIn","isCleared","propertyValue","combineFormat","selectionCharacterFormat","SelectionBorder","colorIn","lineStyleIn","lineWidthIn","shadowIn","spaceIn","SelectionBorders","SelectionParagraphFormat","spaceAfterAutoIn","spaceBeforeAutoIn","textAlignmentIn","firstLineIndentIn","lineSpacingTypeIn","bidiIn","keepWithNextIn","keepLinesTogetherIn","contextualSpacingIn","listLevelNumberIn","bordersIn","validateLineSpacing","listTextElement","getListTextElementBox","value_1","copyToFormat","history_1","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","pageStartingNumberIn","restartPageNumberingIn","footerDistanceIn","endnoteNumberFormatIn","footNoteNumberFormatIn","initialFootNoteNumberIn","initialEndNoteNumberIn","restartIndexForFootnotesIn","restartIndexForEndnotesIn","getPropertyvalue","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","preferredWidthTypeIn","background","SelectionCellFormat","verticalAlignmentIn","clearCellFormat","SelectionRowFormat","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","clearRowFormat","SelectionImageFormat","updateImageFormat","copyImageFormat","clearImageFormat","HtmlExport","prevListLevel","isOrdered","fieldCheck","writeHtml","serializeSection","string","serializeParagraph","closeList","serializeTable","blockStyle","isPreviousList","tagAttributes","getHtmlList","serializeParagraphStyle","createAttributesTag","getStyleName","serializeInlines","endTag","levelNumer","serializeContentInlines","serializeImageContainer","tagAttributes_1","serializeInlineStyle","serializeSpan","inlineStyle","spanClass","decodeHtmlNames","imageStyle","imageSource","serializeCell","cellHtml","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","convertBorderLineStyle","WCell","serializeBorderStyle","borderPosition","inlineFormat","serializeTextDecoration","tagValue","localProperties","sb","createTag","tableStyle","createRowEndTag","htmlText","Selection","documentEditor","contextTypeInternal","isMoveDownOrMoveUp","isHighlightEditRegionIn","isHighlightFormFields","isHightlightEditRegionInternal","isCurrentUser","isHighlightNext","isWebLayout","isSelectList","pasteOptions","characterFormatIn","paragraphFormatIn","rowFormatIn","imageFormatInternal","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","getContainerWidget","getSelBookmarks","writeSfdt","getFieldInfo","bookmarkCln","bookmrkStart","bookmrkEnd","bmStartPos","bmEndPos","bmEndPosCell","getCellInTable","checkLayout","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","enableSelection","selectTableInternal","selectTableRow","selectColumnInternal","selectCell","selectionSettings","startOrEnd","pageCoordinates","extend","selectByHierarchicalIndex","fieldStart","isKeyBoardEvent","isReplacingFormResult","triggerFormFillEvent","linkType","localReference","navigateBookmark","hyperLinkField","linkText","copyToClipboard","isHideSelection","bodyWgt","headerFooterHt","showResizerForShape","highlightSelectedContent","isElementBoxHighlight","shapeElement","startTextPos","endTextPos","selectionWidget","selectionWidgetCollection","addEditRegionHighlight","addFormFieldHighlight","getWrapPosition","selectionWidgetInfos","splitSelectionHighlightPosition","getPageTop","clipSelection","clipInfo","editRegionHighlight","userColor","formFieldHighlight","createHighlightBorderInsideTable","isVisiblePage","canvasContext","widgetInfoCollection","selectedWidgetInfo","heightInfo","descent","selectedWidgetInfoCollection","removeSelectionHighlight","currentParaWidget","selectedWidgetCollection","pageRect","selectCurrentWordRange","selectLine","moveToLineStart","handleShiftEndKey","moveToDocumentStart","handleControlHomeKey","moveToDocumentEnd","handleControlEndKey","moveToParagraphStart","moveToParagraphEnd","moveToNextCharacter","moveToPreviousCharacter","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","getFormFieldInFormFillMode","selectPrevNextFormField","nextFootnote","footNoteElement","nextFootnoteElement","referenceElement","previousFootnote","nextEndnote","endNoteElement","endnoteElement","previousEndnote","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","firstrow","firstcell","selectionLength","isMovePrevious","cellEnd","lastRow","lastCell","moveToLineEnd","isMouseLeave","lastPage","documentEnd","handleControlLeftKey","extendToWordStartInternal","handleControlRightKey","extendToWordEndInternal","handleControlDownKey","handleControlUpKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","isCurrentParaBidi","handleControlShiftUpKey","handleControlShiftDownKey","handleUpKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","isNavigateInCell","isShiftTab","selectPreviousCell","selectNextCell","currentFormField","isKeyBoardNavigation","previousFieldData","currentFieldData","previousField","currentField","selectTableCellInternal","clearMultiSelection","firstLineWidget","columnCells","startCellColumnCells","endCellColumnCells","selectAll","pageLength","endNotes","extendToWordStartEnd","extendToWordStart","extendToWordEnd","isNavigation","includeObject","startInlineObj","getTextInline","hfString","getParagraphInternal","getHeaderFooterWidget","getFootNoteWidget","getBodyWidgetInternal","lineOffset","endParagraphWidget","getFieldCodeInternal","getPreviousParagraph","getLastParagraphInFirstRow","elemPosition","cell1","cell2","startPage","isExistBeforeInline","isExistAfterInline","isRetrieve","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","getPreviousParagraphSelection","getFirstParagraphInLastRow","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","fieldValue","elementBoxObj","highlightNextBlock","hightLightNextParagraph","highlightCell","startLineObj","endLineObj","charFormat","paragraphMarkWidth","highlightParagraph","elementBoxCollection","highlightTable","getLineWidgetInternalInline","highlightCells","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","highlightCellWidget","sourceCell","getLevelFormatNumber","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","getNextLineWidget","measureObj","firstInline","getEndPosition","getRenderedField","elementObj","getCaretHeight","isItalic","getFieldCharacterHeight","heightElement","maxLineHeight","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","floatWidget","floatWidgetWidth","getLineWidgetTableWidget","footChild","getLineWidgetParaWidget","lineTotalHeight","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","isImageSelectedObj","includeParagraphMark","elementValues","getFirstElement","selectParaMark","charIndex","curIndex","getTextLength","textMetrics","isLineEnd","renderedElement","renderedChild","getIndexInInline","renderedWidget","widgetInternal","childLen","fireSelectionChange","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","setCurrentContextType","getPreviousContextType","isElement","getContextElement","getNextContextType","contextIsinImage","contextIsinTable","getCurrentRevision","isInHeader","addItemRevisions","currentItem","eleEndPosition","nextOffsetElement","processLineRevisions","getselectedRevisionElements","acceptReject","toAccept","getSelectedLineRevisions","addRevisionsCollec","eleStartPosition","revisCollec","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","startParaSection","endParaSection","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInBlock","getParagraphFormatInternalInCell","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","getCharacterFormatInternal","setCharacterFormat","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","isSelected","top_4","widgetIn","copyAddress","isCrossRef","toolTipElement","toolTipText","getScreenTipText","showToolTip","toolTipField","toolTipObject","ln","positions","toolTipInfo","createPasteElement","pasteDropDwn","splitButtonEle","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","lineStartInLeft","leftLength","checkFormField","isParagraph","paragraphIsInFieldResult","inlineIsInFieldResult","bodyIndex","checkFieldResult","getSelectedCellsInTable","startRowindex","isCut","getHtmlContent","documentContent","htmlWriter","removeAllRanges","createRange","selectNodeContents","addRange","copySuccess","execCommand","enableCursorOnReadOnly","caretLeft","caretStartLeft","caretEndLeft","page_1","setStart","collapse","top_5","skipUpdate","transform","caretHeightInfo","pagePoint","isCursorInHeaderRegion","shiftBlockOnHeaderFooterEnableDisable","moveToStart","bookmrkElmnt","getTocField","isTocStyle","commentNavigateInternal","navigatePreviousRevision","navigateNextRevision","curentPosition","firstElementTable","lastElementTable","secondRowWidget","everyOneArea","unHighlightEditRegion","highlightEditRegionInternal","highlightEditRegions","nextPosition","firstPosition","toggleEditingRegionHighlight","isSelectionInsideEditRange","editRangeRow","checkFormat","cCStartInsideSelction","cCEndInsideSelction","bookmarkId","tablerow","tc","tablecell","paragr","lines","SpellChecker","langIDInternal","enableSpellCheckInternal","uniqueSpelledWords","spellSuggestionInternal","uniqueKey","removeUnderlineInternal","uniqueWordsCountInternal","performOptimizedCheck","uniqueWordsCollection","createGuid","exactText_1","handleReplace","retrieveExactElementInfo","exactText","startPattern","handleIgnoreOnce","endPattern","contextElement","contextItem","isRemove","allsuggestions","spellCheckSuggestion","constructInlineMenu","spellSuggestion","hasError","erroElements","updateStatusForGlobalErrors","handleErrorCollection","getCombinedElement","errorInElement","errors","inlineSuggestion","errorElement","addErrorCollection","elementToCompare","errorElements","compareErrorTextElement","compareTextElement","addCorrectWordCollection","isCorrectWord","copyElement","isSamePage","HasSpellingError","textToCombine","isNext","isPrevious","canCombine","checkPrevious","checkNext","combinedElements","prevText","prevCombined","isPrevField","lookThroughPreviousLine","nextText","canCombine_1","lookThroughNextLine","checkCombinedElementsBeIgnored","handleCombinedElements","currentText_1","checkArrayHasSameElement","elementToCheck","handleMatchedResults","Text","HasSpellError","wavyLineY","word","checkSpelling","checkSuggestion","addWord","isByPage","spellchecker","Promise","httpRequest_1","service_1","spellCheck","setCustomHeaders","spellCheckData","LanguageID","TexttoCheck","CheckSpelling","CheckSuggestion","AddWord","httpRequest","errorWords","updateErrorElementTextBox","textLineInfo","matchedText","wordLength","beginingwidth","errorCount","sfdtExport","Initialize","writePage","textExportModule","textExport","pageContent","setDocument","writeInternal","spelledWords","localStorage","uniqueWordsCount","checkForUniqueWords","setItem","spellData","clearCache","dateTime","randNo","wordToCheck","uniqueWords","Optimized","optimizedHeightCollection","getkeyFromCharFormat","getFontInfo","baseLineFactor","offsetTop","heightFactor","HeightFactor","BaselineFactor","fontInfo","fontHeight","fontSizeInfo","Regular","textHeight","tempDiv","textTopVal","SfdtReader","isPageBreakInsideTable","referedRevisions","isParseHeader","editableRanges","convertJsonToDocument","json","parseDocumentProtection","trackChanges","dontUseHTMLParagraphAutoSpacing","documentSettings","parseStyles","parseSections","customXml","parseCustomXml","formFieldShading","parseFootnotes","parseEndtnotes","generalizeRevisions","tempRevisionCollection","tempRevisons","xmlData","itemID","enforcement","revisionData","parseRevision","checkAndApplyRevision","revisionIds","commentData","parseComment","parseCommentText","wStyle","basedStyle","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","listCollection","parseLevelOverride","parseHeaderFooter","parseTextBody","hfs","oddHeader","oddFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","isSectionBreak","hasValidElmts","parseParagraph","parseTable","blockStartContentControl","blockEndContentControl","parseContentControlProperties","blockWidget","parseTableFormat","parseTablePositioning","parseRowFormat","parseRowGridValues","parseCellFormat","cellStartContentControl","cellEndContentControl","rowStartContentControl","rowEndContentControl","wContentControlProperties","contentControlListItem","writeInlineFormat","trackChange","chartGapWidth","chartOverlap","parseChartTitleArea","parseChartArea","plotArea","parseChartLegend","parseChartData","parseChartCategoryAxis","parseChartDataTable","ChartComponent","chartRender","isValidImage","validateImageUrl","getimageheight","getimagewidth","textInput","fieldTextElement","containsFieldBegin","isAdd","isConsider","permEnd","permStart","parseEditableRangeStart","commentID","commentCharacterType","commentStartElement","commentEndElement","inlineStartContentControl","inlineEndContentControl","addEditRangeCollection","newEditStartCollection","titleArea","chartfontName","chartFontSize","parseChartDataFormat","parseChartLayout","rgb","chartLayout","chartLayoutLeft","chartLayoutTop","legend","chartLegendPostion","categoryAxis","primaryAxis","categoryAxisType","categoryNumberFormat","axisFontSize","axisFontName","majorGridLines","minorGridLines","majorTick","minorTick","tickPosition","tickLabelPosition","categoryAxisTitle","showSeriesKeys","hasHorzBorder","hasVertBorder","hasBorders","chartForeColor","xData","xName","yData","yAxisValue","bubbleSize","parseChartSeries","isPieType","seriesName","firstSliceAngle","doughnutHoleSize","parseChartDataLabels","dataLabel","markerStyle","markerColor","markerSize","errorType","errorEndStyle","parseChartTrendLines","parseChartSeriesDataPoints","dataPoints","labelPosition","isLegendKey","isBubbleSize","isCategoryName","isSeriesName","isValue","isPercentage","isLeaderLines","chartFormat","trendLineName","trendLineType","forwardValue","backwardValue","interceptValue","isDisplayEquation","isDisplayRSquared","parseBorders","parseShading","isSamePaddingAsTable","parseCellMargin","destBorder","parseBorder","destShading","texture","parseListFormat","parseTabStop","wTabs","imagestr","WordExport","customXMLItemsPath","customXMLItemsPropspath","itemPropsPath","documentPath","stylePath","chartPath","numberingPath","settingsPath","headerPath","footerPath","imagePath","footnotesPath","endnotesPath","appPath","corePath","contentTypesPath","defaultEmbeddingPath","commentsPath","commentsExtendedPath","generalRelationPath","wordRelationPath","customXMLRelPath","excelRelationPath","footnotesRelationPath","endnotesRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","settingsContentType","commentsContentType","commentsExContentType","endnoteContentType","footerContentType","footnoteContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","chartsContentType","tableStyleContentType","chartColorStyleContentType","commentsRelType","commentsExRelType","settingsRelType","endnoteRelType","footerRelType","footnoteRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","chartRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","chartColorStyleRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","svgNamespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cxNamespace","c15Namespace","c7Namespace","csNamespace","spreadSheetNamespace","spreadSheet9","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","dsNamespace","excelFiles","lastSection","mRelationShipID","cRelationShipId","eRelationShipId","efRelationShipId","mDocPrID","chartCount","seriesCount","chartStringCount","mDifferentFirstPage","mBookmarks","mComments","customXMLProps","paraID","commentParaID","commentParaIDInfo","isInsideComment","currentCommentId","trackChangesId","prevRevisionIds","isRevisionContinuous","mDocumentImages","mSvgImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterSvgImages","mDocumentCharts","mHeaderFooterColl","mFootEndnotesColl","fileName","serialize","serializeExcelFiles","all","saveInternal","mArchive","saveAsBlob","blob","Blob","excelPromise","zipArchiveItem","ZipArchiveItem","saveExcel","xlsxPath","mArchiveExcel","clearDocument","mCustomXML","ZipArchive","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeComments","serializeCommentsExtended","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","contenttype","serializeSettingsRelation","serializeHeaderFooters","serializeFootnotes","serializeEndnotes","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","mStyles","blockOwner","writer","XmlWriter","writeStartElement","writeCommonAttributeStrings","serializeDocumentBody","writeEndElement","archiveItem","buffer","writeAttributeString","writeCustom","writeDup","last","serializeBodyItems","serializeSectionProperties","serializeCommentCommonAttribute","serializeCommentInternal","retrieveCommentText","serializeBodyItem","multiText","serializeCommentsExInternal","syncParaID","serializeHFReference","serializeSectionType","serializePageSetup","serializeColumns","serializeFootNotesPr","serializeEndNotesPr","getFootNoteNumberFormat","getFootNoteNumberRestart","patternType","numberRestart","getPageNumberFormat","pageSetup","serializePageSize","serializePageMargins","serializePageNumberType","roundToTwoDecimal","marginValue","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeContentControl","contentControlItem","serializeContentProperties","contentProperties","picture","toUnicode","dropDownLists","serializeContentControlList","comboList","serializeContentControlDate","serializeContentParagraph","sec","serializeParagraphItems","serializeRevisionStart","retrieveRevision","serializeTrackChanges","paraItems","isContinueOverride","isBdo","serializeBiDirectionalOverride","serializeFieldCharacter","serializePicture","currentParargaph","serializeShape","serializeBookMark","serializeEditRange","serializeChart","serializeChartStructure","serializeComment","serializeEFReference","serializeTextRange","serializeRevisionEnd","efId","ef","getEFNextRelationShipID","addFootnotesEndnotes","efType","efColl","endnotesFootnotes","serializeEndnotesFootnote","serializeInlineEndnotes","serializeInlineFootnotes","endNoteFootnote","writeEFCommonAttributes","serializeCommentItems","editElement","getBookmarkId","serializeDrawing","serializeInlineCharts","serializeInlinePictureAndShape","serializeWrappingPictureAndShape","serializePictureAndShapeDistance","behindText","layoutcell","horPos","writeString","horAlig","vertPos","verAlig","serializeShapeDrawingGraphics","serializeShapeWrapStyle","serializeDrawingGraphics","writeDefaultDistAttribute","serializeDrawingGraphicsChart","updatechartId","getNextChartName","serializeChartXML","serializeChartColors","serializeChartExcelData","serializeChartRelations","serializeChartData","colorPath","serializeChartColor","isScatterType","serializeWorkBook","serializeSharedString","serializeExcelContentTypes","serializeExcelData","serializeExcelStyles","serializeExcelRelation","serializeExcelGeneralRelations","resetExcelRelationShipId","getNextExcelRelationShipID","serializeExcelSheet","chartSharedString","seriesLength","isString","category","uniqueCount","bubbleLength","isBubbleType","categoryLength","alphaNumeric","serializeDefaultContentType","serializeOverrideContentType","serializeRelationShip","getNextChartRelationShipID","serializeTextProperties","serializeChartPlotArea","serializeShapeProperties","serializationChartType","isPieTypeSerialization","barDiv","grouping","chartGrouping","valueSheet","parseChartDataPoint","parseChartSeriesColor","serializeChartErrorBar","serializeDefaultShapeProperties","categoryRef","cacheType","serializeChartCategory","serializeChartValue","isStackedPercentage","serializeCategoryAxis","serializeValueAxis","showHorzBorder","showVertBorder","showOutline","showKeys","serializeChartLegend","legendPosition","chartLegendPosition","serializeChartTitleFont","errorBarValueType","valueType","axisType","formatCode","serializeAxis","valueAxis","crossBetween","axisID","axis","chartTrendLineType","dispRSqr","dispEq","solidFill","serializeChartSolidFill","trendlineType","isLine","serializeDefaultLineProperties","chartTitleName","serializeFont","fontSizeCalc","isSeriesFill","symbolType","chartCategoryCount","serializeChartYValue","addChartRelation","documentCharts","chartCollection","relationId","lineWeight","wrapType","updateShapeId","documentImages","externalImages","serializeBlipExtensions","iscrop","t","isSvgData","tOwner","updateHFImageRels","addImageRelation","svgImages","imageCollection","isSvgImage","headerId","types","hfKeys","headerImages","headerFooterSvgImages","headerFooterImages","serializeTableFormat","serializeTableGrid","mHorizontalMerge","owner_1","serializeRowFormat","cellLength","prevColIndex","getMergeCellFormat","serializeTableCell","mergedCellFormat","xmlWriter","mergeStart","serializeCellWidth","serializeCellMargins","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","itemIndex","grid","serializeGridColumns","serializeTableRows","serializeCells","serializeRowMargins","pointWidth","serializeCellFormat","createCellForMerge","collKey","endProperties","spanCellFormat","serializeColumnSpan","checkMergeCell","ensureMerge","serializeCellMerge","serializeGridSpan","cf","isserialized","createMerge","gridValue","serializeTablePositioning","serializeTableWidth","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableMargins","serializeTableBorders","serializeTblLayout","serializeMargins","getTextureStyle","serializeParagraphBorders","formatPara","multipler","isParagraphBorder","serializeBorder","tagName","multiplier","sz","getBorderStyle","tableIndent","writeElementString","encodeURI","isDeleteText","retrieveDeleteRevision","localName","serializeListFormat","getOutlineLevelValue","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","outlineLvl","lvlNumber","serializeTab","getTabJustification","lf","txtAlignment","lineSpacingValue","serializeCustomXMLMapping","customXML","customXmlWriter","fileIndex","itemPath","createXMLItem","createXMLItemProps","customXMLRelation","xmlBlob","customitemPropsPath","serializeDefaultStyles","serializeDocumentStyles","serializeBoolProperty","getHighlightColor","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","cnt","serializeListLevel","lvl","serializeLevelOverrides","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","lvlIndex","fc","serializeDocumentProtectionSettings","editMode","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeSvgImageRelation","serializeHeaderFooterRelations","serializeChartDocumentRelations","serializeExternalLinkImages","charts","resetChartRelationShipId","chartColorPath","chartRelationPath","chartExcelPath","images","isSvg","mImage","imageInfo","imageBlob","encodedString","encode2","encode3","encode4","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeHFContentTypes","SerializeEFContentTypes","serializeHeaderFootersContentType","partName","serializeEFContentType","TextExport","curSectionIndex","inField","StreamWriter","streamWriter","sectionCount","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","writeText","writeHeaderFooter","writeLine","paragraphs","pCount","SfdtExport","writeInlineStyles","blockContent","startContent","multipleLineContent","nestedContent","selectedCommentsId","selectedRevisionId","nestedBlockContent","nestedBlockEnabled","contentInline","isBlockClosed","isExport","checkboxOrDropdown","updateEditRangeId","createSection","createParagraph","getNextBlock","writeBlock","endCell_1","writeStyles","writeLists","writeComments","writeRevisions","writeCustomXml","writeParagraphFormat","writeBodyWidget","writeHeaderFooters","blockContentControl","tableContentControl","writeParagraphs","secondElement","nestedBlocks","contentControlProperty","contentControlPropertie","tounCheckedState","toCheckedState","state","unCheckedState","secondChild","tableContentControls","writeLines","writeInlines","isformField","writeInlinesFootNote","writeInlinesContentControl","writeInline","inlineContentControl","nestedContentInline","inlineContentControls","nestedContentinline","nestedContentProperty","writeChart","editableRangeStart","writeShape","textFrameBlock","writeChartTitleArea","writeChartArea","writeChartCategory","createChartSeries","writeChartLegend","writeChartCategoryAxis","writeChartDataTable","writeChartDataFormat","writeChartLayout","primaryCategoryAxis","categories","createChartCategory","writeChartData","yCategory","createChartData","writeChartSeries","errorBarData","writeChartDataLabels","writeChartTrendLines","isContentStarted","started","ended","contentinline","isParaSelected","writeParagraphBorders","writeListFormat","writeTabs","listIdValue","writeRow","writeRowInternal","createRow","writeCell","createCell","writeTableFormat","writeTablePositioning","writeRowFormat","writeCellFormat","writeShading","wShading","writeBorder","wBorder","wBorders","writeBorders","wCellFormat","wRowFormat","writeRowRevisions","wrevisions","wTableFormat","seprators","endnoteSeparator","writeStyle","writeRevision","writeComment","xmlValue","commentInlines","ctext","writeList","writeAbstractList","wAbstractList","writeListLevel","wList","writeLevelOverrides","wlevel","wListLevel","NotesDialog","noteNumberFormat","footnotesFormat","reversetype","notesList","startValueTextBox","endnotesFormat","onInsertFootnoteClick","formats","renderFormat","notesDialog","idName","startatValue","footCount","endnoteListValue","listFocus","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","DocumentEditorSettings","Property","selectionColor","ChildProperty","DocumentSettings","DocumentEditor","enableHeaderFooterIn","disableHistoryIn","createdTriggered","Table","Row","Cell","Ok","Apply","Cancel","Size","Preferred Width","Points","Percent","Measure in","Alignment","Left","Center","Right","Justify","Indent from left","Borders and Shading","Options","Specify height","At least","Exactly","Row height is","Allow row to break across pages","Repeat as header row at the top of each page","Vertical alignment","Top","Bottom","Default cell margins","Default cell spacing","Allow spacing between cells","Cell margins","Same as the whole table","Borders","None","Style","Letter","1, 2, 3, ...","a, b, c, ...","A, B, C, ...","I, II, III, ...","i, ii, iii, ...","Tabloid","Legal","Statement","Executive","A3","A4","A5","B4","B5","Custom Size","Different odd and even","Different first page","From edge","Header","Footer","First Page Header","First Page Footer","Even Page Header","Even Page Footer","Odd Page Header","Odd Page Footer","Paper","Orientation","Landscape","Portrait","Show page numbers","Right align page numbers","Nothing","Tab leader","Show levels","Use hyperlinks instead of page numbers","Build table of contents from","Styles","Available styles","TOC level","Heading","Heading 1","Heading 2","Heading 3","Heading 4","Heading 5","Heading 6","List Paragraph","Normal","Outline levels","Table entry fields","Modify","Color","Setting","Box","All","Custom","Preview","Shading","Fill","Apply To","Table Properties","Cell Options","Table Options","Insert Table","Number of columns","Number of rows","Text to display","ScreenTip text","Address","Insert Hyperlink","Edit Hyperlink","Insert","General","Indentation","Before text","Special","First line","Hanging","After text","By","Before","Line Spacing","After","At","Multiple","Spacing","Define new Multilevel list","List level","Choose level to modify","Level","Number format","Number style for this level","Enter formatting for number","Start at","Restart list after","Position","Text indent at","Aligned at","Follow number with","Tab character","Space","Arabic","UpRoman","LowRoman","UpLetter","LowLetter","Leading zero","Bullet","Ordinal","Ordinal Text","For East","No Restart","Font","Font style","Underline style","Font color","Effects","Strikethrough","Superscript","Subscript","Double strikethrough","Bold","Italic","Cut","Copy","Paste","Open Hyperlink","Copy Hyperlink","Remove Hyperlink","Paragraph","Linked Style","Character","Merge Cells","Insert Above","Insert Below","Insert Left","Insert Right","Delete","Delete Table","Delete Row","Delete Column","File Name","Format Type","Save","Navigation","Results","Replace","Replace All","We replaced all","Find","No matches","All Done","Result","of","instances","with","Click to follow link","Continue Numbering","Bookmark name","Close","Restart At","Properties","Style type","Style based on","Style for following paragraph","Formatting","Numbering and Bullets","Numbering","Update Field","Edit Field","Bookmark","Page Setup","No bookmarks found","Number format tooltip information","Format","Create New Style","Modify Style","New","InsertFootnote","InsertEndnote","Endnote","Notes Options","Bullets","Use bookmarks","Table of Contents","AutoFit","AutoFit to Contents","AutoFit to Window","Fixed Column Width","Reset","Match case","Whole words","Add","Go To","Search for","Replace with","TOC 1","TOC 2","TOC 3","TOC 4","TOC 5","TOC 6","TOC 7","TOC 8","TOC 9","Right-to-left","Left-to-right","Direction","Table direction","Indent from right","Contextual Spacing","Password Mismatch","Restrict Editing","Formatting restrictions","Allow formatting","Editing restrictions","Read only","Exceptions Optional","Select Part Of Document And User","Everyone","More users","Add Users","Enforcing Protection","Start Enforcing Protection","Enter User","Users","Enter new password","Reenter new password to confirm","Your permissions","Protected Document","FormFieldsOnly","CommentsOnly","ReadOnlyProtection","Stop Protection","Password","Spelling Editor","Spelling","Spell Check","Underline errors","Ignore","Ignore All","Add to Dictionary","Change","Change All","The password is incorrect","Error in establishing connection with web server","Highlight the regions I can edit","Show All Regions I Can Edit","Find Next Region I Can Edit","Keep source formatting","Match destination formatting","InsertAsRows","InsertAsColumns","OverwriteCells","NestTable","Text only","Comments","Type your comment","Post","Reply","New Comment","Edit","Resolve","Reopen","No comments in this document","more","Type your comment here","Next Comment","Previous Comment","Un-posted comments","Discard Comment","No Headings","Add Headings","More Options","Click to see this comment","Form Fields","Text Form","Check Box","Drop Down Form Field","Dropdown items","Items in dropdown list","ADD","REMOVE","Field settings","Dropdown enabled","Check Box Form Field","Check box size","Auto","Default value","Not checked","Checked","Check box enabled","Text Form Field","Type","Default text","Maximum length","Text format","Fillin enabled","Default number","Default date","Date format","Merge Track","UnTrack","Accept","Reject","Previous Changes","Next Changes","Inserted","Deleted","Move From","Move To","Changes","Accept all","Reject all","No changes","Accept Changes","Reject Changes","User","View","Insertion","Deletion","All caps","This region is locked by","Lock","Unlock","Already locked","Click to View/Edit Footnote","Click to View/Edit Endnote","Multiple Comment","No suggestions","More Suggestion","Ignore Once","Keep With Next","Keep Lines Together","WidowControl","Indents and Spacing","Line and Page Breaks","Pagination","Single","DashSmallGap","DashDot","Double","ThinThickSmallGap","ThickThinSmallGap","ThickThinMediumGap","ThickThinLargeGap","SingleWavy","DoubleWavy","Inset","DashLargeGap","Dot","DashDotDot","Triple","ThinThickThinSmallGap","ThinThickThinMediumGap","ThinThickThinLargeGap","DashDotStroked","Engrave3D","Thick","Outset","Emboss3D","ThinThickLargeGap","ThinThickMediumGap","Number of rows must be between 1 and 32767.","Number of columns must be between 1 and 63.","Unlimited","Regular text","Uppercase","Lowercase","FirstCapital","TitleCase","Filling in forms","px","Tracked changes","TrackChangesOnly","RemovedIgnoreExceptions","RemovedIgnore","Information","Yes","No","initHelper","DocumentEditor_1","spellCheckDialogModule","spellCheckerModule","isDocumentLoadedIn","enableSpellCheck","enableImageResizer","preRender","enableOptimizedTextMeasuring","Inject","refreshing","minHeight","formatUnit","optimizedModule","regularModule","renderComplete","onPropertyChanged","model","oldProp","localizeDialogs","oldValue","footNotesDialogModule","pageSetupDialogModule","tableDialogModule","setDefaultCharacterFormat","setDefaultParagraphFormat","setDefaultSectionFormat","getPersistData","clearPreservedCollectionsInViewer","enableEditor","fireBeformFieldFill","fireAfterFormFieldFill","showPageSetupDialog","showTableDialog","showTableOfContentsDialog","showHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","showStylesDialog","stylesDialogModule","showTablePropertiesDialog","showBordersAndShadingDialog","requiredModules","modules","member","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableSearch","enableContextMenu","enableOptionsPane","enableHyperlinkDialog","enableTableDialog","enableBookmarkDialog","enableTableOfContentsDialog","enablePageSetupDialog","enableFootnoteAndEndnoteDialog","enableStyleDialog","enableListDialog","enableParagraphDialog","enableFontDialog","enableTablePropertiesDialog","enableBordersAndShadingDialog","enableTableOptionsDialog","sfdtText","clearSpellCheck","enableAllModules","refreshOverflow","getFormFieldNames","formFieldNames","formFieldInfo","resetFormFields","importFormData","exportFormData","fitPage","printModule","mimeType","wordExportModule","jsonString","showDialog","dialogType","showSpellCheckDialog","showOptionsPane","showRestrictEditingPane","destroyDependentModules","Complex","Event","NotifyPropertyChanges","Component","ServerActionSettings","FormFieldSettings","CollaborativeEditingSettings","ContainerServerActionSettings","CLIPBOARD_ID","isCommentEditing","importHandler","initToolBar","toolbarItems","renderToolBar","toolbarContainer","toolbarWrapper","toolbarTarget","initToolbarItems","propertiesPaneDiv","cssClassName","propertiesPaneButton","EventHandler","showHidePropertiesPane","initToolbarDropdown","id_1","imgDropDwn","onDropDownButtonSelect","breakDropDwn","filePicker","imagePicker","toggleButton","restrictIconCss","restrictDropDwn","onBeforeRenderRestrictDropdown","formFieldDropDown","selectedIcon","toggleRestrictIcon","toggleProtection","icon","toggle","paneDiv","propertiesPaneContainer","showPropertiesPane","previousContext","showHeaderProperties","enableDisablePropertyPaneButton","showPropertiesPaneOnSelection","onWrapText","togglePropertiesPane","onFileChange","onImageChange","EJ2Toolbar","clicked","clickHandler","getToolbarItems","reInitToolbarItems","toolbarTimer","tItem","toggleTrackChangesInternal","statusBar","toggleWebLayout","onToc","toggleLocalPaste","toggleEditing","toggleRestrictEditing","restrictEditingId","parentId","file","fileSize","fileReader_1","readAsText","convertToSfdt","containerTarget","import","append","enableDisableFormField","enableDisableInsertComment","toggleTrackChanges","trackId","enableDisableToolBarItem","isProtectedContent","containsItem","enableDisableUndoRedo","undoElement","redoElement","headerFooterProperties","showProperties","HeaderFooterProperties","isHeaderTopApply","isFooterTopApply","initHeaderFooterPane","toolbarModule","enableDisableElements","initializeHeaderFooter","showHeaderFooterPane","onSelectionChange","elementId","createDivTemplate","headerLabel","closeButtonFloat","closeIcon","optionsLabelDiv","optionsLabel","firstPage","changeFirstPageOptions","oddOrEven","changeoddOrEvenOptions","positionLabelDiv","positionLabel","positionDiv","headerTopDiv","headerTopLabel","headerFromTop","showSpinButton","footerBottomDiv","footerBottomLabel","footerFromTop","divElement","onHeaderValue","onFooterValue","changeHeaderValue","changeFooterValue","headerTop","footerTop","ImageProperties","isWidthApply","isHeightApply","isMaintainAspectRatio","initializeImageProperties","initImageProp","imageDiv","outerDiv","widthElement","createImagePropertiesDiv","widthNumericBox","heightNumericBox","aspectRatioDiv","aspectRatio","aspectRatioBtn","inputId","spanContent","tooltip","onAspectRatioBtnClick","onImageWidth","onImageHeight","applyImageWidth","applyImageHeight","ratio","showImageProperties","updateImageProperties","TocProperties","initializeTocPane","tocHeaderDiv","initTemplates","tocOptionsDiv","contentStylesDropdown","checkboxContent","updateTocProperties","rightalignPageNumber","showPageNumber","cancelBtn","updateBtn","onInsertToc","showTocPane","closeButtonMargin","template1","template1Div","templateContent1","templateContent2","templateContent3","createDropDownButton","contentStyleElement","borderLevelStyle","checkboxElement","showPageNumberDiv","showpagenumberCheckboxElement","rightalignpagenumberCheckboxElement","hyperlinkDiv","hyperlinkCheckboxElement","footerElementFloat","footerElement","updatebuttoncontentStyleElement","cancelbuttoncontentStyleElement","previousContextType","prevContext","borderBtn","isRetrieving","appliedHighlightColor","createChangecase","changeCaseDropdown","changeCaseContainer","initializeTextPropertiesDiv","wholeDiv","textProperties","textDiv","createDiv","fontFamilyDiv","createDropDownListForFamily","fontSizeDiv","divClassName","createDropDownListForSize","propertiesDiv","createButtonTemplate","rightDiv","leftDiv2","createFontColorPicker","lastElementChild","initializeHighlightColorElement","createHighlightColorSplitButton","nextElementSibling","highlightColorInputElement","rightDiv2","hgltSplitObj","SplitButton","highlightColorElement","closePopup","openPopup","applyHighlightColor","yellowDiv","createHightlighColorPickerDiv","brightGreenDiv","turquoiseDiv","hotPinkDiv","blueDiv","redDiv","darkBlueDiv","tealDiv","greenDiv","violetDiv","darkRedDiv","darkYellowDiv","gray50Div","gray25Div","blackDiv","nocolor","nocolorDiv","nocolorDivValue","onHighLightColor","applyHighlightColorAsBackground","removeSelectedColorDiv","hgltColor","getHighLightColor","iconcss","btn","boldBtn","italicBtn","underlineBtn","strikethroughBtn","superscriptBtn","subscriptBtn","clearFormatBtn","fontColorInputElement","showButtons","fontSelectElement","enableCsp","FontValue","changeFontFamily","changeFontSize","boldAction","italicAction","underlineAction","strikethroughAction","superscriptAction","subscriptAction","changeFontColor","clearFormatAction","unwireEvents","appliedBulletStyle","appliedNumberingStyle","appliedLineSpacing","splitButtonClass","initializeParagraphPropertiesDiv","paragraphDiv","createDivElement","styleDiv","styleSelect","createStyleDropDownList","indentWholeDiv","indentDiv","indentClassName","leftAlignment","centerAlignment","rightAlignment","increaseIndentIconCss","decreaseIndentIconCss","incDecIndentDiv","listDiv","paraDiv","createLineSpacingDropdown","listDropDown","bulletButton","numberingList","bulletIconCss","numberIconCss","createBulletListDropButton","createNumberListDropButton","createSeparator","leftAlignmentBtn","rightAlignmentBtn","justifyBtn","decreaseIndentBtn","increaseIndentBtn","bordersBtn","centerAlignmentBtn","dropdown","lineSpacingAction","noneNumberTag","numberedNoneClick","numberList","numberedNumberDotClick","lowLetter","numberedLowLetterClick","upLetter","numberedUpLetterClick","lowRoman","numberedLowRomanClick","upRoman","numberedUpRomanClick","updateSelectedNumberedListType","removeSelectedList","numberedListBtn","applyLastAppliedNumbering","updateSelectedBulletListType","flowerBullet","tickBullet","noneBulletTag","applyLastAppliedBullet","bulletDotClick","bulletCircleClick","bulletSquareClick","bulletArrowClick","bulletTickClick","bulletFlowerClick","bulletListBtn","spanDiv","selectElement","StyleName","Class","selectStyleValue","updateOptions","footerTemplate","popup","itemData","constructStyleDropItems","domStyle","textDecoration","vAlign","leftAlignmentAction","rightAlignmentAction","centerAlignmentAction","justifyAction","increaseIndentAction","decreaseIndentAction","setLineSpacing","applyStyleValue","TextProperties","isTableProperties","isInitial","initializeTextProperties","updateStyles","showTextProperties","generateUniqueID","TableProperties","imageProperty","isTopMarginApply","isRightMarginApply","isBottomMarginApply","isLeftMarginApply","groupButtonClass","tableTextProperties","initializeTablePropPane","initFillColorDiv","initBorderStylesDiv","initCellDiv","initInsertOrDelCell","initCellMargin","initAlignText","addTablePropertyTab","textHeader","propertiesTab","shadingBtn","changeBackgroundColor","tableOutlineBorder","onOutlineBorder","tableAllBorder","onAllBorder","tableCenterBorder","onInsideBorder","tableLeftBorder","onLeftBorder","tableCenterVerticalBorder","onVerticalBorder","tableRightBorder","onRightBorder","tableTopBorder","onTopBorder","tableCenterHorizontalBorder","onHorizontalBorder","tableBottomBorder","onBottomBorder","insertRowAbove","onInsertRowAbove","insertRowBelow","onInsertRowBelow","insertColumnLeft","onInsertColumnLeft","insertColumnRight","onInsertColumnRight","onDeleteRow","onDeleteColumn","horizontalMerge","onMergeCell","alignTop","applyAlignTop","alignBottom","applyAlignBottom","alignCenterHorizontal","applyAlignCenterHorizontal","onTopMargin","onRightMargin","onLeftMargin","onBottomMargin","applyTopMargin","applyRightMargin","applyLeftMargin","applyBottomMargin","borderSize","fillDiv","createColorPickerTemplate","borderStyleDiv","div1","div2","div3","styleTypeDiv","borderSizeButton","createBorderSizeDropDown","borderSizeColorElement","cellDiv","tableOperationDiv","cellMarginDiv","createCellMarginTextBox","textboxLabel","textboxId","parentStyle","maxValue","isRight","cellMarginParentDiv","cellMarginLabel","cellMarginTextbox","cellMarginNumericText","createDropdownOption","onBorderSizeChange","borderBottomColor","dropDownBtn","iconPos","iconPosition","isBorderWidth","showTableProperties","paneHeight","StatusBar","docEditor","statusBarDiv","initializeStatusBar","pageCount","pageNumberInput","editablePageNumber","pageNumberOfLabelStyle","updatePageNumber","label1","updatePageCount","verticalLine","spellCheckBtn","addSpellCheckElement","spellCheckButton","pageButton","webButton","addRemoveClass","zoomBtn","onZoom","spellCheckItems","onSpellCheck","currentLanguage","allowSuggestion","setZoomValue","updateZoomContent","setSpellCheckValue","editorPageCount","updatePageNumberWidth","updatePageNumberOnViewChange","togglePageLayout","addToElement","removeFromElement","appendDiv","webBtn","pageBtn","DocumentEditorContainer","Insert Footnote","Insert Endnote","Footnote Tooltip","Endnote Tooltip","Open","Undo","Redo","Link","HEADING - - - - 1","HEADING - - - - 2","HEADING - - - - 3","Page Number","Break","Local Clipboard","Upload from computer","By URL","Page Break","Show properties pane","Hide properties pane","Section Break","Header And Footer","Levels","Different First Page","Different header and footer for odd and even pages","Different Odd And Even Pages","Different header and footer for first page","Header from Top","Footer from Bottom","Distance from top of the page to top of the header","Distance from bottom of the page to bottom of the footer","Aspect ratio","W","H","Fill color","Border Style","Outside borders","All borders","Inside borders","Left border","Inside vertical border","Right border","Top border","Inside horizontal border","Bottom border","Border color","Border width","Merge cells","Insert Or Delete","Insert columns to the left","Insert columns to the right","Insert rows above","Insert rows below","Delete rows","Delete columns","Cell Margin","Align Text","Align top","Align bottom","Align center","Number of heading or outline levels to be shown in table of contents","Show page numbers in table of contents","Right align page numbers in table of contents","Use hyperlinks","Font Size","Text highlight color","Clear all formatting","Bold Tooltip","Italic Tooltip","Underline Tooltip","Superscript Tooltip","Subscript Tooltip","Align left Tooltip","Center Tooltip","Align right Tooltip","Justify Tooltip","Decrease indent","Increase indent","Line spacing","Manage Styles","Fit one page","Fit page width","Update","No Border","Create a new document","Open a document","Undo Tooltip","Redo Tooltip","Insert inline picture from a file","Insert a table into the document","Create Hyperlink","Insert a bookmark in a specific place in this document","Provide an overview of your document by adding a table of contents","Add or edit the header","Add or edit the footer","Open the page setup dialog","Add page numbers","Find Text","Toggle between the internal clipboard and system clipboard","Current Page Number","Protections","New comment","Print layout","Web layout","DropDown","Update Fields","Update cross reference fields","Track Changes","TrackChanges","AllCaps","Change case Tooltip","UPPERCASE","No color","Top margin","Bottom margin","Left margin","Right margin","ZoomLevelTooltip","documentEditorInternal","newModel","oldModel","restrictEditingToggleHelper","setserverActionSettings","customizeDocumentEditorSettings","createToolbarContainer","enableToolbar","initContainerElement","initializeDocumentEditor","imageProperties","tocProperties","statusBarElement","setFormat","propertiesPaneContainerBorder","editorContainer","isCustom","documentEditorTarget","selectionChange","contentChange","onContentChange","documentChange","onDocumentChange","requestNavigate","onRequestNavigate","viewChange","onViewChange","customContextMenuSelect","onCustomContextMenuSelect","customContextMenuBeforeOpen","onCustomContextMenuBeforeOpen","beforePaneSwitch","onBeforePaneSwitch","commentBegin","onCommentBegin","onCommentEnd","commentDelete","onCommentDelete","beforeCommentAction","onCommentAction","onTrackChange","serviceFailure","beforeXmlHttpRequestSend","beforeXmlHttpSend","onZoomFactorChange","unWireEvents","isProtectedDocument","isSelectionInProtectecRegion","currentContext","index.DocumentEditor","index.Print","index.SfdtExport","index.WordExport","index.TextExport","index.Selection","index.Search","index.Editor","index.EditorHistory","index.OptionsPane","index.ContextMenu","index.ImageResizer","index.HyperlinkDialog","index.TableDialog","index.BookmarkDialog","index.TableOfContentsDialog","index.PageSetupDialog","index.ParagraphDialog","index.ListDialog","index.StyleDialog","index.StylesDialog","index.BulletsAndNumberingDialog","index.FontDialog","index.TablePropertiesDialog","index.BordersAndShadingDialog","index.TableOptionsDialog","index.CellOptionsDialog","index.SpellChecker","index.SpellCheckDialog","index.CollaborativeEditing","index.DocumentEditorContainer","index.Toolbar"],"mappings":"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"} \ No newline at end of file diff --git a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js b/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js deleted file mode 100644 index 0582ba3..0000000 --- a/Server side with distributed cache/Java/Using Redis/src/main/resources/static/js/main.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -var usernamePage = document.querySelector('#username-page'); -var chatPage = document.querySelector('#chat-page'); -var usernameForm = document.querySelector('#usernameForm'); -var messageForm = document.querySelector('#messageForm'); -var messageInput = document.querySelector('#message'); -var messageArea = document.querySelector('#messageArea'); -var connectingElement = document.querySelector('.connecting'); - -var stompClient = null; -var username = null; - -var colors = [ - '#2196F3', '#32c787', '#00BCD4', '#ff5652', - '#ffc107', '#ff85af', '#FF9800', '#39bbb0' -]; - -function connect(event) { - username = document.querySelector('#name').value.trim(); - - if(username) { - usernamePage.classList.add('hidden'); - chatPage.classList.remove('hidden'); - - var socket = new SockJS('/ws'); - stompClient = Stomp.over(socket); - - stompClient.connect({}, onConnected, onError); - } - event.preventDefault(); -} - - -function onConnected() { - // Subscribe to the Public Topic - stompClient.subscribe('/topic/public', onMessageReceived); - - // Tell your username to the server - stompClient.send("/app/chat.addUser", - {}, - JSON.stringify({sender: username, type: 'JOIN'}) - ) - - connectingElement.classList.add('hidden'); -} - - -function onError(error) { - connectingElement.textContent = 'Could not connect to WebSocket server. Please refresh this page to try again!'; - connectingElement.style.color = 'red'; -} - - -function sendMessage(event) { - var messageContent = messageInput.value.trim(); - - if(messageContent && stompClient) { - var chatMessage = { - sender: username, - content: messageInput.value, - type: 'CHAT' - }; - - stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage)); - messageInput.value = ''; - } - event.preventDefault(); -} - - -function onMessageReceived(payload) { - var message = JSON.parse(payload.body); - - var messageElement = document.createElement('li'); - - if(message.type === 'JOIN') { - messageElement.classList.add('event-message'); - message.content = message.sender + ' joined!'; - } else if (message.type === 'LEAVE') { - messageElement.classList.add('event-message'); - message.content = message.sender + ' left!'; - } else { - messageElement.classList.add('chat-message'); - - var avatarElement = document.createElement('i'); - var avatarText = document.createTextNode(message.sender[0]); - avatarElement.appendChild(avatarText); - avatarElement.style['background-color'] = getAvatarColor(message.sender); - - messageElement.appendChild(avatarElement); - - var usernameElement = document.createElement('span'); - var usernameText = document.createTextNode(message.sender); - usernameElement.appendChild(usernameText); - messageElement.appendChild(usernameElement); - } - - var textElement = document.createElement('p'); - var messageText = document.createTextNode(message.content); - textElement.appendChild(messageText); - - messageElement.appendChild(textElement); - - messageArea.appendChild(messageElement); - messageArea.scrollTop = messageArea.scrollHeight; -} - - -function getAvatarColor(messageSender) { - var hash = 0; - for (var i = 0; i < messageSender.length; i++) { - hash = 31 * hash + messageSender.charCodeAt(i); - } - - var index = Math.abs(hash % colors.length); - return colors[index]; -} - -usernameForm.addEventListener('submit', connect, true) -messageForm.addEventListener('submit', sendMessage, true)